通用命令
- 遍历所有的key keys *(一般不在生产环境使用,数据较大,很慢,O(n))
注意:如要使用keys,1.热备从节点 2.scan
-
计算数据库大小dbsize,线上可以使用,时间复杂度O(1),(内置一个对所有键值进行统计的计数器)
-
存在key exists key,O(1)
-
删除key del key
-
key的过期时间 expire key seonds在seconds秒后过期
ttl key 查看key剩余的过期时间(-2,不存在key;-1,存在,但灭有过期时间)
persist key 去掉key的过期时间
-
key的类型 type key
string,hash,list,set,zset,none(不存在此key)
数据结构
单线程架构
串行,同一时间只会执行一条命令
快的原因:
1.纯内存,大约100nm
2.非阻塞IO
3.避免线程切换和竞态消耗
使用时注意
字符串(String)
value不能大于512MB(建议100k以内)
使用场景:
缓存,计数器,分布式锁
常用命令
get key,set key value,del key
单线程,计数器
中文为1:2
Hash
field不能相同,value可以相同
注意使用mgetall,redis是单线程的,最好使用hmget(数据多的情况下)
String和Hash相似api
不同
封装成一个对象,需要一整个更新,序列化
用户信息不是整体,不便于管理
ttl过期时间
List
有序列表,可以重复,左右两边插入弹出
剩下start-end
改
实战-微博TimeLine时间轴,更新放上面
b阻塞,lpop,rpop的阻塞版
左插(LPUSH)+左弹=栈
左插+右弹=队列
左插+按索引保留列表=固定数量列表(控制列表大小)
左插+阻塞右弹=消息队列
Set
特点:无序,无重复,支持集合间操作
集合内api
smembers:无序,需要小心使用(数据多),可以使用scan
可在微博抽奖中使用
集合间api
ZSet
有序集合,score可以重复
比较
重要api
zrank获取某一元素的排名,从低到高
zrevrank,同上,从高到低
不加withscores,就只返回value
zrevrange,从高到低
zrevrangebyscore,从高到低
可在排行榜使用
集合间
zinterstore,zunionstore同set,交集,并集