数据类型 | 使用场景 |
String |
比如:我想知道什么时候封锁一个IP(某一个IP地址在某一段时间内访问的特别频繁,那有可能这个IP可能存在风险,所以对它进行封锁),使用Incrby命令记录当前IP访问次数 存储用户信息【id,name,age】 存储方式:set(userKey,用户信息字符串) |
Hash |
存储用户信息【id,name,age】 存储方式:Hset(key,filed,value) hset(userKey,id,101) hset(userKey,name,"admin") hset(userKey,age,23) 这样存储的好处:当修改用户信息某一项属性值时,直接通过filed取值,并修改值 -----修改案例------ hget(userKey,id) hset(userKey,id,102) ------------------------------ 为什么不使用String存储? 获取方式:get(userKey) 会把参数为userKey对应的用户信息字符串全部进行反序列号,而用户信息字符串包含了用户所有的信息 如果我只修改用户的ID,那反序列化的其他信息其实是没有任何意义的 序列化与反序列化是由IO进行操作的,使用String类型存储增加了IO的使用次数,降低了程序的性能 对值为某类信息时不建议使用String类型存储 |
List |
实现最新消息的排行,还可以利用List的push命令,将任务存在list集合中,同时使用另一个pop命令将任务从集合中取出 Redis——list数据类型来模拟消息队列。 比如:电商中的秒杀就可以采用这种方式来完成一个秒杀活动 |
set |
特殊之处:可以自动排重。 比如微博中将每个人的好友存在集合(Set)中 如果求两个人的共同好友的操作,我们只需要求交集即可。(交/并集命令) |
Zset |
有序集合(sorted set),以某一个条件为权重,进行排序。 比如:京东看商品详情时,都会有一个综合排名,还有可以安装价格、销量进行排名 |