文章目录
一、数据类型的注意事项
1. String 类型:
使用redis 来存储String 类型的数据,可以存储key:value形式、也可以存储 json格式。
2. Hash类型:
redis实例使用----购物车:
问题出现在:如果仅仅使用redis来保存数据,那么不能确定到具体的商品的信息。
解决方法一:考虑将每条购物车中的商品记录保存为两条field,一条field保存商品的购买数量,另一个field保存商品的详细信息。
这样能够获取到商品的信息,但是有了新的问题:多个用户都购买同一个商品,不同的只是商品的数量,商品的详细信息都是相同的。
解决方法二:改用两条独立的hash格式存储,其中一条hash专门用于存储商品的购买数量,另一个hash专门用于存储商品的信息。
redis实例使用----hash实现抢购:
3. list类型:
list数据类型扩展操作:
list阻塞式队列:
list阻塞数据的获取----- blpop、brpop:
blpop key1 [key2] timeout
brpop key1 [key2] timeout
该模式类似于阻塞队列的形式,当list中存在任务时获取处理,当list中任务为空时等待一有任务加入立马获取进行处理。
list扩展操作:
案例中通过list 数据类型来rpush进点赞的用户姓名,如果取消点赞使用lrem key value count
list操作注意事项:
list类型应用场景:
- 依赖list的数据具有顺序的特征对信息进行管理;
- 使用队列模型解决多路信息汇总合并的问题;
- 使用栈模型解决最新消息的问题;
4. set类型:
list 数据结构的底层是链表,而set 数据结构的底层是hash表。只不过 hash表的值为 空nil
set数据类型扩展操作:
1. set 随机获取数据:
随机获取或者随机从集合中移除数据: srandmember key [count]
spop key
redis 应用于随机推荐类信息检索,例如随机歌单推荐,热点新闻推荐,热卖旅游路线,应用APP推荐。
2. set 交并差补集合操作:
应用实例:
- redis应用于同类信息的关联搜索、二度关联搜索、深度关联搜索;
- 显示共同关注、共同好友;
- 由用户A出发,获取到好友B的好友信息列表、购物清单、游戏充值列表;
set注意操作事项:
- 依赖 set集合数据不重复的特征,依赖set集合hash存储结构特征完成数据过滤与快速查询;
- redis 应该仅仅用于提供基础数据而不是提供校验结果。
5. zset类型:
zset扩展操作:
redis 应用于计数器组合排序功能对应的排名:
zset的注意事项:
zset 底层是基于 set 数据结构实现的,因此数据不能够重复;如果重复添加数据那么score 值将反复覆盖,虽然会报错。
zset类型的应用场景:
- 基于时间线限定的任务处理
- 对于带有权重的任务,优先处理权重高的任务,采用score记录权重记录
注意权重处理时是按位处理而不是按照数值大小处理,因此位数必须保持一致,不足位数在前端补0.
6. key通用操作:
- 基本操作:
- 时效性控制:
- 查询模式:
- 通用操作:
二、数据类型实践案例
1.按次结算的服务控制(可限时)
2.微信消息提示
3.高级数据类型
3.1 Bitmaps数据类型:
-
介绍:
Bitmaps并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,它们的最大长度是512M。
字节操作可以分为两类:恒定时间的单个字节操作(比如说将某一个字节设置为1或者0)、批量操作字节(计算给定字节范围内计算设置字节数量)。 -
用法:
1. setbit key offset value:给位图指定索引设置值,返回该索引位置的原始值。
(1).零存零取
(2). 整存零取 [如果对应位的字节是不可打印字符,redis-cli会显示该字符的16进制形式]
2. getbit key offset:获取位图指定索引的值、不存在的key被当成是空字符串来处理。
3. bitcount key [start end]:获取指定范围全部值为1的个数。
4. bitpos key targetBit [start end]:计算位图指定范围(start到end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置。
5. bitop and|or|not|xor destkey key[key…]:
做多个bitmap的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存到destkey中。
-
业务场景:
- 电影网站统计每天某一部电影是否被点播、统计每天有多少部电影被点播、统计每周/月/年有多少部电影被点播、统计年度哪部电影没有被点播。
解决方案:使用bitmaps 数据类型来存放每一天各部电影的播放情况,使用电影的id来作为存储的key,1代表已经播放、0代表未播放。如果要求每周月年的数据情况就可以使用[bitop or] 来求解。