Redis
数据结构/命令
String
-
特性
- 长度最大为512m
- 使用mset mget减少网络通讯次数
-
key键的设置规则
- 命名格式
- <>:<>:<>……
-
命令
-
SET key value [EX seconds] [PX milliseconds] [NX 必须不存在|XX 必须存在]
-
Set 不加过期时间重新设置后 失效时间失效
-
SETEX
- SET VALUE EX
-
SETNX
- SET VALUE NX
-
PSETEX
- SET VALUE PX
-
SETEX/SETNX/PSETEX 为原子操作同一时间完成 redis锁 避免死锁。成功时返回OK
-
-
GET key
- Get 只能取字符串类型
-
TTL/PTTL 获取失效时间
- TTL秒
- PTTL毫秒
-
del 删除
-
mset key value [key value……]。原子性操作
-
MSETNX KEY VALUE [KEY VALUE……]
- 只有所有键都不存在时才会设置成功 原子性操作
- 成功返回1 不成功返回0
-
MGET key……
-
GETSET key value
- 设置新值返回旧值
- key不存在时返回nil
-
exists key……
- 返回存在的个数
- 不存在时返回0
-
expire key seconds
- 为键值设置过期时间
-
INCR key
- INCR 为目标键值加1 如果不能转换为数字则报错
- 64位有符号数字. 001不能转换为数字
-
incrby key value
- 同上incr value 为增量
-
Incrbyfloat key increment
- 只保留小数点后17位
- 增量亦只保存至后17位
-
decr key
- 目标键值减1 如果不能转换为数字则报错
-
Decrby key value
- 同decr value为变量
-
strlen key
- 获取字符串长度,键值不存在时返回0
- 计算文章长度
-
APPEND key value
- 将value值追加到已有的值尾部
- 日志存储
-
SETRANGE key offset value
- 从目标位置开始替换字符串 数据为空时补零字节
-
GETRANGE KEY START END
- 获取起始位置的字符串 , 不支持回绕
- 文章预览功能
-
Hash
-
特性
- 键值对个数最多为2^32-1个,也就是4294967295个
-
命令
-
HSET KEY FIELD VALUE [FIELD VALUE……].
- 创建新field时返回1 覆盖旧值返回0.
- 每秒处理7.5万请求 单个4ms
-
HSETNX KEY FIELD VALUE [FIELD VALUE……]
- 设置成功返回1 给定域存在时返回0
-
HGET KEY FIELD
- 获取field下值
-
HEXISTS KEY FIELD
- field是否存在
-
HDEL KEY FIELD [field……]
- 在Redis2.4以下的版本里, HDEL 每次只能删除单个域,如果你需要在一个原子时间内删除多个域,请将命令包含在 MULTI / EXEC 块内。
-
HGETALL
- 获取 key对应的所有的field 和value
- 按照插入顺序排列
-
HLEN key
- 获取 hash 表下阈值的数量
-
HSTRLEN key field
- 获取阈值对应数据的长度
-
HMSET KEY FIELD VALUE [FIELD VALUE……]
- 每秒处理7.1 万请求。单个5ms。 4.0开始弃用。
-
HMGET key field……
- 获取field 下的值
-
HKEYS key
- 获取所有的field
-
HVALS key
- 获取所有的值
-
HINCRBY KEY FIELD
- 同string型
-
HINCRBYFLOAT KEY field increment
- 同string型
-
HSCAN key cursor [MATCH pattern] [COUNT count]
- 迭代哈希表中的键值对
- cursor - 游标
- pattern - 匹配的模式
- count - 指定从数据集里返回多少元素,默认值为 10
-
list
-
特性
- 值可重复
- 自然排列
- list的元素个数最多为2^32-1个,也就是4294967295个
-
命令
-
lpush key element……
- 2.4 版本之前只能单个元素输入 原子操作
-
Lrange key start end
- 数据逆序输出
-
Lpushx key value [value……]
- 将数据插入list 表头。和lpush的区别在于list不存在时不做任何操作.
-
Rpush key element……
- 将数据插入list右边
-
Rpushx key value
- 将数据插入list右边,list不存在时,不进行插入
-
Lpop key
- 移除头元素
-
Rpop key
- 移除尾元素
-
Rpoplpush source Destination.
- 将源队列队尾元素弹出插入目标队列队头。
- 源队列与目标队列相同时,循环队列
-
lrem key count value
- 移除 value元素。count >0从头开始。count=0删除所有 count<0从队尾开始
-
Llen key
- 获取list的长度,如果目标键值不为list 则返回错误
-
lindex key index
- 返回指定位置上的数据
-
Linsert key before|after pivot value
- 子主题 1
-
Lset key index value
- 替换目标位置值
-
Ltrim key start end
- 保留区间范围内的数据
-
Blpop key [key……] timeout
- 阻塞时弹出队列 直到key 中有数据可以弹出
- 多个客户端设置时 按照先阻塞先服务
-
Brpop key [key……] timeout
- 同blpop
-
bRpoplpush source Destination timeout
- 阻塞时弹出队列
-
set
-
特性
- 元素个数最多为2^32-1个,也就是4294967295个
-
命令
-
sadd key member [member……]
- 子主题 1
-
Smenbers key
- 获取set中所有的元素. 引起服务器阻塞
-
sismember key member
- 判断value 值在不在set中
-
Spop key
- 弹出一个随机元素
-
srandmember key count.
- 随机返回元素,不删除set中的元素
-
srem key value
- 返回被成功移除的元素数量
-
smove src destination value
- 将源集合数据删除插入到目标集合
-
scard key
- 返回集合中的基数
-
del key
- 子主题 1
-
sscan
- 子主题 1
-
sinter key [key……]
- 获取集合的交集,共同好友,朋友圈的实现
-
sinterstore destination key [key……]
- 将交集存储到目标集合中 直接覆盖
-
sunion key [key……]
- 求并集
-
sunionstore destination key [key……]
- 子主题 1
-
sdiff
- 求差集
-
sdiffstore destination key [key……]
- 子主题 1
-
zset
.
. 根据
zrangebylex key [|(min [|(max 成员分值相同的集合
zlexcount key min max. 成员分值相同的集合
zremrangebylex key min max 成员分值相同
zscan key couror [MATCH pattern] [COUNT count ]
zunionstore destination nums key [key……] [WEIGHTS index number] [AGGREGATE SUM|MIN|MAX]
zinterstore destination nums key [key……] [WEIGHTS index number] [AGGREGATE SUM|MIN|MAX]
-
特性
-
命令
-
zadd key [NK|XX] [CH] [INCR] score member [score member]
- 子主题 1
-
zscore key value
- 返回该value的score string型
-
zrange key start end [withscore]
- 返回该有序集合
-
zincrby key incrment member
- 子主题 1
-
zcard key
- 子主题 1
-
zscan
- 子主题 1
-
zcount key min max
- 获取区间范围内符合的总数
-
zrevrange key start end [withscore]
- 逆序
-
zrangebyscort key min max [withscore] [limit offset count].
- min 和max 可以是-inf 或者+inf. (min (max 使用(符号为开区间
-
zrevrangebyscore
- 子主题 1
-
zrank key value
- 子主题 1
-
zrevrank key value
- 子主题 1
-
zrem key member [member……]
- 子主题 1
-
zremrangebyrank key start end
- 子主题 1
-
zremrangebyscore key min max
- 子主题 1
-
zrangebylex key min max [limit offset count]
-
子主题 17
-
子主题 18
-
HyperLogLog
Geo
Pub/Sub
BitMap
功能
数据库管理
自动过期
-
过期策略
-
定期删除
-
定期删除,指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查是否过期,如果过期就删除
- 实际上redis是每隔100ms就随机抽取一些key来检查和删除的。
-
-
惰性删除
-
惰性删除是指在你获取某个key的时候,redis会检查一下
-
内存不够
- 内存淘汰机制
-
-
-
-
内存机制
- 一写入就报错
- 移除最近最少使用的key
- 随机移除某个key
- 设置过期时间
-
淘汰机制
-
noeviction
- 当内存不足以容纳新写入数据时,新写入操作会报错。这个一般很少用
-
allkeys-lru
- 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key,这个是最常用的。
-
allkeys-random
- 当内存不足以容纳新写入数据时,在键空间中,随机移除某个key
-
volatile-lru
- 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
-
volatile-random
- 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
-
volatile-ttl
- 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
-
流水线
事务
Lua脚本
模块
发布与订阅
多机功能
- 复制
- Sentinel
- 集群
底层存储
SDS
链表
字典
压缩列表
整数集合
客户端
Jedis
spring-boot-start-redis
持久化
rdb
aof
部署方式
集群
-
读写分离
-
redis主从方式部署
-
全量同步
-
增量同步
- 全量同步完成后主服务器写后同步执行写命令
多个从服务器同时同步请求会导致io大增
- 全量同步完成后主服务器写后同步执行写命令
-
-
redis哨兵
- 类似于zookeeper的监控选举机制
-
redis自带集群
- Redis集群并不支持处理多个keys的命令
- 三主三从
XMind - Trial Version