redis

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 最近最少使用原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值