基本操作
hash的基本操作和string其实类似,只不过在值的指定和设置时多加了一个维度,也就是字段。
当然其也具备类多指令操作,一次修改多个字段值
扩展操作【应用场景】
hash的主要特性是对象存储模式,我们看基于这样的特性,常用的有哪些场景呢?
- 场景四:利用hash的对象存储特性设置用户的购物车
- 场景五:hash作为商品秒杀计数对象完成商品秒杀系统
这两个业务场景其实在我们生活中还是很常见到的。可以把hash理解为一个复合的string
场景四:利用hash的对象存储特性设置用户的购物车
一个人的购物车可以看做一个对象,而商品可以当做field,数量可以当做value。然后对购物车进行各种操作,hash基本都能满足:
例如对于一些操作场景:
除了基本操作,我们想要增加商品数量,全选查看等都可以使用如下操作:
当然我们当前只能拿到商品数量和商品,对于商品的详细信息一无所知,这个时候就需要对field做更细粒度的拆分:
此时我们又想到,其实商品的信息是公共的,可以将公共的商品信息维护一个商品的hash,可以避免不同的人重复放置购物车占据大量内存,还是只存商品的编号和数值,需要的时候从公共hash取商品详细信息,同时为了避免重复商品入商品hash,使用setnx实现,这样实现性能最优。
场景五:hash作为商品秒杀计数对象完成商品秒杀系统
可以利用hash多字段的特性,来用一个对象完成整体秒杀系统。
操作规范
hash操作有如下的使用规范,最主要的就是别无限套娃,禁止套娃!
同时我们知道string也能存类hash的字符串,但是不能对其中字段操作,但是查看起来是一个完整格式,所以我们总结:
List类型
list的核心特点是顺序性,主要是其底层实际上是一个双向链表结构:
基本操作
其实由于其双向链表的灵活性,很容易模拟出栈或者队列的模式,因为我们查询时是从左边查询的,所以我们一般的使用策略是,从右边进入,这样从表面上看符合进入顺序的,比较直观【队列】
需要注意的是查询索引:Start 只能为0,stop为-1就是倒数第一个,为-2就是倒数第二个
扩展操作【应用场景】
list的主要特性是顺序性,我们看基于这样的特性,常用的有哪些场景呢?
- 场景六:利用blpop特性实现任务队列
- 场景七:利用list顺序特性实现朋友圈点赞
- 场景八:利用list顺序特性进行分布式日志顺序性展示
我们来看看这三个业务场景。
场景六:利用blpop特性实现任务队列
轮询从任务队列里取数据【可以同时从多个队列获取】,如果取到数据就返回,如果没有数据就等待设置时间持续获取,直到数据过期。
一直等【从若干个列表中去等】,只要有数据就返回来
场景七:利用list顺序特性实现朋友圈点赞
因为点赞等信息都是有顺序性的,而且修改的效率高,适合使用list来操作
取消点赞的时候使用如下命令操作:
场景八:利用list顺序特性进行分布式日志顺序性展示
使用list顺序性实现多路数据汇总展示,利用其栈的特性实现最新的消息最先展示。
操作规范
list主要有如下几种使用规范:
Set类型
因为list的查询效率太低,所以需要新的数据模型来进行支持,Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
那么为什么我们的值不允许重复呢?,不支持vaule重复录入,因为我们原来hash里的field也不允许重复
基本操作
set的操作相对简单,主要明确一点,set里不会有重复数据:
扩展操作【应用场景】
set的主要特性是不重复性,我们看基于这样的特性,常用的有哪些场景呢?
- 场景九:利用set特性随机获取不重复数据实现简单推荐系统
- 场景十:利用set交并差实现推荐系统池
- 场景十一:利用set不重复特征获取所有业务系统权限
- 场景十二:利用set不重复特征获取UV和IP数据
- 场景十三:利用set不重复特征实现黑白名单
我们来看看这五个业务场景。
场景九:利用set特性随机获取不重复数据实现简单推荐系统
可以使用如下命令: