redis原理(三)redis命令

一、字符串命令:

1、字符串基本操作:

(1)SET:执行成功时返回OK:

(2)GET:获取value值

(3)DEL:返回被成功删除的值的数量

(4)strlen,exists,,,setex,expire key 60;ttl key 【设置过期时间+查看指定key的过期时间】 等等;

2、自增自减 :如果一个值可以被解释为十进制整数或者浮点数,redis允许用户对这个字符串进行INCR*、DECR*操作。

(1)INCR key:将键存储的值的值加1。

(2)DECR key:将键存储的值减1。

(3)INCRBY key increment:将键存储的值加上整数 increment。

(4)DECRBY key decrement:将键存储的值减去整数 decrement。

(5)INCRBYFLOAT key decrement:将键存储的值加上浮点数decrement。这个命令在redis2.6及以上可以使用。

复制代码
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> INCR age
(integer) 2
127.0.0.1:6379> get age
"2"
127.0.0.1:6379> DECR age
(integer) 1
127.0.0.1:6379> get age
"1"
127.0.0.1:6379> INCRBY age 3
(integer) 4
127.0.0.1:6379> get age
"4"
127.0.0.1:6379> DECRBY age 1
(integer) 3
127.0.0.1:6379>

3、处理子串和二进制位:

(1)APPEND

(2)GETRANGE:

(3)SETRANGE:

(4)GETBIT:

(5)SETBIT:

(6)BITCOUNT:

(7)BITOP:

二、列表命令:

1、基础命令:

(1)LPUSH 命令:在 列表 的左侧添加元素,成功返回当前列表的长度。

复制代码
127.0.0.1:6379> lpush key java
(integer) 1

LPUSH 一次可以给 key 添加多个 value

复制代码
127.0.0.1:6379> lpush key python php c
(integer) 4

(2)RPUSH **命令:**将元素推入列表的右端,用法和 lpush 相同。

复制代码
127.0.0.1:6379> rpush key rust
(integer) 6
127.0.0.1:6379> rpush key asm scala
(integer) 8

(3)LPOP **命令:**从列表的左端弹出元素

(4)RPOP命令:从列表的右端弹出元素

(5)llen 命令: 返回列表的当前长度

复制代码
127.0.0.1:6379> llen key
(integer) 8

(6)LINDEX 命令: 获取列表在给定位置上的一个元素;

复制代码
127.0.0.1:6379> lindex key  1
"python"

(7)LRANGE 命令: 获取列表在给定范围内的所有元素

复制代码
127.0.0.1:6379> lrange key 0 3
1) "c++"
2) "c"
3) "php"
4) "python"

(8)**ltrim 命令:**用于截取列表内元素

复制代码
127.0.0.1:6379> ltrim key 0 5
OK
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "c"
3) "php"
4) "python"
5) "java"
6) "rust"

2、阻塞式命令:这组命令常用于消息传递、任务队列。

(1)blpop 命令:从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现。

复制代码
blpop key [key ...] timeout

demo:同时开两个 Redis 的客户端,然后在客户端一输入如下命令:

复制代码
#在 key1 和 key2 列表中弹出一个值,如果两个列表都为空则阻塞 5 秒,因为现在 key1 和 key2 都为空,因此 blpop 阻塞了 5 秒。
127.0.0.1:6379> blpop key1 key2 5
(nil)
(5.06s)

再次在客户端一输入如下命令:

复制代码
127.0.0.1:6379> blpop key1 key2 20

由于 key1 和 key2 同样什么都没有,因此 blpop 命令进入 20 秒的阻塞状态,此时,我们在客户端二输入如下命令:

复制代码
127.0.0.1:6379> lpush key1 java
(integer) 1

观察客户端一,客户端一输出如下:

复制代码
1) "key1"
2) "java"
(9.51s)

也就是客户端一的 blpop 阻塞了 9.51 秒 以后 key1 列表弹出一个值 java。

(2)brpop 命令: 从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现。

(3)rpoplpush 命令:

(4)brpoplpush 命令

三、集合命令:

1、基本命令:

(1)SADD:将元素添加到集合;

(2)SREM:从集合中移除元素

(3)SISMEMBER:检查一个元素是否存在于集合中;

(4)SCARD:

(5)SMEMBERS:获取集合包含的所有元素(谨慎使用,如果数据量大会很慢)

(6)SRANDMEMBER:

(7)SPOP:

(8)SMOVE:

2、用于组合和处理多个集合的redis命令:

(1)SDIFF:

(2)SDIFFSTORE:

(3)SINTER:

(4)SINTERSTORE:

(5)SUNION:

(6)SUNIONSTORE:

四、散列命令:

1、基本命令:

(1)HSET:在散列里面关联起给定的键值对;

(2)HGET:获取指定散列键的值;

(3)HGETALL:获取散列包含的所有键值对

(4)HDEL:如果给定键存在于散列里面,则移除这个键。

(5)HLEN:返回散列包含的键值对数量

2、其他命令:

(1)HMSET:同时将多个 field-value (域-值)对设置到哈希表 key 中。此命令会覆盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并执行 hmset 操作。如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。

注意:在官方文档中关于hmset的描述如下:As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.(根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。)

复制代码
hmset key field value [field value ...]

(2) HMGET:按照给出顺序返回哈希表 key 中一个或多个域的值。:如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 hmget 操作将返回一个只带有 nil 值的表。

