redis
常用命令
# 查看内存使用情况
info memory
# 查看键
keys 表达式 # keys * 未经过领导批准 切勿使用
# 数据类型
TYPE key
# 键是否存在
exists key
# 删除键
del key
# 键重命名
rename key newkey
# 清除当前库中所有数据(慎用)
flushdb
# 清除所有库中所有数据(慎用)
flushall
字符串类型
- 增删改查
########## 一个key-value
# 增
set key value
# key不存在时再进行设置(nx)
set key value nx # not exists
# 设置过期时间(ex)
set key value ex seconds
# 给redis已有key添加过期时间
expire key 5 # 秒
pexpire key 5 # 毫秒
# 查
get key
# 获取长度
strlen key
# 返回旧值并设置新值(如果键不存在,就创建并赋值)
getset key value
# 返回key的剩余时间
ttl key
返回 > 0 的值 剩余时间 单位 秒
返回 -1 当前key 没有设置过期时间
返回 -2 当前key 不存在
# 删除过期的
persist key
######## 多个key-value
# 增 多个key-value
mset key1 value1 key2 value2 key3 value3
# 查 多个key-value
mget key1 key2 key3
- 数值操作----字符串类型的数组
# 整数操作
INCRBY key 步长
DECRBY key 步长
INCR key : +1操作
DECR key : -1操作
# 浮点数操作: 自动先转为数字类型,然后再进行相加减,不能使用append
incrbyfloat key step
注意:
1、key值不宜过长,消耗内存,且在数据中查找这类键值的计算成本高
2、不宜过短,可读性较差
3、一个字符串类型的值最多能存储512M内容
列表类型
-
特点
- 字符串类型储存
- 可重复
- 最多2^32 -1个元素
- 有索引
-
增删改查
# 增
1、从列表头部压入元素
LPUSH key value1 value2
2、从列表尾部压入元素
RPUSH key value1 value2
3、从列表src尾部弹出1个元素,压入到列表dst的头部
RPOPLPUSH src dst
4、在列表指定元素后/前插入元素
LINSERT key after|before value newvalue
# 查
5、查看列表中元素
LRANGE key start stop
# 查看列表中所有元素: LRANGE key 0 -1
6、获取列表长度
LLEN key
# 删
7、从列表头部弹出1个元素
LPOP key
8、从列表尾部弹出1个元素
RPOP key
9、列表头部,阻塞弹出,列表为空时阻塞
BLPOP key timeout
10、列表尾部,阻塞弹出,列表为空时阻塞
BRPOP key timeout
# 关于BLPOP 和 BRPOP
1、如果弹出的列表不存在或者为空,就会阻塞
2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出
3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务
11、删除指定元素
LREM key count value
count>0:表示从头部开始向表尾搜索,移除与value相等的元素,数量为count
count<0:表示从尾部开始向表头搜索,移除与value相等的元素,数量为count
count=0:移除表中所有与value相等的值
12、保留指定范围内的元素
LTRIM key start stop
LTRIM mylist1 0 2 # 只保留前3条
# 应用场景: 保存微博评论最后500条
LTRIM weibo:comments 0 499
# 改
13、LSET key index newvalue
hash类型
- 增删改查
由field和关联的value组成的键值对
# 1、设置单个字段
HSET key field value
HSETNX key field value
# 2、设置多个字段
HMSET key field value field value
# 3、返回字段个数
HLEN key
# 4、判断字段是否存在(不存在返回0)
HEXISTS key field
# 5、返回字段值
HGET key field
# 6、返回多个字段值
HMGET key field filed
# 7、返回所有的键值对
HGETALL key
# 8、返回所有字段名
HKEYS key
# 9、返回所有值
HVALS key
# 10、删除指定字段
HDEL key field
# 11、在字段对应值上进行整数增量运算
HINCRBY key filed increment
# 12、在字段对应值上进行浮点数增量运算
HINCRBYFLOAT key field increment
集合数据类型(set)
-
特点
- 无序,不重复
-
增删改查
# 增加一个或者多个元素,自动去重
SADD key member1 member2
# 查看集合中所有元素
SMEMBERS key
# 删除一个或者多个元素,元素不存在自动忽略
SREM key member1 member2
# 元素是否存在
SISMEMBER key member
# 随机返回集合中指定个数的元素,默认为1个
SRANDMEMBER key [count]
# 弹出成员
SPOP key [count]
# 返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了
SCARD key
# 把元素从源集合移动到目标集合
SMOVE source destination member
# 差集(number1 1 2 3 number2 1 2 4 结果为3)
SDIFF key1 key2
# 差集保存到另一个集合中
SDIFFSTORE destination key1 key2
# 交集
SINTER key1 key2
SINTERSTORE destination key1 key2
# 并集
SUNION key1 key2
SUNIONSTORE destination key1 key2
有序集合sortedset
- 特点
- 有序、不重复
- 增删改查
# 在有序集合中添加一个成员
zadd key score member
# 查看指定区间元素(升序)
zrange key start stop [withscores]
# 查看指定区间元素(降序)
ZREVRANGE key start stop [withscores]
# 查看指定元素的分值
ZSCORE key member
# 返回指定区间元素
# offset : 跳过多少个元素
# count : 返回几个
# 小括号 : 开区间 zrangebyscore fruits (2.0 8.0
zrangebyscore key min max [withscores] [limit offset count]
# 每页显示10个成员,显示第5页的成员信息:
# limit 40 10
# MySQL: 每页显示10条记录,显示第5页的记录
# limit 40,10
# limit 2,3 显示: 第3 4 5条记录
# 删除成员
zrem key member
# 增加或者减少分值
zincrby key increment member
# 返回元素排名
zrank key member
# 返回元素逆序排名
zrevrank key member
# 删除指定区间内的元素
zremrangebyscore key min max
# 返回集合中元素个数
zcard key
# 返回指定范围中元素的个数
zcount key min max
zcount salary 6000 8000
zcount salary (6000 8000# 6000<salary<=8000
zcount salary (6000 (8000#6000<salary<8000
# 并集
zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]
# zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
# 2代表集合数量,weights之后 权重1给salary,权重0.5给salary2集合,算完权重之后执行聚合AGGREGATE
# 交集:和并集类似,只取相同的元素
ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM(默认)|MIN|MAX
redis 内存管理
- 过期key淘汰机制
所有带过期时间的key 会统一存放至 '过期字典' 中,且redis定期扫描过期字典
定期扫描: 每秒进行10次【max 10次】
1,过期字典中 随机 拿 20 key 出来
2,删除 过期了的 key
3,过期key比例超过 1/4 循环继续
默认 25ms 超时设置, 避免卡死
引申: 如果同一秒内 有大量key过期, 查询/写入redis的时候会有明显的延迟;请求延迟均大于25ms
解决方案: 让过期时间分散【非集中】 expire 3600 + random(1, 10)
- 惰性删除 - maxmemory 内存检查
惰性删除 - maxmemory 内存检查
get/set 获取key的时候 触发检查
1, noeviction - 拒绝所有写请求, 但是可接收查询请求 【默认模式】
2, volatile-lru - 对过期key 进行lru算法淘汰
3, allkeys-lru - 所有key 均执行lru算法淘汰
4, volatile-ttl - 优先淘汰ttl最小的数据
least recently used 最近最少使用原则