常见命令
help @list:可以查看list类型的所有命令
常见问题
sorted set的排序是怎么实现的增删改查的速度?
skiplist(跳跃表:牺牲存储空间来减少查询速度)
- 增的过程最重要
- 改就是删掉,然后再加进去

Redis的kv结构
key中有:key名、type类型(避免到value再算抛异常)、encoding(不用拓宽到字节)
String类型
字符串、数值、bitmap
数值的incr:抢购、秒杀、详情页、点赞、评论规避并发下,对数据库的事务操作,完全由redis内存操作代替
二进制安全
strlen总会是字节长度,底层存储都是字节存储,只是有一个encoding做维护(可以让一些方法,例如incr变得更快)
只有字节流,只要双方客户端有统一编解码,数据就不会被破坏(因为不同语言对整形的宽度理解不一样,可能造成截断溢出)
就像多语言开发,倾向于于json或者xml,而不是序列化
所以:使用Redis时,需要在用户端沟通好编码,因为Redis是没有数据类型的
细腻的操作
GETSET:虽然可以程序员自己可以get后set,但是GETSET可以减少一次IO
msetnx:原子性,假设一个不成功,整个都不能成功
bitmap
- 需求一:有用户系统,统计用户登录天数,且窗口随机
用户名是key 日期是value
setbit name 1 1
setbit name 7 1
setbit name 364 1
BITCOUNT name -2 -1 # 查看最后16天的登录情况
占用 46B*10000000 = 46000 0000 B 一共400M,统计全年所有用户登录情况
- 电商活动,登录就送礼物(一个人只有一件)。大库备货多少礼物,假设有2亿用户?
日期是key 用户是value
用户分:冷热用户(统计这个活跃用户),僵尸用户
setbit 20190101 1 1
setbit 20190102 1 1
setbit 20190102 7 1
bitop or destkey 20190101 20190102
BITCOUNT destkey 0 -1
list
- 栈 同向命令
- 队列 反向命令
- 数组
- 阻塞,单播队列(消息只能被一个消费者消费):blpop
set
hash
sorted set
db-engines.com
文档、图、时序、关系、键值、列式、搜索引擎

网友评论