一、Redis字符串(String)
String是Redis最基本的类型,一个key对应一个value,它是二进制安全的(String可以包含任何数据,如jpg图片或者序列化的对象),
一个字符串value最多可以是512MB
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
-
EX
以秒为单位设置过期时间 PX
以毫秒为单位设置过期时间EXAT
设置以秒为单位的UNIX时间戳所对应的时间为过期时间(Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。)PXAT
设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间NX
键不存在时设置键值XX
键存在时设置键值KEEPTTL
保留设置前指定键的生存时间。之前设置了键的过期时间,如果用新的 value 值覆盖旧的并且不设置过期时间,新的 value 就会永不过期GET
返回指定键原本的值,若键不存在时返回 nil
(1)同时设置/获取多个键值对
MSET k1 v1 k2 v2...
同时设置多个键值对
MGET k1 k2 k3...
同时获取多个键值对
MSETNX k1 v1 k2 v2
键不存在时设置键值对
(2)获取指定区间范围内的值(下标从0开始)
GETRANGE k1 0 -1
获取 k1 的全部值;GETRANGE k1 x y
获取下标从 x 到 y 的内容SETRANGE k1 x abcd
从下标 x 开始将 abcd 覆盖掉原内容
(3)数值增减(value必须是数字)
INCR key
key = key+ 1INCRBY key x
key = key+ xDECR key
key = key - 1DECRBY key x
key = key- xSTRLEN key
获取 key 的长度APPEND key xxxx
在 key 后加上 xxxx
(4)分布式锁
SETEX key 过期时间(秒) value
创建键值对并设置过期时间
(5)getset(先get在set)
GETSET key newValue
获取 key 的值再将 newValue 赋给 key,类似于SET key newValue GET
二、Redis列表(List)
底层是双向链表,可以在列表头部和尾部插入元素,最多可以包含2^32 - 1(4,294,967,295--超过40亿)个元素
LPUSH key 1 2 3 4 5
在列表头部依次插入这些元素RPUSH key 1 2 3 4 5
在列表尾部依次插入这些元素LRANGE key 0 -1
从左向右遍历输出列表;LRANGE key start stop
从 start 遍历输出到 stopLPOP key
移出并获取列表的第一个元素RPOP key
移出并获取列表的最后一个元素LINDEX
按照元素下标获取元素(下标从上向下数,从0开始)LLEN
获取列表的长度LREM key 数字N value
删除 N 个值等于 value 的元素LTRIM key start stop
截取指定范围内的元素在赋值给 key
RPOPPUSH 源列表 目的列表
将源列表的最后一个元素移到目的列表的头部
LSET key index value
将 key 中下标为 index 的元素赋值为 valueLINSERT key before | after 已有值 新值
在 key 中已有值的前面或后面插入新值
三、Redis哈希表(Hash)
是一个String类型的field(字段)value(值)的映射表,每个hash可以存储2^32 - 1个键值对
Map<String, Map<Object, Object>>
HSET key field value [field value ...]
HGET key field
HMSET
已被弃用,使用 HSET 也可以一次设置多个键值对HMGET key field [field ...]
可以同时根据多个 fileld 获取 valueHGETALL key
HDEL key field [field ...]
HLEN key
显示 key 中全部键值对的数量HEXISTS key field
查询 key 中是否有以 field 为 key 的键值对,1 为 true、0 为 falseHKEYS key
类似于 Java 中的 keySet(),HVALS key
类似于 Java 中的 values()HINCRBY key field increment
为 key 中的 field 的值加上 increment(整数),HINCRBYFLOAT key field increment
加上指定的小数,也可以加整数HSETNX key field value
在 key 中 field 不存在时设置,成功返回 1,失败返回 0
四、Redis集合(Set)
Set是String类型的无序集合,集合成员是唯一的(无序无重复),集合对象的编码可以是 intset 或者 hashtable。Set是通过哈希表实现的,
添加、删除、查找的复杂度是O(1),集合中最大的成员数为2^32 - 1
SADD key member [member ...]
向集合里添加数据,只插入不重复的数据,自动去重SMEMBERS key
查看集合中的全部元素SISMEMBER key member
判断 member 在不在集合中,1在、0不在SREM key member [member ...]
在集合中删除指定的元素,返回 0 表示没有该元素,返回 1 表示删除成功SCARD key
统计集合中元素的数量SRANDMEMBER key [count]
从集合中随机显示 count 个元素SPOP key [count]
从集合中随机弹出 count 个元素并删除SMOVE source destination member
将 source 中存在的 member 元素剪切到 destination中
集合运算
SDIFF key [key ...]
A - B ,属于 A 但不属于 B 的元素SUNION key [key ...]
A ∪ B,取两者的并集(自动去重)SINTER key [key ...]
A ∩ B,取两者的交集SINTERCARD numkeys key [key ...] [LIMIT limit]
显示 numkeys 个集合取交集后的集合的元素数量
五、RedisZSet(Sorted set | ZSet)
有序集合,与Set一样也是String类型元素的集合,集合成员是唯一的,但是每个元素都会关联一个double类型的分数,通过分数来进行排序,分数可以重复。
ZSet是通过哈希表实现的,添加、删除、查找的复杂度是O(1),集合中最大的成员数为2^32 - 1
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
向有序集合中加入一个元素和该元素的分数ZRANGE key min max
按照元素分数大小输出该集合的 member(升序输出),ZRANGE zset1 0 -1 WITHSCORES
比前面多加了一个 scoreZREVRANGE key start stop [WITHSCORES]
降序输出ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
输出分数在 [ min, max ] 之间的元素,LIMIT:输出 下标在 [offset, count] 之间元素ZRANGEBYSCORE key (min max
输出分数在 ( min, max ] 之间的元素ZSCORE key member
获取指定元素的分数ZCARD key
获取集合全部元素的个数ZREM key member [member ...]
删除集合里面的元素ZINCRBY key increment member
为 member 加上 incrementZCOUNT key min max
统计分数在 [ min, max ] 中元素的个数ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
从 numkeys 个集合里面弹出 count 个最大或最小的元素ZRANK key member
获取集合中 member 元素的下标ZREVRANK key member
逆序获取集合中 member 元素的下标
六、Redis地理空间(GEO | Geospatial)
存储地理位置信息,可以添加地理位置的坐标、获取地理位置的坐标、计算两个地理位置之间的距离、根据用户给定的经纬度来获取指定范围内的地理位置集合
底层是 zset,输出中文乱码的解决方法:redis-cli -a 密码 --raw
加上 --raw
GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]
存储 member 的经度(longitude)和纬度(latitude)到 key 中GEOPOS key member [member ...]
返回 key 中指定成员的经纬度 天安门 故宫 八达岭长城GEOHASH key member [member ...]
将指定 member 的经纬度映射为一个值GEODIST key member1 member2 [M|KM|FT|MI]
计算 member1 和 member2 之间的距离(单位默认为米),单位有米、千米、英尺、英里GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
以给定的经纬度为中心,返回与中心距离不超过 radius 的所有位置(在 key 中进行比较)
WITHCOORD
返回位置的经纬度
WITHDIST
返回与中心之间的距离
WITHHASH
以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。(菜鸟教程)
COUNT
显示返回元素的个数
ASC
返回位置按距离从近到远显示(升序)
DESC
返回位置按距离从远到近显示(降序)
GEORADIUSBYMEMBER key member radius
以给定的 member 为中心,返回与中心距离不超过 radius 的所有位置(在 key 中进行比较)
七、Redis基数统计(HyperLogLog)
HyperLogLog是用来基数统计的算法,统计网站的 UV(Unique Visitor 独立访客:一般为客户端IP),统计搜索网站关键词的数量。用于统计一个集合中不重复的元素个数。误差率为 0.81%
PFADD key [element [element ...]]
将元素添加到 HyperLogLog 中PFCOUNT key [key ...]
返回给定 HyperLogLog 的基数估计值PFMERGE destkey sourcekey [sourcekey ...]
将多个 HyperLogLog 合并为一个存到 destkey 中
八、Redis位图(Bitmap)
基于String数据类型,由0和1状态表现的二进制bit数组(bit arrays),用来判断 Y/N 状态
SETBIT key offset value
设置位图的第 offset 位的值,offset 最大值为 2^32,512MB = 2^9 × 2 ^ 20 × 2^3 = 2^32GETBIT key offset
获取指定位的值STRLEN key
获取该位图占据的字节长度,每 8 位为一组BITCOUNT key [start end [BYTE|BIT]]
统计位图中 1 的个数BITOP operation destkey key [key ...]
对 key 进行 AND(与)、OR(或)、NOT(非)、XOR(异或)运算并将结果存到 destkey 中
九、Redis位域(Bitfield)
可以一次性操作多个比特位域(指连续的多个比特位),并返回一个响应数组,数组中的元素对应参数列表中的相应操作的执行结果
十、Redis流(Stream)
是Redis 5.0 版本新增的数据结构。Stream主要用于消息队列(MQ,Message Queue)。Redis版本的消息中间件。
XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]
添加消息到队列末尾消息ID要比上一个消息ID大;默认用 * 自动生成 ID
会返回生成的消息ID,由毫秒时间戳和该毫秒内产生消息的个数组成
XRANGE key start end [COUNT count]
用于获取消息队列,忽略删除的消息,- 代表最小值, + 代表最大值XREVRANGE key end start [COUNT count]
倒着获取消息队列XDEL key id [id ...]
删除指定消息XLEN key
获取消息队列中消息的个数XTRIM key MAXLEN|MINID [=|~] threshold [LIMIT count]
对消息队列进行截取,MAXLEN 限定消息队列的最大长度(删掉旧的),MINID 截取掉比指定时间戳小的消息
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
用于获取消息(阻塞和非阻塞),只会返回大于指定ID的消息
COUNT
最多读取多少条信息;BLOCK
是否已阻塞的方式读取消息,默认不阻塞,milliseconds
如果设置为 0,表示永远阻塞
XREAD count 2 streams mystream 000 | 0-0 | 00
代表从最小的ID开始获取 Stream 中的消息,不指定 COUNT 时,返回所有消息
XREAD count 1 block 0 streams mystream $
以阻塞方式获取最新的消息,会等待着获取最新的消息
XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD entries_read]
创建消费者组,$ 表示从 Stream 尾部开始消费(只消费新的的消息),0 表示从 Stream 头部开始消费
为 $ 表示只消费最新的的消息
为 0-0 或者 0 表示从头开始消费(从旧的开始消费)
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] id [id ...]
> 表示从第一条尚未被消费的消息开始读取
消费组 groupX 内的消费者 consumer1 从 mystream 中读取所有消息(默认读取全部消息)
同一个消费组的消费者不能消费同一条消息,如果继续消费会显示 nil(读到空值),不同组的消费者可以消费同一条消息。
创建消费组的目的:让组内的多个消费者共同分担读取消息的工作,从而实现消息读取负载的多个消费者间是均衡分布的
XPENDING key group [[IDLE min-idle-time] start end count [consumer]]
查询每个消费组内所有消费者已读但未确认的消息
XACK key group id [id ...]
确认该消费组读取了那些消息
确认 groupA 中 1709454179705-0 已被读取
XINFO STREAM key [FULL [COUNT count]]
显示指定 Stream 的详细信息
标签:count,...,数据类型,元素,Redis,value,member,key,常用命令 From: https://www.cnblogs.com/shiguangrusuo/p/18019331