Redis常用数据结构

48 阅读2分钟

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