复制代码
hmget key field [field ...]

(3) HEXISTS:查看哈希表 key 中给定域 field 是否存在。如果哈希表含有给定域,返回 1 。如果不含有给定域,或 key 不存在,返回 0 。

复制代码
hexists key field

(4)HKEYS与 hvals: 返回哈希表 key 中的所有域/值。当 key 不存在时,返回一个空表。尽管有HGETALL存在,当散列包含的值非常大时可以像遍历HashMap一样先HKEYS取出所有的key,再根据key使用HGET一个个获取键值,避免一次获取多个大体积的值导致服务器阻塞。

复制代码
[ hkeys / hvals ] key

(5)hincrby 与 hincrbyfloat:为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新的哈希表被创建并执行 hincrby 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。

复制代码
[ hincrby / hincrbyfloat ] key field increment
五、有序集合命令:

1、基本命令:

(1)ZADD:将一个带有给定分值的成员添加到有序集合里面;

(2)ZREM:如果给定成员存在于有序集合,则移除这个成员;

(3)zcard:获取有序集合包含的成员数量

复制代码
 ZCARD key

(4) ZINCRBY :对有序集合中指定成员的分值执行自增操作,为其加上指定的增量(可以是负数)。

复制代码
 ZINCRBY key increment member

(5)ZCOUNT :统计出有序集合中分值介于指定范围之内的成员数量

复制代码
ZCOUNT key min max

(6)ZSCORE :获取与给定成员相关联的分值

复制代码
ZSCORE key member

2、范围查询、交并集等:

(1)zrank/zrevrank:获得成员的升序排列 / 降序排列排名

复制代码
 ZRANK key member

(2)zrange/zrevrange

zrange sorted_set start end: 获取正序排列排名[start,end]范围内的元素
zrevrange sorted_set start end: 获取逆序排列排名[start,end]范围内的元素

复制代码
 ZREVRANGE key start stop [WITHSCORES]

(3)zrangebyscore / zrevrangebyscore:

zrangebyscore sorted_set min max: 获取分数在[min,max]内的成员

zrevrangebyscore sorted_set max min: 获取分数在[max,min]内的成员

min参数和max参数分别用于指定用户想要获取的成员的最小分值和最大分值

(4)ZREMRANGEBYRANK :从升序排列的有序集合中移除位于指定排名范围内的成员,然后返回被移除成员的数量

复制代码
 ZREMRANGEBYRANK key start stop

(5)zremrangebyscore:

复制代码
zremrangebyscore sorted_set min max

从有序集合中移除位于指定分值范围内的成员,并在移除操作执行完毕返回被移除成员的数量

(6)ZINTERSTORE :number个有序集合的并集,并集存储到destination中

复制代码
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

(7)zunionstore:number个有序集合的交集,交集存储到destination中

六、redis发布与订阅命令:

1、SUBSCRIBE :订阅给定的一个或多个频道

复制代码
SUBSCRIBE channel [channel1 channel2 ······ ]

2、UNSUBSCRIBE :Redis 客户端退订指定的一个或多个频道。如果没有频道被指定,也就是一个无参数的 UNSUBSCRIBE 命令被执行,那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。

复制代码
UNSUBSCRIBE channel [channel1 channel2 ······ ]

3、PUBLISH :向给定频道发送消息,返回值为接收到该消息的订阅者数量。

复制代码
PUBLISH channel message

4、PSUBSCRIBE :

(1)功能:订阅一个或多个符合给定模式的频道。

复制代码
PSUBSCRIBE pattern [pattern1 pattern2 ······ ]

(2)说明:这里的模式可以是全局通配符 * ,也可以使用选择匹配符 [ ]。例如,news.* 模式可以匹配所有以 news 开头的频道,像 news.music、news.blog、news.sport 等;而 news.[ie]t 模式则可以匹配news.it频道和news.et频道。

(3)demo:

5、PUNSUBSCRIBE :

(1)功能:退订一个或多个符合给定模式的频道。

复制代码
PUNSUBSCRIBE pattern [pattern1 pattern2 ······ ]

(2)说明:这里的模式可以是全局通配符 * ,也可以使用选择匹配符 [ ]。如果没有频道被指定,其效果与 SUBSCRIBE 命令相同,客户端将退订所有订阅的频道。

****************************查看发布与订阅的相关信息*************************

6、

相关推荐
NUZGNAW7 分钟前
Ubuntu 安装redis和nginx
redis·nginx·ubuntu
卓航16 小时前
Redis slowlog使用和实现
redis
波吉爱睡觉17 小时前
Redis反弹Shell
redis·web安全·网络安全
骑着蜗牛闯宇宙18 小时前
Thinkphp8 Redis队列与消息队列Queue
redis·php
是阿建吖!19 小时前
【Redis】初识Redis(定义、特征、使用场景)
数据库·redis·缓存
neoooo20 小时前
《锁得住,才能活得久》——一篇讲透 Redisson 分布式锁的技术实录
java·spring boot·redis
Villiam_AY1 天前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
GEM的左耳返1 天前
Java面试全攻略:Spring生态与微服务架构实战
spring boot·redis·spring cloud·微服务·kafka·java面试
程序员勋勋11 天前
Redis的String数据类型底层实现
数据库·redis·缓存
颜颜yan_1 天前
Python面向对象编程详解:从零开始掌握类的声明与使用
开发语言·redis·python