redis最初就是被定义为缓存使用的,缓存中放哪些业务数据呢?
1.原始业务功能设计
- 秒杀
- 618、双十1
- 排队购票
2.运营平台监控到的热点数据
3.高频、复杂的统计数据
- 在线人数
- 投票排行榜
4.附加功能
- session、token令牌
- 单服务器升级集群
String类型的基本操作
- 添加数据
set key value
- 获取数据
get key #返回数据,或者(nil)没有数据
- 删除数据
del key #返回(integer)1--成功 (Integer)0--失败
- 添加多个数据 multiple(多个) 批量比单个操作节省时间,但也要考虑数据规模以及网络堵塞
mset key1 value1 key2 value2 key3 value3...
- 获取多个数据
mget key1 key2 ...
- 获取字符串长度
strlen key
- 追加信息到原始信息后面(如果原始信息存在就追加,否则新建)
append key value #返回追加后的字符串长度
String类型的扩展操作
场景:分表主表如何保证唯一,redis可以实现。
- 设置数值数据增加指定的范围的值
incr key #自增+1
incrby key increment #增加increment整数,可以为负整数
incrbyfloat key increment #增加increment,可以为整数或小数
- 设置数值数据减少指定的范围的值
decr key #自减+1
decrby key increment #自减increment整数,可以为负整数
decrbyfloat key increment #自减increment,可以为整数或小数
String作为数值操作注意事项:
- string在redis内部存储默认就是一个字符串,当遇到增减操作incr,decr时会转成数值型进行计算
- redis的所有操作都是原子性的,采用单线程处理所有的业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis数值上线范围,将报错。(java中Long型数据最大值,Long.MAX_VALUE)
场景2:保存博客专家的用户信息。
- 在redis中,以用户主键和属性名作为key,后台设定定时刷新策略即可。
eg: user:id:1000001:fans →5200 #表示id为1000001的用户拥有粉丝数5200
- 在redis中以json格式存储博客专家的用户信息,定时刷新(也可以使用hash类型)
eg: user:id:1000001 →{id:1000001,fans:5200,name:***}
key的设置格式约定
表名:主键名:主键值:字段名