Redis中常用的数据结构
字符串String、哈希Hash、列表List、集合set、有序集合zset。
String
字符串可以包括简单的字符串,复杂的(Json、xml、)数字(整形,浮点)甚至还是二进制(图片、音频、视频)值最大是512兆
Hash
Hash类型本身就是一个键值对结构
LIst:
列表中的元素是有序的,可以通过索引下标获取某个元素,列表中的元素是可以重复的
Set
集合中的元素是无序的,不能重复
使用场景
1、缓存
比如缓存数据字典了,配置信息了,库存等热点信息。一般采用字符串数据结构较多。Java是面向对象的如果我们缓存的信息比较复杂最好序列化一下。缓存一个Json字符串,取出来的时候反序列化一下,更符合面向对象语言特点
2、分布式session
3、分布式锁
集群环境下并发问题都会考虑分布式锁
4、全局id(单调递增)incr key
5、计数器 (单调递增)incr key
比如文章的阅读量、视频播放量、网站浏览数
6、限流 (单调递增)incr key
比一个登陆接口限制10分钟内连续登陆失败5次就会被锁定, 比如限制一个客户端不能在一定时间内操作n次
7、扣减库存防止超买/超卖(单调递增/递减)decr key同时也解决了性能问题
8、购物车(Hash)
一般采用Hash结构较多,key用户的id,field 商品id,value 商品的信息
9、消息队列(List)
Redis支持发布订阅功能,虽然没有专业的MQ强大,但是使用起来简单
Redis的List操作,lpush+brpop命令可以实现阻塞队列,生产者使用使用lpush从列表左侧插入元素,消费者从队尾获取元素
10、点赞、签到、打卡、共同好友/爱好(交集、差集、并集)等一些操作(Set)
比如用like作为点赞的key,set数据结构记录所有点赞用户
001:代表高的,002代表富有的,003:代表帅的,现在想知道高富帅是哪些人,那么我们取一下这三个集合的并集就行了
11、排行榜(zset)
Zset比较典型的使用场景是排行榜,比如按照区域、等维度对某款手机销量进行排序
比如南京这个区域卖掉3部华为手机可以使用有序集合zadd和zincrby功能
zadd id_00001 3 Huawei
如果每卖出一部手机可以使用zincrby
zincrby id_00001 1 Huawei
展示销量最高的手机
zreverangebyrank id_00001 0 1