【Redis】Redis的类型及相关操作

一、常用的key操作命令

keys *
查看当前数据库的键值

ttl key
查看还有多少秒过期,-1表示永不过期,-2表示过期

del / unlink key
同样是删除,unlink是非阻塞删除,del则有可能导致阻塞

select dbindex
切换数据库

flushdb
清空当前库

二、字符串

keepttl
使用set key value导致键值的过期时间被刷新的问题,在这里使用keepttl即可保证键值在被重新赋值的时候不会被刷新过期时间。

mset/mget/msetnx
多值操作,mset一次性设置多个值,mget一次性获取多个值,msetnx只有在n个键都没有设置值的时候才会设置值。

mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4

getrange/setrange

set k1 abcd1234
GETRANGE k1 0 3
得到结果"abcd"

SETRANGE k1 1 xxyy
get k1
得到结果"axxyy234"

数值增减

INCR key         //  val + 1
INCRBY key x     //  val + x
DECR key         //  val - 1
DECRBY key x     //  val - x

setnx key value
setex(set with expire) / setnx(set if not exists)

三、链表

redis链表底层是一个双端链表,对两端操作性能高,通过索引下表操作中间节点性能较低。

  • lpush / rpush / lrange 左端插入 \ 右端插入 \ 从左到右遍历
  • lpop / rpop 左端弹出 \ 右端弹出
  • lindex / llen 从左往右第index个元素 \ 列表中元素个数
  • lrem key n v1 删除n个值等于v1的元素
  • ltrim key sindex eindex 截取下表sindexeindex的元素赋值给key
  • rpoplpush 列表1 列表2从列表1的右端弹出的元素从左端进入列表2
  • lset key index value 已有值,设置该列表的indexvalue
  • linsert key before / after 已经存在值,插入新值

四、哈希

此时的value也是一个key-value

  • hset/hget/hmset/hmget/hgetall/hdel
  • hlen 获取某个key内的全部哈希对数量
  • hexists key在key里面的某个值的key是否存在
  • hkeys/hvalskey里面所有哈希对的键/key里面所有哈希对的值
  • hsetnx不存在赋值,存在了无效

五、集合

单值多value,并且无重复

  • sadd/srem key member添加/删除元素
  • smembers遍历集合中的所有元素
  • sismember key member判断元素是否在集合中
  • sdiff/sunion/sinter集合运算 减/并/交

六、有序集合

有序集合是在集合的基础上,每个val值前面加上了score分数
set ---> k1 v1 v2 v3
zset---> k1 score1 v1 score2 v2

  • zadd key score member 添加元素
  • zrange key start stop从start位置到stop位置遍历元素。
  • zrangebyscore key min max获取指定分数范围的元素
  • zscore key member获取元素的分数
  • zrem key value删除对应value值的score

七、位图

  • setbit key offset value设置key对应value的第offset位为valueoffset从0开始算,value是1或者0
  • gitbit key offset获取key对应valueoffset位的值
  • strlen统计字节数占多少
  • bitcount全部键里面含有1的个数

八、基数统计

HyperLogLog是用来做基数统计的算法。其优点是,在输入元素数量或者体积非常大时,计算基数所需的空间总量是固定且非常小的。基础用法主要是去重

  • pfadd key value添加指定元素到HyperLogLog中
  • pfcount key返回HyperLogLog的估算值
  • pfmerge destkey sourcekey将多个HyperLogLog合并为一个HyperLogLog

九、地理空间

  • GEOADD key longitude latitude member添加经纬度坐标
  • GEOHASH key member使用geohash保存返回坐标
  • GEODIST key member1 member2计算两个点的距离
  • GEORADIUS以给定的经纬度为中心,求半径范围内的元素
  • GEORADIUSMEMBER找出位于指定范围内的元素,中心点由给定的位置元素决定

十、流

Reids消息队列的实现方式有:

  • List实现消息队列,支持了一对一的消息传输,但是一对多的消息传输却力不从心。
  • Redis发布订阅(pub/sub)缺点在于消息无法持久化,如果没有消费者,消息就会直接被丢弃。

所以,在Redis5.0出现了Stream用来支持消息队列。Stream实现了消息队列,支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加稳定可靠。

10.1消息队列的结构

在这里插入图片描述

名词解释
Message Content消息内容
Consumer group消费组,一个消费组有多个消费者
Last_delivered_id游标,消费组中的消费者读取消息后会使游标前移
Consumer消费者
pending_ids记录被当前消费组已读但未ack的消息Id,用来确保客户端至少消费了消息一次,但不会在网络传输的中途丢失了。

10.2 队列相关命令

  • XADD添加消息到队列末尾,*表示自动生成id
  • XRANGE start end count获取消息队列,start表示开始(-表示最小值),end表示结束(+表示最大值),count表示最多获得多少个值。
  • XREVRANGE end start count反向获取消息队列
  • XDEL删除消息
  • XLEN获取消息队列的消息长度
  • XTRIM对stream长度进行截取
  • XREAD用于获取消息,返回大于指定ID的消息,可以设置是否以阻塞的方式读取

10.3 消费组相关命令

  • XGROUP CREATE用于创建消费者组,命令末尾带$表示从尾部开始消费,命令末尾带0表示从头部开始消费。
  • XREADGROUP GROUP groupA consumer1 STREAMS mystream >用于让消费者读取消息,消费组groupA内的消费者consumer1从mystream消息队列中读取所有信息。并且,同一消费组里的消费者不能读取同一条消息。
  • XPENGDING查询每个消费组内所有消费者已读取但未确认的消息,并且能查看某个消费者具体读了哪些数据
  • XACK向消息队列确认消息处理已经完成
  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rockict_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值