Redis 五种基本数据类型介绍及使用场景

String 字符串

概叙

     Redis 最基本的类型,默认最大储存512MB数据。
     String类型的Value中可以存放任意数据,包括数值类型,甚至是二进制的图片,音频,序列化对象等。

应用场景

  1. 数据缓存 :Redis 作为数据缓存层,Mysql 作为数据储存层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从MySQL 中获取后先存入缓存层在返回应用服务器
  2. 计数器: 在Redis中写入一个value 为数值型的key作为平台计数器,视频播放计数器等,每个有效客户端访问一次,或视频每播放一次,都是直接修改Redis 中的计数器,然后再以异步方式持久化到其它数据源中,例如持久化到MySQL
  3. 共享Session: 可以将系统中所有用户的Seesion数据全部保存到Redis中,用户在提交新的请求后,系统先从Redis中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录界面,这样就不会引发“重复登录”问题
  4. 限速器: 现在很多平台为了防止Dos(Denial of Service,拒绝服务)攻击,一般都会限制一个IP不能在一秒内访问超过N次,而Redis 可以结合key的过期时间和incr命令来完成限速功能,充当限速器
  5. 分布式锁: 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 列表是最简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左侧)或者尾部(右侧)

应用场景

  1. :通过 lpush + lpop 可以实现栈数据结构效果:先进后出。通过lpop 从列表左侧取出数据,当然通过 rpush + rpop 也可以实现相同效果
  2. 队列:通过 lpush + lpop 可以实现队列数据结构效果:先进先出。通过lpush 从列表左侧插入数据,通过rpop 从列表右侧取出数据。当然通过 rpush + lpop 也可以实现相同效果,只不过操作的方向正好相反。
  3. 阻塞式消息队列:通过lpush + brpop 可以实现堵塞式消息队列效果。作为消息生产者的客户端使用 lpush 从列表左侧插入数据,作为消息消费者的多个客户端使用 brpop 阻塞式 “抢占” 列尾部数据进行消费,保证了消费的负载均衡与高可用性。brpop 的 timeout 设置为0,表示只要没有数据可弹出,就永久堵塞。
  4. 动态有限集合:通过 lpush + ltrim 可以实现有限集合。通过lpush 从列表左侧向列表中添加数据,通过ltrim 保持 集合的动态有限性。像企业的末位淘汰,学校的重点班等动态管理,都可通过这种动态有限集合来实现,当然通过 rpush + lyrim 也可以实现相同效果,只不过操作的方向正好相反

Set 集合

概述

     Set 集合中的每一个元素均为String 类型。
     Set 中的元素具有无序性与不可重复性。

应用场景

  1. ** 动态黑白名单** : 例如某服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入 Redis,只要有客户端访问服务器,服务器再获取到客户端IP 后先从Redis 的黑名单中查看是否存在该IP,如果存在,则拒绝访问,否则访问通过。
  2. 有限随机数: 有限随机数是指返回的随机数是基于某一集合范围内的随机数,随机选人。通过 spop 或者 srandmember 可以实现从指定集合中随机选取元素
  3. 用户画像:社交平台,电商平台等各种需要用户注册登录的平台,会根据用户提供的资料与用户与用户使用习惯,为每个用户画像,即为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用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 等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值