Redis十大数据类型

一、常用key命令

|--------------------|-------------------------------------------|
| keys * | 查看当前库的所有key |
| exists key | 判断某个key是否存在 |
| type key | 查看key的类型 |
| del key | 删除指定key |
| unlink key | 非阻塞删除,仅将key从keyspace元数据中删除,真正的删除会在后续异步中操作 |
| ttl key | 查看还有多少秒过期,-1表示永不过期,-2表示已过期 |
| expire key seconds | 为key设定过期时间 |
| move key dbindex | 将当前数据库中的key移动到指定数据库中 |
| select dbindex | 切换数据库,默认为0号数据库 |
| dbsize | 查看当前数据库key的数量 |
| flushdb | 清空当前库 |
| flushall | 清空全部库 |

  • redis命令不区分大小写,但key区分大小写

二、string类型

1. set

bash 复制代码
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
  EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

将键 key 设定为指定的"字符串"值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。当 set 命令执行成功之后,之前设置的过期时间都将失效。

  • NX -- 只有键 key 不存在的时候才会设置 key 的值
  • XX -- 只有键 key 存在的时候才会设置 key 的值
  • GET -- 返回 key 之前存储的值,如果 key 不存在返回空
  • EX seconds -- 设置键key的过期时间,单位为秒
  • PX milliseconds -- 设置键key的过期时间,单位为毫秒
  • EXAT unix-time-second -- 设置键key的过期时间戳,单位为秒
  • PXAT unix-time-milliseconds -- 设置键key的过期时间戳,单位为毫秒
  • KEEPTTL -- 保留 key 的过期时间
    其他相关命令
bash 复制代码
mset k1 v1 k2 v2 ...         设置多个key的值
mget k1 k2 k3 ...            获取多个key的值
msetnx k1 v1 k2 v2 ...       当key不存在时设置key的值
getrange key start end       获取key的值 [start, end] 的子串,负数表示从后面开始第几位
setrange key offset value    从offset位开始,用value替换原来从offset开始的相同长度的字符串

2. incr/decr

bash 复制代码
incr key                将key的值(一定要是数字)加1
decr key                将key的值减1
incrby key increment    将key的值加increment
decrby key decrement    将key的值减decrement    

3. strlen/append

bash 复制代码
strlen key           获取key的值的长度
append key value     在key的值后面拼接value

三、list类型

bash 复制代码
LPUSH	    将一个或多个值插入到列表头部
RPUSH	    将一个或多个值插入到列表尾部
LRANGE	    获取列表指定范围内的元素
LPOP	    移出并获取列表的第一个元素
RPOP	    移除并获取列表最后一个元素
LINDEX	    通过索引获取列表中的元素
LLEN	    获取列表长度
LREM	    从列表头部开始移除指定个数等于指定值的元素
LTRIM	    对列表按给定范围进行截取
RPOPLPUSH	移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回
LSET	    通过索引设置列表元素的值
LINSERT	    在列表的指定元素前或者后插入元素

四、hash类型

bash 复制代码
HSET	用于设置存储在 key 中的哈希表字段的值
HGET	获取存储在哈希表中指定字段的值
HGETALL	获取在哈希表中指定 key 的所有字段和值
HDEL	用于删除哈希表中一个或多个字段
HLEN	获取存储在 key 中的哈希表的字段数量
HEXISTS	用于判断哈希表中字段是否存在
HKEYS	获取存储在 key 中的哈希表的所有字段
HVALS	用于获取哈希表中的所有值
HINCRBY	为存储在 key 中的哈希表指定字段做整数增量运算

五、set类型

bash 复制代码
SADD	        向集合添加一个或多个成员
SMEMBERS	    返回集合中的所有成员
SISMEMBER	    判断 member 元素是否是集合 key 的成员
SREM	        移除集合中一个或多个成员
SCARD	        获取集合的成员数
SRANDMEMBER	    随机返回集合中指定个数的元素
SPOP	        移除并返回集合中的一个随机元素
SMOVE	        将元素从一个集合移动到另一个集合

SUNION	        返回所有给定集合的并集
SDIFF	        返回给定所有集合的差集
SINTER	        返回给定所有集合的交集

六、zset类型

