1, 字符串使用场景
a) 缓存功能
典型使用场景: Redis 作为缓存层, MySQL 作为存储层, 绝大部分请求的数据都是从 Redis 中获取, 由于 Redis 具有支撑高并发的特性, 所以缓存通常能起到加速读写和降低后端压力的作用.
开发提示: 与 MySQL 等关系型数据库不同的是, Redis 没有命令空间, 而且也没有对键名有强制要求, 但设计合理的键名, 有利于防止键冲突和项目的可维护性, 比较推荐的方式是使用 "业务名: 对象名: id:[属性]" 作为键名. 例如 MySQL 的数据库名为 vs, 用户表名为 user, 那么对应的键可以用 "vs:user:1","vs:user:1:name" 来表示, 如果当前 Redis 只被一个业务使用, 甚至可以去掉 vs. 如果键名比较长, 例如 "user:{uid}:friends:message:{mid}", 可以在能描述含义的前提下适当减少键的长度, 例如采用缩写形式, 从而减少由于键过长的内存浪费.
b) 计数
典型应用场景: 视频播放数计数的基础组件, 用户每播放一次视频, 相应的视频播放数就会自增 1.Redis 可以实现快速计数, 查询缓存的功能, 同时数据可以异步落地到其他数据源.
开发提示: 实际上一个真实的计数系统要考虑的问题会很多, 防作弊, 按照不同维度计数, 数据持久化到底层数据源等.
c) 共享 Session
典型应用场景: 用户登陆信息, Redis 将用户的 Session 进行集中管理, 每次用户更新或查询登陆信息都直接从 Redis 中集中获取.
d) 限速
典型应用场景: 验证码接口访问频率限制, 用户登陆时需要让用户输入手机验证码, 从而确定是否是用户本人, 但是为了短信接口不被频繁访问, 会限制用户每分钟获取验证码的频率, 例如一分钟不能超过 5 次.
2, 哈希使用场景
a) 缓存用户信息
相比于使用字符串序列化缓存用户信息, 哈希类型变得更加直观, 并且在更新操作上会更加便捷. 可以将每个用户的 id 定义为键后缀, 多对 field-value 对应每个用户的属性.
哈希类型和关系型数据库不同之处:
哈希类型是稀疏的, 而关系型数据库是完全结构化的, 例如哈希类型每个键可以有不同的 field, 而关系型数据库一旦添加新的列, 所有行都要为其设置值 (即使为 NULL).
关系型数据库可以做复杂的关系查询, 而 Redis 去模拟关系型复杂查询开发困难, 维护成本高.
三种缓存用户信息优缺点比较:
原生字符串类型: 每个属性一个键
优点: 简单直观, 每个属性都支持更新操作.
缺点: 占用过多的键, 内存占用量较大, 同时用户信息内聚性比较差, 所以此种方案一般不会在生产环境使用.
序列化字符串类型: 将用户信息序列化后用一个键保存.
优点: 简化编程, 如果合理的使用序列化可以提高内存的使用效率.
缺点: 序列化和反序列化有一定的开销, 同时每次更新属性都需要把全部数据取出进行反序列化, 更新后再序列化到 Redis 中.
哈希类型: 每个用户属性使用一对 field-value, 但是只用一个键保存.
优点: 简单直观, 如果使用合理可以减少内存空间的使用.
缺点: 要控制哈希在 ziplist 和 hashtable 两种内部编码的转换, hashtable 会消耗更多内存.
3, 列表使用场景
a) 消息队列
Redis 的 lpush+brpop 命令组合即可实现阻塞队列, 生产者客户端使用 lrpush 从列表左侧插入元素, 多个消费者客户端使用 brpop 命令阻塞式的 "抢" 列表尾部的元素, 多个客户端保证了消费的负载均衡和高可用性.
b) 文章列表
每个用户有属于自己的文章列表, 现在需要分页展示文章列表. 此时可以考虑使用列表, 因为列表不但是有序的, 同时支持按照索引范围获取元素.
c) 开发提示
- lpush + lpop = Stack(栈)
- lpush + rpop = Queue(队列)
- lpush + ltrim = Capped Collection(有限集合)
- lpush + brpop = Message Queue(消息队列)
4, 集合
a) 标签 (tag)
集合类型比较典型的使用场景是标签 (tag), 例如一个用户可能对娱乐, 体育比较感兴趣, 另一个用户可能对历史, 新闻比较感兴趣, 这些兴趣就是标签. 开发提示: 用户和标签的关系维护应该在一个事物执行, 防止部分命令失败造成的数据不一致.
5, 有序集合
a) 排行榜系统
有序集合比较典型的使用场景就是排行榜系统, 例如视频网站需要对用户上传的视频做排行榜, 榜单的维度可能是多个方面的: 按照时间, 按照播放数量, 按照获得的赞数.
来源: https://www.cnblogs.com/dukuan/p/9132600.html