一、Redis的5大数据类型简易图
二、String应用场景
- 单值存储
SET key value GET key
- 对象缓存
SET user:1 value (json 字符串) MSET user:1:name zhangsan user:1:sex F MGET user:1:name user:1:sex
- 对象缓存
SETNX product:1 true //返回1代表取所成功,0代表取锁失败‘ ... 执行业务操作 DEL product:1 SET product:1 true ex 10 nx //防止意外终止导致死锁
- 计数器
INCR aritcle:readCount:{id} GET aritcle:readCount:{id}
- Web集群Session共享
Spring session + redis 试下session共享
- 分布式系统全局序列号
INCRBY orderId 1000 //redis 批量生成序列号提升性能
三、Hash应用场景
3.1 常用操作
3.2 应用场景
对象缓存
//HSET 单个设置, HMSET 批量设置
HMSET user {userId}:name zhangsan {userId}:sex F
HMGET user 1:name 1:sex
Hash 购物车场景:
3.3 优缺点
优点
- 同类数据归类整合存储,方便数据管理
- 相比string操作消耗内存与CPU更小
- 相比string存储更节省空间
缺点
- 过期功能不能使用在field上,只能用在key上
- Redis集群架构下不适合大规模使用
四、 List应用场景
4.1 常用操作
4.2 常用数据
4.3 使用场景
- 微博消息和微信公众号消息
张三关注了李四,王五等大V
//1) 李四发微博,消息ID为10001
LPUSH msg:{张三-ID} 10001
//2) 王五发微博,消息ID为10002
LPUSH msg:{张三-ID} 10002
//3) 查看最新微博消息
LRANGE msg:{张三-ID} 0 5
五、 Set
5.1 Set结构
5.1 Set应用场景
- 微信抽奖小程序
// 1) 点击参与抽奖的人加入集合
SADD key {userId}
// 2)查看参与抽奖的所有用户
SMEMBERS key
// 3) 抽取count名中奖者 SRANDMEMBER(不剔除获奖者)/SPOP (会提出获奖者,比如一等奖 ,二等奖)
SRANDMEMBER key [count]/SPOP key [count]
- 微信微博点赞,收藏,标签
// 1) 点赞
SADD like:{消息ID} {用户ID}
// 2) 取消点赞
SREM like:{消息ID} {用户ID}
// 3)检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID}
// 4)获取点赞的用户列表
SMEMBERS like:{消息ID}
// 5)获取点赞用户
SCARD like:{消息ID}
- 互联网的关注模型
// 1)我关注的人:payneSet -> {成龙,李连杰}
// 2)周润发关注的人:zhouSet -> {成龙,zhourunfa}
// 3)李连杰关注的人:liSet -> {周润发,任达华}
// 4)成龙关注的人:clSet -> {周星驰,任达华}
// 5)我和周润发共同关注的人:--> {成龙}
SINTER payneSet zhouSet
// 6)我关注的人也关注了周润发
SISMEMBER clSet 周润发
SISMEMBER liSet 周润发
// 7)我可能认识的人:->{任达华}
SDIFF clSet liSet
- 结合操作实现电商筛选