基础命令
1.清屏和帮助
清屏:clear
获取当前时间:time
帮助:help 命令
2.退出客户端
命令:quit、exit、<esc>
业务数据的特殊性
原始业务功能设计
- 秒杀
- 618活动、双十一活动
- 排队购票
运营平台监控到的突发高频率访问数据
突发时的时政要闻,被强势围观
高频复杂的统计数据
- 在线人数
- 投票排行榜
附加功能
系统功能优化和升级
- 但服务器升级集群
- Seeion管理
- Token管理
常见的五种数据类型
Sting类型(字符)
- 储存的数据:单个数据
- 储存的格式:一个储存空间一个数据
- 储存内容:通常字符串,如果以字符串以证书方式展示,则可以作为数字操作
String类型的基本操作
get、set、del(读取、写入、删除)
mset:添加或修改多个数据
mget:获取多个数据
strlen:获取数据长度(字符串的长度)
append:追加信息到原来的信息后面,如果原始信息存在就追加,否则就新建
String类型的数据拓展
业务场景
分表,使用多张表储存类型数据,但是对应的id必须保持统一性,不能重复
解决方案
incr、decr(数值自增自减,可以作为数据的唯一键)
数据增加、减少指定范围的值
incrby、decrby(整数类型)
incrbyfloat(小数类型)
String作为数值操作:
- string类型在redis中就是个字符串,当遇到增减操作incr和decr是会转成数值计算
- redis所有操作都是原子性,采用单线程处理所有业务,不用考虑并发。
- 注:redis原始数据不能转成数值或超过一定的范围,也报错。
业务场景
海选投票,每个微信号每四个小时只能投一票
解决方案
设置数据具有一定的生命周期
setex:秒为单位, 设置phone存在的时间为10s,10s之后就为nil
psetex:毫秒为单位
String类型操作注意事项
数据操作反馈结果
- 标识结果是否运行成功
- (integer) 0→false 失败
- (integer) 1→true 成功
- 表示运行结果值:
- (integer) 3→3 3个
- (integer) 1→1 1个
- 数据为获取到
- nil等同于null
- 最大储存量512MB
- 最大范围long的最大值
主页高频信息访问控制,微博粉丝数量和微博数量
key的设置约定
热点数据key命名
表名:主键命:主键值:字段名
例:set user:id:001:fans 1000000
set user:id:001:blogs 1000000
或者
set user:id:001 {id:001,fans:1000000,blogs:1000000}
Hash类型(哈希)
存储需求:对一系列数据储存进行编组,方便管理,典型的对象存储
存储结构:一个储存空间保存多个键值对
hash类型:使用哈希表存储结构
Hash类型基本操作
hset:添加修改
hget:获取数据
hsetall:获取全部数据
hdel:删除数据
hmset:添加修改多个数据
hmget:获取多个数据
hlen:获取哈希表中的字段的数量
hexists:获取哈希表中是否存在指定的字段
Hash类型拓展操作
业务场景
实现抢购、实现购物车功能
解决方案
hkeys:获取哈希表中字段名
hvals:获取哈希表中的字段值
hincrby:指定字段数值增加指定范围的值
hincrbyfloat:浮点型数值增加指定范围的值
Hash类型注意
hash类型只能存储字符串,不允许其他类型,不存在嵌套现象。如果未获取到数据则为nil
hash存储232-1键值对
hash贴近对象存储形式,不要存储大量的对象数据,更不要作为对象列表使用
hgetall如果内部字段(field)太多,遍历整体数据效率太低,可能成为数据访问瓶颈
List类型(列表)
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以提现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
List类型数据基本操作
lpush:从左进去添加/修改数据
rpush:从右进去添加/修改数据
lrange:获取数据,如果左边先进去,从0开始,name获取最后存入的数据。从左进去,获取全部数据(0到-1)。
lindex:通过索引获取
llen:key长度
lpop:从左获取并移除
rpop:从右获取并移除
List类型数据拓展操作
blpop:从左边开始,规定时间内获取并移除数据;规定时间内添加新数据也会取出来。
brpop:从右边开始,规定时间内获取并移除数据
业务场景
例如朋友圈中取消点赞
解决方案:
lrem:移除指定数据
List类型数据注意事项
List类型保存的数据都是string类型,数据总容量是有限的,最多232-1个元素
List具有索引概念,获取全部的数据结束索引设置成-1
List可以对数据进行分页操作,通常第一页来自于list,第二页以及更多的通过数据库形式加载
Set类型数据
存储需求:存储大量的数据,查询方面提升更高的效率
存储结构:能够保存大量的数据,高效的内存存储机制,便于查询
set类型:与hash类型相同,仅储存键值,不存储值(nil),重复值不允许
Set类型数据基本操作
sadd:添加值
smembers:获取全部数据
srem:删除值
scard:获取集合数据总量
sismember:判断集合中是否包含指定数据
Set类型数据拓展操作
业务场景
每位用户使用今日头条时会设置三项内容,后期为了增加用户活跃度、兴趣点、让用户对其他内容产生兴趣,增加客户存留度
redis应用于随机类检索,热点新闻推荐、热点歌曲推荐、热卖旅游线路、推荐app、大v推荐
解决方案:
srandmember:随机获取集合中指定数量的数据
spop:随机获取集合中某个数据并将改数据移除集合
业务场景
qq好友推荐、微信公众号推荐、饿了吗美食推荐
解决方案
sinter:求交集
sunion:求并集
sdiff:求差集
sinterstore:求交集并存储指定集合中
sunionstore:求并集并存储到指定结合中
sdiffstore:求差集并存储到指定集合中
smove:将指定数据从原始移到目标集合
Set类型数据注意事项
set类型不予许重复,如果数据已存在则只保留一份
set结构虽然和hash存储结构相同,但是无法启用hash中存储空间
Sorted_set类型数据
存储需求:数据排序有利于数据有效展示,需要提供一种可以根据自身特性的排序方式
存储结构:新的存储结构,可以保存排序的数据
set类型:在set存储基础上添加可排序字段
Sorted_set类型数据基本操作
zadd:添加数据
zrange:获取全部数据
zrevrange:反向获取全部数据
zrem:删除数据
zrangebyscore:按条件查询,limit 0 3,从索引0开始取数
zrevrangebyscore:反向,按条件取数
zremrangebyscore:按条件删除
zremrangebyrank:按索引删除
zcard:获取集合总量
zcount:根据条件获取结合总量
zinterstore:集合交集,默认相加,还可以获取max,或者min
zunionstore:集合并集,重复的默认相加,同样可以获取max,或者min
Sorted_Set类型数据拓展操作
业务场景
各类综艺海选投票、各类资源网站Top10、游戏好友亲密度
解决方案
zrank:正向插叙,获取数据对应索引
zrevrank:反向查询,获取数据对应索引
zscore:值获取
zincrby:增加指定的数据,或者修改数据
Sorted_Set类型数据操作注意事项
Sorted_Set储存空间是64位,保存数据也可是一个双精度double值,基于双精度浮点特征,但也有可能丢失精度
Sorted_Set底层还是基于set结构,因此数据不能重复,如果重复则可能覆盖前面的,保留最后一次修改结果