1.redis核心数据结构
redis核心数据结构有5种:string,hash,zset,list,set
2.应用场景
String应用场景
单值缓存,对象缓存:利用JSON强大的兼容性、可读性和易用性,将对象转换为JSON字符串,再存储在string类型中,是个不错的选择,如用户信息、商品信息等。
分布式锁:Redis 是单线程,多路复用方式提高处理效率。我们可以借助中间件Redis的setnx()命令实现分布式锁。setnx()命令只会对不存在的key设值,返回1代表获取锁成功。对存在的key设值,会返回0代表获取锁失败。
计数器:string类型的incr和decr命令的作用是将key中储存的数字值加一/减一,这两个操作具有原子性,总能安全地进行加减操作,因此可以用string类型进行计数,如微博的评论数、点赞数、分享数,抖音作品的收藏数,京东商品的销售量、评价数等。
除此外还有web集群session共享,分布式系统全局序列号等…
hash应用场景
对象缓存:同上
电商购物车:
举例:(用户id为key,商品id为field,商品数量为value)
购物车的操作:
1)添加商品
格式:hset key field value—>hset car1:1001 1234 1
2)增加数量
格式:hincrby key field increment—>hincrby car1:1001 1234 1
3)商品总数
格式:hlen key—>hlen car1:1001
4)删除商品
格式:hdel key field [field …]—>hdel car1:1001 1234
5)获取购物车所有商品
格式:hgetall key—>hgetall car1:1001
list应用场景
list类型是简单的字符串列表,按照插入顺序排序。每个列表最多可以存储 232 - 1 个元素(40多亿)。
实现常用的数据结构(栈,队列)
Stack(栈)—>LPUSH+LPOP (FILO)
Queue(队列)—>LPUSH+RPOP(FIFO)
Blocking Queue(阻塞队列)—>LPUSH+BRPOP
除此外还有微博和微信公众号消息流等…
set应用场景
微信点赞,收藏和标签
举例:
1)点赞---->sadd like: {消息id} {用户id}
格式:sadd key member [member …]
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。
2)取消点赞------>srem like:{消息id} {用户id}
格式:srem key member [member …]
移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。当 key 不是集合类型,返回一个错误。
3)检查用户是否点赞------>sismember like: {消息id} {用户id}
格式:sismember key member
判断 member 元素是否集合 key 的成员。
4)获取点赞的用户列表---->smembers like: {消息id}
格式:smembers key
返回集合 key 中的所有成员。
不存在的 key 被视为空集合。
5)获取点赞用户数------>scard like: {消息id}
格式:scard key
返回集合 key 的基数(集合中元素的数量)。
除了上述点赞之外,还有微信抽奖小程序,集合操作(微博微信关注模型,共同好友共同关注)等。
zset应用场景
根据时间排序的新闻列表等, 阅读排行榜
举例:微博热搜
更多应用场景:
redis命令参考