目录
Redis的五大数据类型
Redis 字符串(String) 命令
String:字符串类型,可以存储任何形式的字符串
命令 | 描述 |
---|---|
Redis Setnx 命令 | 只有在 key 不存在时设置 key 的值。setnx name zhangsan 设置键值,存在此键则返回0不覆盖,否则正常设置 |
Redis Getrange 命令 | 返回 key 中字符串值的子字符。获取指定的范围值,start(从0开始)end(从0开始) set name zhangsan getrange name 2 5 -- 获取范围值,最终返回 'angs' |
Redis Mset 命令 | 同时设置一个或多个 key-value 对。mset name zhangsn age 22 address anhui -- 批量设置name和age和address |
Redis Setex 命令 | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 setex name 60 zhangsan -- 设置key为name,并且设置60秒过期时间 |
Redis SET 命令 | 设置指定 key 的值 set name zhangsan 设置string类型的键值,如果key已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型 |
Redis Get 命令 | 获取指定 key 的值。如果键key不存在,那么返回特殊值nil;否则返回键key的值。get name -- 获取name键的值 |
Redis Getbit 命令 | 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
Redis Setbit 命令 | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
Redis Decr 命令 | 将 key 中储存的数字值减一。 dect age 并返回减后的值(只能用在整型,字符串啥的会报错) |
Redis Decrby 命令 | key 所储存的值减去给定的减量值(decrement) 。 decrby age 11 将key中储存的数字值减指定步长increment,并返回减后的值(只能用在整型,字符串啥的会报错) |
Redis Strlen 命令 | 返回 key 所储存的字符串值的长度。 strlen name |
Redis Msetnx 命令 | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。msetnx name zhangsan age 22 -- 设置name和age两个键值 |
Redis Incrby 命令 | 将 key 所储存的值加上给定的增量值(increment) 。lncrby age 11 说明:将key中储存的数字值增加指定步长11,并返回增加后的值(只能用在整型,字符串啥的会报错) |
Redis Incrbyfloat 命令 | 将 key 所储存的值加上给定的浮点增量值(increment) 。lncrbyfloat salary 333.33 -- 对salary添加步长333.33 |
Redis Setrange 命令 | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。set name zhangsan --创建原始键值 setrange name 5 ' yu xiao' -- 把原有的 zhangsan 从第五位之后更改(0下标);最终变为 "zhang yu xiao" |
Redis Psetex 命令 | 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。psetex name 70000 zhangsan -- 设置key为name,并且设置70秒过期时间 |
Redis Append 命令 | 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。append name 'good good boy' 返回zhangsangood good body |
Redis Getset 命令 | 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
Redis Mget 命令 | 获取所有(一个或多个)给定 key 的值。mget name aaa -- 批量获取name和aaa的值(aaa键不存在则返回nil) |
Redis Incr 命令 | 将 key 中储存的数字值增一。并返回增加后的值(只能用在整型,字符串啥的会报错)incr age |
getdel | getdel key 说明:先获取到指定的key后,再删除获取的那个key;最终返回被删除的值 |
getex | getex key 获取指定的key值,并且获取后可以对当前key设置超时时间或者清除超时时间, ex seconds:设置键key的过期时间,单位时秒 px milliseconds:设置键key的过期时间,单位时毫秒 exat timestamp:设置键过期的指定Unix时间,以秒为单位 pxat milliseconds-timestamp:设置键过期的指定Unix时间,以毫秒为单位 persist:清除超时时间 |
Redis 哈希(Hash) 命令
Hash:哈希类型,适合存储对象,类似 Java 的 Map。
命令 | 描述 |
---|---|
Redis Hmset 命令 | 同时将多个 field-value (域-值)对设置到哈希表 key 中。hmset user name zhangsan age 18 |
Redis Hmget 命令 | 获取所有给定字段的值 ,但是可以一次性返回多个field值 hmget user name age |
Redis Hset 命令 | 将哈希表 key 中的字段 field 的值设为 value 。hset user name zhangsan age 18 设置key为user但里面存储着name和age字段 |
Redis Hgetall 命令 | 获取在哈希表中指定 key 的所有字段和值。 hgetall user |
Redis Hget 命令 | 获取存储在哈希表中指定字段的值/td> hget user name |
Redis Hexists 命令 | 查看哈希表 key 中,指定的字段是否存在。 hexists user name存在 返回1,不存在返回0 |
Redis Hincrby 命令 | 为哈希表 key 中的指定字段的整数值加上增量 increment 。hincrby user age 20,返回38 |
Redis Hlen 命令 | 获取哈希表中字段的数量 hlen user 返回2:字段数量 |
Redis Hdel 命令 | 删除一个或多个哈希表字段 hdel user name |
Redis Hvals 命令 | 获取哈希表中所有值 hvals user |
Redis Hincrbyfloat 命令 | 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 hincrbyflost user age 10.2 |
Redis Hkeys 命令 | 获取所有哈希表中的字段 hkeys user,返回key |
Redis Hsetnx 命令 | 只有在字段 field 不存在时,设置哈希表字段的值。 hsetnx user name zhangsan 存在返回0不能更改,如果当前field存在则添加失败(不可覆盖添加) |
hstrlen | hstrlen key field 说明:返回存储在key中给定field相关联的值的字符串长度(string length) |
hrandfield | hrandfield key [count [withvalues]] 随机返回key里的field字段 count:返回的field个数 hrandfield user 2 |
Redis 列表(List) 命令
List:列表类型,可以存储一个有序的字符串列表。
命令 | 描述 |
---|---|
Redis Lindex 命令 | 通过索引获取列表中的元素 lindex list 0 |
Redis Rpush 命令 | 在列表中右边添加一个或多个值 rpush list a b c d e |
Redis Lrange 命令 | 获取列表指定下标范围内的元素 lrange list 0 -1 下标0到-1是查询所有 |
Redis Rpoplpush 命令 | 移除列表的最后一个元素,并将该元素添加到另一个列表的开头并返回 RPOPLPUSH list list2 |
Redis Blpop 命令 | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。blpop list 10 可以在10秒内,在打开一个程序窗口,添加一条数据,blpop就继续执行 |
Redis Brpop 命令 | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。BRPOP list1 100 |
Redis Brpoplpush 命令 | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 Brpoplpush list list2 10 可以在10秒内,在打开一个程序窗口,添加一条数据,blpop就继续执行 |
Redis Lrem 命令 | 移除列表元素 lrem list 1 a 1是count a是value COUNT 的值可以是以下几种: |
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,要删除的数量为 COUNT 。lrem list 1 a | |
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,删除的数量为 COUNT 的绝对值。 lrem list -2 a |
|
count = 0 : 移除表中所有与 VALUE 相等的值。 lrem list 0 a |
|
Redis Llen 命令 | 获取列表长度 LLEN list 查询列表的个数 |
Redis Ltrim 命令 | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。LTRIM list 1 10 只保留下标为0到下标为10的数据,不在指定范围的数据删除 |
Redis Lpop 命令 | 移出并获取列表的第一个元素 lpop list |
Redis Lpushx 命令 | 将一个或多个值插入到已存在的列表头部 lpushx list 1 2 3 4 如果list列表不存在时操作无效。 |
Redis Linsert 命令 | 在列表的元素前或者后插入元素 LINSERT list BEFORE "4" "5" :在4之前插入5 |
Redis Rpop 命令 | 移除并获取列表最后一个元素 rpop list |
Redis Lset 命令 | 通过索引设置列表元素的值 LSET list 0 "bar" 把下标为0的设置为bar |
Redis Lpush 命令 | 将一个或多个值插入到列表头部 LPUSH list1 "foo" |
Redis Rpushx 命令 | 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果mylist2列表不存在,操作无效。 RPUSHX mylist2 "bar" |
lpos | lpos listString Romanti -- 查询集合listString里的Romanti出现的索引位置(0开始索引) |
lmove | lmove listString mylist left right -- 从listString源集合的左边弹出个元素,添加到mylist目标集合的右边 |
blmove | blmove listString mylist left right 60 -- 从集合listString左边弹出一个元素放到目标集合mylist的尾部 但是存在60秒的超时时间,超过60秒没有弹出元素则自动失败,返回(nil) |
Redis 集合(Set) 命令
Set:集合类型,可以存储一个无序的字符串集合,支持集合操作。
差集:两个集合中不重复的元素,只取前一个集合不重复的元素
交集:两个集合中重复的元素
并集:两个集合合并元素
命令 | 描述 |
---|---|
Redis Sunion 命令 | 返回所有给定集合的并集 sunion set set2 就是合并起来 |
Redis Scard 命令 | 获取集合的成员数 scard set |
Redis Srandmember 命令 | 返回集合中一个或多个随机数 srandmember set 2 |
Redis Smembers 命令 | 返回集合中的所有成员 smembers set |
Redis Sinter 命令 | 返回给定所有集合的交集 sinter set set2 就是重复的值 |
Redis Srem 命令 | 移除集合中一个或多个成员 srem set f |
Redis Smove 命令 | 将 a 元素从 set 集合移动到 set2 集合 smove set set2 a |
Redis Sadd 命令 | 向集合添加一个或多个成员 |
Redis Sismember 命令 | 判断 a 元素是否是集合 key 的成员 sismember set a 存在返回1,不存在返回0 |
Redis Sdiffstore 命令 | 返回给定所有集合的差集并存储在 set4中 Sdiffstore set4 set1 set2 |
Redis Sdiff 命令 | 返回给定所有集合的差集 Sdiff set1 set2 差集就是不重复的元素,只返回前一个集合不重复的元素 |
Redis Sscan 命令 | 迭代集合中的元素 sscan set 0 match * |
Redis Sinterstore 命令 | 返回给定所有集合的交集并存储在 set3中 Sinterstore set3 set1 set2 交集就是重复的 |
Redis Sunionstore 命令 | 所有给定集合的并集存储在 set3 集合中 sunionstore set3 set set2 并集就合并元素 |
Redis Spop 命令 | 移除并返回集合中的一个随机元素 spop set1 |
SINTERCARD | 生成的交集中的元素数,重复的。 SINTERCARD 2 set1 set2 |
Redis 有序集合(sorted set) 命令
Zset:有序集合类型,在 set 的基础上,为每元素提供一个 score 值,可以根据 score 值进行排序。
命令的min参数和max参数用于指定用户想要获取的字段序范围,他们的值可以是以下四种值之一:
-
带有 [ 符号的值表示在结果中包含与指定值具有同等字典序大小的成员
-
带有 ( 符号的值表示在结果中不包含与给定值具有同等字典序大小的成员
-
加号 + 表示无穷大
-
减号 - 表示无穷小
命令 | 描述 |
---|---|
Redis Zrevrank 命令 | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 zrerank zset a |
Redis Zlexcount 命令 | 在有序集合中计算指定字典区间内成员数量 zlexcount zset [a (c 的成员个数 |
Redis Zunionstore 命令 | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 zunionstore zset3 2 zset1 zset2:把1和2的合并到3里面去 ,zset3后面的2是要合并几个集合 |
Redis Zremrangebyrank 命令 | 移除有序集合中给定的排名区间的所有成员 zremrangebyrank zset 1 3 |
Redis Zcard 命令 | 获取有序集合的成员数 zcard zset |
Redis Zrem 命令 | 移除有序集合中的一个或多个成员 zrem zset a b |
Redis Zinterstore 命令 | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 zinterstore zset3 2 zset1 zset2**:把1和2的重复的值放到3里面去 ,zset3后面的2是要合并几个集合 |
Redis Zrank 命令 | 返回有序集合中指定成员的索引 zrank zset a |
Redis Zincrby 命令 | 有序集合中对指定成员的分数加上增量 increment zincrby zset 300 peter 给peter分数加上300 |
Redis Zrangebyscore 命令 | 通过分数返回有序集合指定区间内的成员 Zrangebyscore zset 2000 3000 Zrangebyscore zset (2000 (5000获取分值大于3000且小于5000的成员,结果中不包含3000和5000的成员 Zrangebyscore zset - +:最小值到最大纸 |
Redis Zrangebylex 命令 | 通过字典区间返回有序集合的成员 zrangebylex zset [a (b:获取zset集合中所有以a开头的成员,那么只须要将min参数的值设置为 [a,max参数的值设置为 (b 即可 |
Redis Zscore 命令 | 返回有序集中,成员的分数值 zscore zset a |
Redis Zremrangebyscore 命令 | 移除有序集合中给定的分数区间的所有成员 zremrangebyscore zset 2000 3000 |
Redis Zscan 命令 | 迭代有序集合中的元素(包括元素成员和元素分值) |
Redis Zrevrangebyscore 命令 | 返回有序集中指定分数区间内的成员,分数从高到低排序 zrevrangebyscore zset 3000 2000 limit 0 1 |
Redis Zremrangebylex 命令 | 移除有序集合中给定的字典区间的所有成员 zremrangebylex zset [a (c |
Redis Zrevrange 命令 | 返回有序集中指定区间内的成员,通过索引,分数从高到底 zrange zset 0 3 |
Redis Zrange 命令 | 通过索引区间返回有序集合成指定区间内的成员 zrange zset 0 -1 查询所有 |
Redis Zcount 命令 | 计算在有序集合中指定区间分数的成员数 zcount zset 200 300 查询分数200-300的个数 |
Redis Zadd 命令 | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 zadd zset a 3500 b 4000 |
Redis HyperLogLog 命令
命令 | 描述 |
---|---|
Redis Pgmerge 命令 | 将多个 HyperLogLog 合并为一个 HyperLogLog PFMERGE hll3 hll1 hll2 有去重效果 |
Redis Pfadd 命令 | 添加指定元素到 HyperLogLog 中。 PFADD mykey a b c d e f g h i j |
Redis Pfcount 命令 | 返回给定一个或多个 HyperLogLog 的基数估算值,重复的算一个,多个就是之和。PFCOUNT mykey mykey2 |
Redis 发布订阅 命令
redis发布订阅(pub/sub)是一种消息通信模式:发布者(pub)发布消息,订阅者(sub)接收消息。
redis客户端可以订阅任意数量的频道。
Redis的发布与订阅功能可以让客户端通过广播方式,将 消息(message
)同时发送给可能存在的多个客户端,并且发送消息的客户端不需要知道接收消息的客户端的具体信息。换句话说,发布消息的客户端与接收消息的客户端两者之间没有直接联系。
在Redis中,客户端可以通过订阅特定的 频道(channel
)来接收发送至该频道的消息,我们把这些订阅频道的客户端称为订阅者(subscriber
)。一个频道可以有任意多个订阅者,而一个订阅者也可以同时订阅任意多个频道。除此之外,客户端还可以通过向频道发送消息的方式,将消息发送给频道的所有订阅者,我们把这些发送消息的客户端称为发送者(publisher
)。
命令 | 描述 |
---|---|
Redis Unsubscribe 命令 | 指退订给定的频道。说明:若没有指定channel,则默认退订所有频道 unsubscribe channd |
Redis Subscribe 命令 | 订阅给定的一个或多个频道的信息。subscribe channel channe2 |
Redis Pubsub 命令 | 查看订阅与发布系统的状态,说明:返回活跃频道列表(即至少有一个订阅者的频道,订阅模式的客户端除外)PUBSUB CHANNELS PUBSUB CHANNELS news.* |
Redis Punsubscribe 命令 | 退订所有给定模式的频道。说明:pattern 未指定,则订阅的所有模式都会被退订,否则只退订指定的订阅的模式 PUNSUBSCRIBE news.* |
Redis Publish 命令 | 将信息发送到指定的频道。,返回结果:接收到信息的订阅者数量,无订阅者返回0 publish channel "hello" publish newssf "hello" |
Redis Psubscribe 命令 | 订阅一个或多个符合给定模式的频道。说明:每个模式以 * 作为匹配符;例如 cn* 匹配所有以cn开头的频道:cn.java、cn.csdn psubscribe news* it.* |
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、it.tweets 等等), news* 匹配所有以 news. 开头的频道( newsit 、 newsglobal.today 等等),诸如此类。 |
Redis 事务 命令
Redis事务小结:
-
单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键。
-
不保证事务的原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。
命令 | 描述 |
---|---|
Redis Exec 命令 | 执行所有事务块内的命令(提交事务)。exec |
Redis Watch 命令 | 监视一个(或多个) key ,如果在事务执行(提交)之前这个(或这些) key 被其他命令所改动,那么事务将被打断。watch key1 key2 |
Redis Discard 命令 | 取消事务,放弃执行事务块内的所有命令。 discard |
Redis Unwatch 命令 | 取消 WATCH 命令对所有 key 的监视。如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。unwatch |
Redis Multi 命令 | 标记一个事务块的开始(开启事务)。multi |
Redis 键(key) 命令
说明:先设置一个key,并指定过期时间 秒/毫秒/时间戳秒/时间戳毫秒 ;返回 1 成功 0 失败
expire name 300 -- 把name键设置300秒过期
pexpire name 3000 -- 把name键设置3000毫秒过期(3秒)
expireat name 1633190400 -- 把name键设置为2021-10-2 00:00:00到期(精确秒)
pexpireat name 1633190400000 -- 把name键设置为2021-10-2 00:00:00到期(精确毫秒)
注:使用del可以删除定时的key 使用set可以覆盖定时的key; 使用getset可以返回并设置值,并会删除定时 如使用rename修改key名称,那么key定时器会被携带不会被删除
命令 | 描述 |
---|---|
Redis Type 命令 | 返回 key 所储存的值的类型。type key 说明:返回当前指定的key的类型。可返回的类型是: string,list,set,zset,hash和stream |
Redis PEXPIREAT 命令 | 设置 key 的过期时间亿以毫秒计。 |
Redis PEXPIREAT 命令 | 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 pexpire key milliseconds |
Redis Rename 命令 | 修改 key 的名称。rename key newkey 说明:修改key名称,存在原来则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1覆盖key2的值 rename name name1 |
Redis PERSIST 命令 | 移除 key 的过期时间,key 将持久保持。 persist key 清除当前有定时时间的键值,设置永不过期(和普通键值一样了),关闭后并不会删除已有的键值 persist name -- 关闭存在定时的键值 |
Redis Move 命令 | 将当前数据库的 key 移动到给定的数据库 db 当中。move key db 说明:把指定的键值移动到选定的数据库db当中。如果key在目标数据库中已存在,或者key在源数据库中不存,则key不会被移动。 move name 2 -- 把name移动到三号数据库里 |
Redis RANDOMKEY 命令 | 从当前数据库中随机返回一个 key 。randomkey |
Redis Dump 命令 | 序列化给定 key ,并返回被序列化的值。 |
Redis TTL 命令 | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。ttl key查看当前有定时key的剩余时间,返回秒 |
Redis Expire 命令 | 语法:expire key seconds [nx|xx|gt|lt],为一个存在的key设置过期时间 秒 expire age 60 age过期时间为60秒 |
Redis DEL 命令 | 该命令用于在 key 存在是删除 key。del key [key ...] 说明:删除指定的key del name age address |
unlink | unlink key [key ...] 说明:其实这个和删除del命令很像,也是存在key删除,不存在则忽略;删除几个键值,则返回删除的个数 unlink name1 name2 name3 |
注:del和unlink区别 del:它是线程阻塞的,当执行del命令是,del在没执行完时,其它后续的命令是无法进入的(要安全就使用del) unlink:它不是线程阻塞的,当执行unlink命令时,它会将要删除的键移交给另外线程,然后将当前要删除的键与数据库空间断开连接 后续则由其它线程异步删除这些键(要效率快就使用unlink) | |
Redis Pttl 命令 | 以毫秒为单位返回 key 的剩余的过期时间。pttl key 说明:查看当前有定时key的剩余时间,返回毫秒 |
ttl name:返回秒 pttl name: 返回毫秒 注:没过期反剩余时间 过期反-2 没设置过期时间的key反-1 | |
Redis Renamenx 命令 | 仅当 newkey 不存在时,将 key 改名为 newkey 。renamenx key newkey 说明:修改key名称存在则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1修改不成功 |
Redis EXISTS 命令 | 检查给定 key 是否存在。exists key [key ...] 说明:返回要查询的key是否存在,存在则返回1,如果设置四个key都存在则会返回4;返回0则代表没有 exists name -- 查看是否存在name的key |
Redis Expireat 命令 | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。expireat key timestamp:为一个存在的key设置过期时间 格式是uinx时间戳并精确到秒 |
Redis Keys 命令 | 查找所有符合给定模式( pattern)的 key 。keys pattern |
说明:用来匹配和查看指定的key pattern:查询条件: h?llo 匹配 hello, hallo 和 hxllo h*llo 匹配 hllo 和 heeeello h[ae]llo 匹配 hello 和 hallo, 不匹配如 hillo hello 匹配 hallo, hbllo, ... 不匹配如 hello h[a-e]llo 匹配 hallo 和 hbllo, [a-e]说明是a~e这个范围 ,如hcllo也可以匹配 若想匹配如转义字符的如下,就需要使用 \ 转义你想匹配的特殊字符。 set na\me zhangsan keys na[\]me | |
copy | 语法:copy source destination [db destination-db] [replace] 说明:拷贝当前某一个key的值,存放到新的key中(可以跨库拷贝)返回 1 成功 0 失败 |
copy name1 name2 -- 把 name1 的值 拷贝到 name2 里 copy name1 name2 db 5 -- 把 name1 的值拷贝到第6号数据库name2里 copy name1 name2 replace -- 把 name1 的值拷贝到name2里,存在则强行覆盖 |