bash 复制代码
ZADD	        向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE	        通过索引区间返回有序集合成指定区间内的成员
ZREVRANGE	    返回有序集中指定区间内的成员,通过索引,分数从高到底
ZRANGEBYSCORE	通过分数返回有序集合指定分数区间内的成员
ZSCORE	        返回有序集中成员的分数值
ZCARD	        获取有序集合的成员数
ZREM	        移除有序集合中的一个或多个成员
ZINCRBY	        有序集合中对指定成员的分数加上增量 increment
ZCOUNT	        计算在有序集合中指定区间分数的成员数
ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]           
                从numkeys个排序集中按分数从小(大)弹出count个元素,它们是成员分数对
ZRANK	        返回有序集合中指定成员的索引
ZREVRANK	    返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

七、bitmap类型

由0和1状态表现的二进制位的bit数组,使用type key得到的结果为"string",可以看为string类型的子类。

bash 复制代码
setbit key offset val     给指定key的值的第offset位(从0开始)赋值val
getbit key offset         获取指定key的第offset位
strlen key                统计字节数,8位为一字节
bitcount key start end    返回指定范围内1的数量
bitop operation destkey key [key...]   
                          对不同的二进制存储数据进行位运算(and、or、not、xor),结果存入destkey

八、HyperLogLog

去重复统计功能的基数估计算法,只根据输入元素来计算基数,而不会存储输入元素本身。(基数可以看做是set的元素个数)

bash 复制代码
pfadd key element [element ...]             添加指定元素到HyperLogLog
pfcount key [key ...]                       返回给定HyperLogLog的基数估算值
pfmerge destkey sourcekey [sourcekey ...]   将多个HyperLogLog合并

九、GEO

存储地理位置。

bash 复制代码
GEOADD	            将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
GEOPOS	            从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST	            返回两个给定位置之间的距离
GEORADIUS	        以给定的经纬度为中心, 找出某一半径内的元素
GEORADIUSBYMEMBER	找出位于指定范围内的元素,中心点是由给定的位置元素决定
GEOHASH	            返回一个或多个位置元素的 Geohash 表示

十、stream

redis版的MQ,消息中间件+阻塞队列。

1. 队列相关

bash 复制代码
xadd         添加消息到队列末尾,返回消息id(id格式:毫秒时间戳-该毫秒内的第几条(0开始)消息)
strim        限制stream长度,如果已经超长会进行截取
xdel         删除消息
xlen         获取stream中消息长度
xrange       获取消息列表,忽略删除的消息
xrevrange    和xrange相比在于反向获取,id从大到小
xread        获取消息,返回大于指定id的消息

2. 消费组相关

bash 复制代码
XGROUP CREATE    创建消费者组,$表示从尾部开始消费(即只消费新加入的消息),0表示从头部
XREADGROUP GROUP group consumer STREAMS stream id 
                 消费组group中的消费者consumer从stream中的id开始读取消息,id为>表示从
                 第一条尚未被消费的消息开始读取(stream中的消息一旦被消费组的一个消费者
                 读取了,就不能再被该消费组内的其他消费者读取了)

消费组的目的:让组内多个消费者共同分担读取消息,实现消息读取负载在多个消费者间是均衡分布的。

问题:基于 Stream 实现的消息队列,如何保证消费者在发生故障或宕机再次重启后,仍然可以读取未处理完的消息?

Streams 会自动使用内部队列(也称为 PENDING List)留存消费组里每个消费者读取的消息保底措施,直到消费者使用 XACK 命令通知 Streams"消息已经处理完成"。

消费确认增加了消息的可靠性,一般在业务处理完成之后,需要执行 XACK 命令确认消息已经被消费完成。

bash 复制代码
xpending     查询每个消费组内所有消费者【已读取,但尚未确认】的消息
xack         向消息队列确认消息处理已完成
bash 复制代码
xinfo     打印stream相关信息

十一、bitfields

将一个redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。

如 hello 等价于 01101000,01100101,01101100,01101100,01101111

(十进制为448378203247)。

bash 复制代码
BITFIELD key [GET type offset | 
             [OVERFLOW WRAP|SAT|FAIL] SET type offset value | 
              INCRBY type offset increment]
  • WRAP(默认值):使用回绕方法处理溢出,如i8表示八位有符号二进制,范围为-128-127,当127+i溢出时,得到的值为-128+(i-1)
  • SAT:使用饱和计算方法处理溢出,下溢结果为最小整数值,上溢为最大整数值
  • FAIL:拒绝执行导致溢出的计算,并向用户返回空值表示计算未被执行
相关推荐
难以触及的高度33 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)1 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
fpcc3 小时前
redis6.0之后的多线程版本的问题
c++·redis
小技与小术3 小时前
数据库表设计范式
数据库·mysql
刘九灵3 小时前
Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
redis·缓存
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer3 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体3 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j