Redis 五种基本数据类型介绍及使用场景
String 字符串
概叙
Redis 最基本的类型,默认最大储存512MB数据。
String类型的Value中可以存放任意数据,包括数值类型,甚至是二进制的图片,音频,序列化对象等。
应用场景
- 数据缓存 :Redis 作为数据缓存层,Mysql 作为数据储存层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从MySQL 中获取后先存入缓存层在返回应用服务器
- 计数器: 在Redis中写入一个value 为数值型的key作为平台计数器,视频播放计数器等,每个有效客户端访问一次,或视频每播放一次,都是直接修改Redis 中的计数器,然后再以异步方式持久化到其它数据源中,例如持久化到MySQL
- 共享Session: 可以将系统中所有用户的Seesion数据全部保存到Redis中,用户在提交新的请求后,系统先从Redis中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录界面,这样就不会引发“重复登录”问题
- 限速器: 现在很多平台为了防止Dos(Denial of Service,拒绝服务)攻击,一般都会限制一个IP不能在一秒内访问超过N次,而Redis 可以结合key的过期时间和incr命令来完成限速功能,充当限速器
- 分布式锁: set nx 来进行加锁的,当访问资源时查询是否存在锁,存在则等待
Hash 散列表
概述
Hash 类型也称为Hash 表,字典等。
Hash 表就是一个映射表Map ,也是由键-值对构成,为了于整体的key进行区分,这里的键称为field,值称为 value 。注意 Redis 的Hash 表中的 field-value 对均为 String 类型
应用场景
Hash 型 value 非常适合存储对象数据。key为对象名称,value 为描述对象属性的Map,对对象属性的修改在Redis 中就可直接完成。其不像 String 型 Value 存储对象,那个对象是序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为JSON串后写入到Redis
List 链表(列表)
概叙
List 列表是最简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左侧)或者尾部(右侧)
应用场景
- 栈 :通过 lpush + lpop 可以实现栈数据结构效果:先进后出。通过lpop 从列表左侧取出数据,当然通过 rpush + rpop 也可以实现相同效果
- 队列:通过 lpush + lpop 可以实现队列数据结构效果:先进先出。通过lpush 从列表左侧插入数据,通过rpop 从列表右侧取出数据。当然通过 rpush + lpop 也可以实现相同效果,只不过操作的方向正好相反。
- 阻塞式消息队列:通过lpush + brpop 可以实现堵塞式消息队列效果。作为消息生产者的客户端使用 lpush 从列表左侧插入数据,作为消息消费者的多个客户端使用 brpop 阻塞式 “抢占” 列尾部数据进行消费,保证了消费的负载均衡与高可用性。brpop 的 timeout 设置为0,表示只要没有数据可弹出,就永久堵塞。
- 动态有限集合:通过 lpush + ltrim 可以实现有限集合。通过lpush 从列表左侧向列表中添加数据,通过ltrim 保持 集合的动态有限性。像企业的末位淘汰,学校的重点班等动态管理,都可通过这种动态有限集合来实现,当然通过 rpush + lyrim 也可以实现相同效果,只不过操作的方向正好相反
Set 集合
概述
Set 集合中的每一个元素均为String 类型。
Set 中的元素具有无序性与不可重复性。
应用场景
- ** 动态黑白名单** : 例如某服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入 Redis,只要有客户端访问服务器,服务器再获取到客户端IP 后先从Redis 的黑名单中查看是否存在该IP,如果存在,则拒绝访问,否则访问通过。
- 有限随机数: 有限随机数是指返回的随机数是基于某一集合范围内的随机数,随机选人。通过 spop 或者 srandmember 可以实现从指定集合中随机选取元素
- 用户画像:社交平台,电商平台等各种需要用户注册登录的平台,会根据用户提供的资料与用户与用户使用习惯,为每个用户画像,即为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用sadd 添加到该用户对应的集合中。这些标签具有无序,不重复特征。同时平台还可以使用 sinter/sinterstore 根据用户画像间的交集进行好友推荐,商品推荐,客户推荐等。
SortedSet
概述
有序Set 中的每个元素均 String 类型。
有序Set 中的每一个元素都有一个分值 score, Redis 会根据score 的值对集合进行由小到大的排序。其与Set 集合要求相同,元素不能重复,但元素的score 可以重复。
由于该类型的所有命令均是字母 z 开头,所以该Set 也称为 zset
应用场景
排行榜:有序Set 最为典型的应用场景就是排行榜,例如音乐,视频平台中根据用户评价或者销售进行排序榜等。将播放量作为score,将作品id 作为member ,将用户评价积分或销售量作为 score,将商家id 作为 member。使用zincrby 增加排序 score,使用 zrevrange 获取 top 前几名,使用 zrevrank 查询当前排名,使用 zscore 查询当前排序 score 等
还没有评论,来说两句吧...