一、Redis的各种数据类型都有哪些应用场景呢?
上一章已经写了Redis的五种基本数据类型的常用命令,那么这五种数据类型在哪些场景应用呢?
(1)String(字符串的应用场景)
- 单值缓存
set key value
get key
- 对象缓存
set user:001 value(json数据)
mset user:001:name zhangsan user:001:age 18
- 共享session
session保存在服务器端,分布式服务下,由于服务器较多,session在多个服务器之间需要共享。
实现方式:spring session + redis实现session共享
- 分布式锁
服务器A和服务器B同时获取锁,如下:
SETNX order:1001 true // 服务器A获取锁,返回值为1
SETNX order:1001 true // 服务器B获取锁失败,返回值为0
。。。执行业务操作
DEL order:1001 // 执行完业务后释放锁
- 计数器
例如公众号的文章阅读量。
INCR article:readcount:{文章id}
GET article:readcount:{文章id}
- 分布式系统全局序列号
INCRBY goodsId 1000 // redis批量生成序列号
(2)Hash(哈希的应用场景)
- 缓存对象信息
电商购物车为例:
- key为cart:用户id
- field为商品id
- value为商品数量
- 购物车操作
- 添加商品 hset cart:1001 10025 1
- 删除商品 hdel cart:1001 10025
- 增加商品购买数量 hincrby cart:1001 10025 1
- 商品总数 hlen cart:1001
- 获取所有商品 hgetall cart:1001
(3)List(列表的应用场景)
- 消息队列(后进先出,Stack栈形式的应用)
例如:微信公众号
解析:比如关注了新华网和Java面试那些事儿
- 当新华网发文章,文章ID为20001
lpush 前缀:用户ID 文章ID
lpush msg:1001 20001
- 当Java面试那些事儿过会也发了一篇文章,文章ID为20005
lpush msg:1001 20005
- 用户1001查看自己的订阅号消息
LRANGE key start stop // 返回列表key中指定区间内的元素,区间以偏移量start和stop指定
lrange msg:1001 0 10
这样就完成了简化形式的消息列表,真实的订阅号消息列表指定比上述方法更复杂,这里只是针对List(列表的应用场景)做一个举例。
(4)set(集合的应用场景)
应用场景:微信的点赞,收藏,共同关注的人和可能认识的人
(1)点赞
- 点赞
SADD key value
SADD {前缀}:{消息ID} {用户ID} SADD like:2001 1001
- 取消点赞
SREM like:2001 1001
- 检查是否有点赞
SISMEMBER like:2001 1001
- 获取点赞列表
SMEMBERS like:2001 1001
- 获取点赞数
SCARD like:2001 1001
(2)收藏
- 收藏
SADD {前缀}:{用户ID} {文章ID}
SADD collection:1001 3001
- 取消收藏
SREM collection:1001 3001
(3)共同关注的人和可能认识的人(以三国人物名举例)
liubeiset->{zhugeliang,guanyu,zhagnfei,zhaoyun}
caocaoset->{zhugeliang,guanyu,guojia}
sunquanset->{zhugeliang,zhaoyun,zhouyu}
- 刘备和曹操共同关注的人
SINTER解释:集合的交集。
SINTER liubeiset caocaoset ->{zhugeliang,guanyu}
- 刘备可能认识的人
SDIFF解释:Sdiff 命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。
SDIFF caocaoset liubeiset ->{guojia}
(5)zset(有序集合的应用场景)
- 排行榜
(1)点击某条新闻
ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
ZINCRBY hotsearch:20221101 1 梦天实验舱与空间站对接瞬间
(2)查询排行榜前20
ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE hotsearch:20221101 0 19 WITHSCORES
INCRBY hotsearch:20221101 1 梦天实验舱与空间站对接瞬间
(2)查询排行榜前20
ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE hotsearch:20221101 0 19 WITHSCORES