当前位置: 首页 > news >正文

爱做网站免费版东莞高埗网站建设

爱做网站免费版,东莞高埗网站建设,郑州模板建站定制网站,dashicon wordpress1、redis Redis是一个完全开源免费的高性能#xff08;NOSQL#xff09;的key-value数据库。它遵守BSD协议#xff0c;使用ANSI C语言编写#xff0c;并支持网络和持久化。Redis拥有极高的性能#xff0c;每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数…1、redis Redis是一个完全开源免费的高性能NOSQL的key-value数据库。它遵守BSD协议使用ANSI C语言编写并支持网络和持久化。Redis拥有极高的性能每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数据类型包括String、Hash、List、Set和Ordered Set并且所有的操作都是原子性的。此外Redis还提供了多种特性如发布/订阅、通知、key过期等。Redis采用自己实现的分离器来实现高速的读写操作效率非常高。Redis是一个简单、高效、分布式、基于内存的缓存工具通过网络连接提供Key-Value式的缓存服务。 特性 分布式缓存 内存存储 持久化 高可用架构搭配 缓存穿透、击穿、雪崩 分布式锁 队列 1.1、下载安装 1.1.1、window版本 是这样的redis的开发者没有提供redis的windows版本但是有大佬在github提供啦window版本的redis所以就先说一下哦window版的下载安装下载地址Releases · tporadowski/redis (github.com)然后解到你指定的目录就可以。 然后启动的话可以直接双击先启动redis的服务端然后是访客端。也可以使用命令的方式在当前目录下打开命令行窗口。   D:\Redisredis-server.exe redis.windows.conf 然后访客端的启动 #没有修改配置文件中的代码的启动方式 redis-cli -h localhost -p 6379 #修改后 redis-cli -h localhost -p 6379 -a 123456 端口号其实可以不指定默认也是6379这里的-a就是你修改配置文件中指定的密码想要修改密码的话可以打开配置文件。 1.1.2、linux版本 然后linux系统的安装有一定的前置条件比如拥有gcc编译程序查看当前系统是否拥有gcc编译程序使用命令gcc -v查看 。 这里已经安装了如果是centos7应该是内置的叭然后如果没有的话可以安装gcc使用以下命令。 [rootlocalhost redis]# yum -y install gcc-c 然后就是linux版本的下载和安装下载地址Download | Redis下载后上传到你的linux系统这里建议弄一个统一的目录去管理你所安装的软件 将上传的文件解压到你指定的目录 [rootlocalhost redis]# tar -zxvf redis-7.2.3.tar.gz 切换到你解压后的文件 [rootlocalhost redis]# cd redis-7.2.3/ 然后编译安装 [rootlocalhost redis-7.2.3]# make make install 查看安装后的目录   cd usr/loacl/bin redis-benchmark:性能测试工具 redis-check-aof修复有问题的aof文件 redis-check-dump修复有问题的dump.rdp文件 redis-cliredis的客户端 redis-setinelredis集群使用 redis-serverredis的服务器启动命令 修改配置文件: 这里不建议直接在原本的配置文件中修改数据我们可以在当前的文件夹下创建一个存放我们配置文件的地方然后将原本的配置文件复制一份然后进行数据的修改。 #创建目录 mkdir redisconf#复制文件 cp redis.conf redisconf 接下来就是修改配置文件了redis.conf配置文件改完后确保生效记得重启记得重启 1 默认daemonize no 改为 daemonize yes 2 默认protected-mode yes 改为 protected-mode no 3 默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址否则影响远程IP连接 4 添加redis密码 改为 requirepass 你自己设置的密码 这里要使用vim编辑器使用中的可能会用到的命令 #显示行号 set nu#快速查找 / 查找的关键字#对于查询结果的查看 使用 快捷键 n/N 两个都可以一个向上一个向下 修改过后然后就是启动测试 #这里的配置文件是要我们指定就是刚刚修改后的配置文件 [rootlocalhost redisconf]# redis-server /software/redis/redis-7.2.3/redisconf/redis.conf #查看启动情况 ps -ef|grep redis|grep -v grep#然后启动客户端 这里端口可以不指定然后ip的话我刚刚指定的是自己ip redis-cli -a 密码 -p 6379 -h 192.168.200.88#当然不指定-a 后的密码的话也可以进入界面但是执行操作的时候会显示没有权限然后可以使用 auth 密码 来进行认证#测试 ping #输出PONGok#客户端退出命令 exit#单实例关闭 redis-cli -a 密码 shutdown#多实例关闭指定端口关闭 redis-cli -p 6379 shutdown 1.1.3、卸载 卸载就很简单首先关闭服务然后就是删除/usr/local/bin 下的所有关于redis的文件 rm -rf /usr/local/bin redis* 2、redis中的数据类型 首先要明白的是redis中的数据类型指的是value对于key的话只有一个String类型先总体的了解一下 2.1、redis字符串 string是redis最基本的类型一个key对应一个value。string类型是二进制安全的意思是redis的string可以包含任何数据比如jpg图片或者序列化的对象 。一个redis中字符串value最多可以是512M。 操作命令 2.1.1、set、setnx、get SET 命令用于设置给定 key 的值。如果 key 已经存储其他值 SET 就覆写旧值且无视类型。 例子 set key value setnx命令在指定的 key 不存在时为 key 设置指定的值。如果存在则失败 例子 setnx k1 v1 #ok ​ setnx k1 v11 #integer 1 get命令返回 key 的值如果 key 不存在时返回 nil。 如果 key 不是字符串类型那么返回一个错误。 例子 get key 2.1.2、mset、mget、msetnx mset命令用于同时设置一个或多个 key-value 对就是很牛如果 key 已经存储其他值 SET 就覆写旧值且无视类型。就是每一次都是ok 例子 Mset k1 v1 k2 v2 Mset k1 v1111 k3 v3 ​ #查询 get k1 是v1111 Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面有某个 key 不存在那么这个 key 返回特殊值 nil。 例子 mget k1 k2 msetnx所有给定 key 都不存在时同时设置一个或多个 key-value 对。如果批量中有已经存在的key那么这次批量就都不成功 例子 msetnx k1 v1 k2 v2 #返回ok msetnx k1 v11 k3 v3 #返回(integer) 0 2.1.3、getrange、setrange Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)当start为0end 为-1的时候取全部的字符串。 语法: GETRANGE KEY_NAME start end 例子 SET mykey This is my test key ​ getrange 0 3 #输出This ​ getrange 0 -1 #输出This is my test key Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值覆盖的位置从偏移量 offset 开始。 语法SETRANGE KEY_NAME OFFSET VALUE 例子 SET mykey This is my test key ​ #假设想让my替换成you setrange 8 you ​get mykey This is youtest key 2.1.4、incr、incrby、incrbyfloat incr命令将 key 中储存的数字值增一。如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 INCR 操作。如果值包含错误的类型或字符串类型的值不能表示为数字那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。 语法INCR KEY_NAME 例子 set num 1 OKincr num 2incr num 3 ​ #非数值set num2 sss OKincr num2 ERR value is not an integer or out of range Incrby 命令将 key 中储存的数字加上指定的增量值。如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 INCRBY 命令。如果值包含错误的类型或字符串类型的值不能表示为数字那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。 语法 INCRBY KEY_NAME INCR_AMOUNT 例子 incrby num 50 53 ​ #不存在incrby num3 50 50 ​ #不是数值incrby num2 50 ERR value is not an integer or out of range incrbyfloat命令为 key 中所储存的值加上指定的浮点数增量值。如果 key 不存在那么 INCRBYFLOAT 会先将 key 的值设为 0 再执行加法操作。 语法INCRBYFLOAT KEY_NAME INCR_AMOUNT 例子 incrbyfloat mun4 0.1 0.1 2.1.5、decr、decrby Decr 命令将 key 中储存的数字值减一。如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 DECR 操作。如果值包含错误的类型或字符串类型的值不能表示为数字那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。 语法DECR KEY_NAME 例子 # 对存在的数字值 key 进行 DECR redis SET failure_times 10 OK redis DECR failure_times (integer) 9# 对不存在的 key 值进行 DECR redis EXISTS count (integer) 0 redis DECR count (integer) -1# 对存在但不是数值的 key 进行 DECR redis SET company YOUR_CODE_SUCKS.LLC OK redis DECR company (error) ERR value is not an integer or out of range Decrby 命令将 key 所储存的值减去指定的减量值。如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 DECRBY 操作。如果值包含错误的类型或字符串类型的值不能表示为数字那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。 语法DECRBY KEY_NAME DECREMENT_AMOUNT 例子 # 对已存在的 key 进行 DECRBYredis SET count 100 OKredis DECRBY count 20 (integer) 80# 对不存在的 key 进行DECRBYredis EXISTS pages (integer) 0redis DECRBY pages 10 (integer) -10 2.1.6、其他特殊命令 Strlen命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时返回一个错误。 语法STRLEN KEY_NAME 例子 strlen mykey 19 Redis Append 命令用于为指定的 key 追加值。如果 key 已经存在并且是一个字符串 APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在 APPEND 就简单地将给定 key 设为 value 就像执行 SET key value 一样。 语法APPEND KEY_NAME NEW_VALUE 例子 get mykey This is youtest keyappend mykey aaa 22append mykey 哈哈哈哈 34append mykey1 啊啊啊啊 12get mykey This is youtest keyaaa哈哈哈哈get mykey1 啊啊啊啊 Getset 命令用于设置指定 key 的值并返回 key 旧的值。 当 key 没有旧值时即 key 不存在时返回 nil 。 当 key 存在但不是字符串类型时返回一个错误。 语法GETSET KEY_NAME VALUE 例子 getset num 224 53 ​getset num22 224 null 2.2、redis列表 Redis列表是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边它的底层实际是个双端链表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 主要功能有push/pop等一般用在栈、队列、消息队列等场景。left、right都可以插入添加如果键不存在创建新的链表如果键已存在新增内容如果值全移除对应的键也就消失了。 它的底层实际是个双向链表对两端的操作性能很高通过索引下标的操作中间的节点性能会较差。 2.2.1、lpush、rpush、lpushx、rpushx Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时返回一个错误。执行 LPUSH 命令后返回的是列表的长度。 语法LPUSH KEY_NAME VALUE1.. VALUEN 例子: lpush num 1 2 3 4 5 6 6lrange num 0 -1 6 5 4 3 2 1 Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时返回一个错误。执行 RPUSH 操作后返回的是列表的长度。 语法RPUSH KEY_NAME VALUE1..VALUEN 例子 rpush letter a b c d e 5lrange letter 0 -1 a b c d e Redis Lpushx 将一个或多个值插入到已存在的列表头部列表不存在时操作无效。执行成功放回的是列表的长度 语法LPUSHX KEY_NAME VALUE1.. VALUEN 例子: lpushx num1 1 2 3 0keys * letter num Redis Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在操作无效。执行成功返回的是列表的长度。 语法 RPUSHX KEY_NAME VALUE1..VALUEN 例子 rpushx num1 1 2 3 0keys * letter num 2.2.2、lindex、linsert 、lset Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标以 -1 表示列表的最后一个元素 -2 表示列表的倒数第二个元素以此类推。返回列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内返回 nil 。 语法LINDEX KEY_NAME INDEX_POSITION 例子 lrange num 0 -1 6 5 4 3 2 1lindex num 0 6lindex num -1 1 Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时不执行任何操作。 当列表不存在时被视为空列表不执行任何操作。 如果 key 不是列表类型返回一个错误。如果命令执行成功返回插入操作完成之后列表的长度。 如果没有找到指定元素 返回 -1 。 如果 key 不存在或为空列表返回 0 。 语法LINSERT KEY_NAME BEFORE|AFTER EXISTING_VALUE NEW_VALUE 例子 rpush word 你 好 呀 臭 狗 屎 6LINSERT word after 呀 7lrange word 0 -1 你 好 呀臭 狗 屎LINSERT word before 臭 臭 8lrange word 0 -1 你 好 呀臭 臭 狗 屎 Redis Lset 通过索引来设置元素的值。当索引参数超出范围或对一个空列表进行 LSET 时返回一个错误。操作成功返回 ok 语法 LSET KEY_NAME INDEX VALUE 语法 lrange word 0 -1 你 好 呀臭 臭 狗 屎lset word 7 狗 OKlrange word 0 -1 你 好 呀臭 臭 狗 狗 2.2.3、lpop、rpop、ltrim、lrem、rpoplpush Redis Lpop 命令用于移除并返回列表的第一个元素。 当列表 key 不存在时返回 nil 。 语法LPOP KEY_NAME 例子 lrange num 0 -1 5 4 3 2 1lpop num 5lpop num 4lrange num 0 -1 3 2 1 Redis Rpop 命令用于移除并返回列表的最后一个元素。当列表不存在时返回 nil 。 语法RPOP KEY_NAME 例子 rpop letter elrange letter 0 -1 a b c d Redis Ltrim 对一个列表进行修剪(trim)就是说让列表只保留指定区间内的元素不在指定区间之内的元素都将被删除。命令执行成功时返回 ok 。下标 0 表示列表的第一个元素以 1 表示列表的第二个元素以此类推。 你也可以使用负数下标以 -1 表示列表的最后一个元素 -2 表示列表的倒数第二个元素以此类推。 语法LTRIM KEY_NAME START STOP 例子 lrange word 0 -1 你 好 呀臭 臭 狗 狗ltrim word 0 3 OKlrange word 0 -1 你 好 呀Redis Lrem 根据参数 COUNT 的值移除列表中与参数 VALUE 相等的元素。 COUNT 的值可以是以下几种 count 0 : 从表头开始向表尾搜索移除与 VALUE 相等的元素数量为 COUNT 。 count 0 : 从表尾开始向表头搜索移除与 VALUE 相等的元素数量为 COUNT 的绝对值。 count 0 : 移除表中所有与 VALUE 相等的值。 语法: LREM KEY_NAME COUNT VALUE 例子 rpush list 1 1 1 1 2 2 3 3 3 4 5 6 6 6 1 1 1 3 3 3 4 4 ​ #前lrem list 2 1 2Lrange list 0 -1 1 1 2 2 3 3 3 4 5 6 6 6 1 1 1 3 3 3 4 4 #后lrem list -2 1 2Lrange list 0 -1 1 1 2 2 3 3 3 4 5 6 6 6 1 3 3 3 4 4 ​ #所有lrem list 0 1 3Lrange list 0 -1 2 2 3 3 3 4 5 6 6 6 3 3 3 4 4 Redis Rpoplpush 命令用于移除列表的最后一个元素并将该元素添加到另一个列表并返回。返回值是被弹出的元素。 语法RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME 例子 rpush list 1 2 3 4 5 5rpush list1 6 7 8 9 4lrange list 0 -1 1 2 3 4 5lrange list1 0 -1 6 7 8 9rpopLpush list list1 5lrange list 0 -1 1 2 3 4lrange list1 0 -1 5 6 7 8 9 2.2.4、其他的操作 Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在则 key 被解释为一个空列表返回 0 。 如果 key 不是列表类型返回一个错误。 语法LLEN KEY_NAME 例子 llen list 4 2.3、redis哈希表 Redis hash 是一个 string 类型的 field字段 和 value值 的映射表hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对40多亿。 2.3.1、hset、hget、hmset、hmget、hgetall、hsetnx Redis Hset 命令用于为哈希表中的字段赋值 。如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中旧值将被覆盖。 语法HSET KEY_NAME FIELD VALUE Redis Hget 命令用于返回哈希表中指定字段的值返回给定字段的值。如果给定的字段或 key 不存在时返回 nil 。 语法HGET KEY_NAME FIELD_NAME 例子 hset user name 张三 1hset user name 李四 0hget user name 李四hget user age null Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在会创建一个空哈希表并执行 HMSET 操作。 语法HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN Redis Hmget 命令用于返回哈希表中一个或多个给定字段的值。如果指定的字段不存在于哈希表那么返回一个 nil 值。返回的是一个包含多个给定字段关联值的表表值的排列顺序和指定字段的请求顺序一样。 语法 HMGET KEY_NAME FIELD1...FIELDN 例子 hmset user name 王五 age 25 sex 男 OKhmget user name age sex 王五 25 男 Redis Hgetall 命令用于返回哈希表中所有的字段和值。在返回值里紧跟每个字段名(field name)之后是字段的值(value)所以返回值的长度是哈希表大小的两倍。 若 key 不存在返回空列表。 语法HGETALL KEY_NAME 例子 hgetall user name 王五 age 25 sex 男hgetall student Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值 。如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中操作无效。如果 key 不存在一个新哈希表被创建并执行 HSETNX 命令。设置成功返回 1 。 如果给定字段已经存在且没有操作被执行返回 0 。 语法HSETNX KEY_NAME FIELD VALUE 例子 #key不存在hsetnx student name 小狗 1 #key存在但是字段hsetnx student name 大狗 0 #key存在但是字段不存在hsetnx student age 23 1hgetall student name 小狗 age 23 2.3.2、hexists、hlen、hvals、hkeys、hdel Redis Hexists 命令用于查看哈希表的指定字段是否存在。如果哈希表含有给定字段返回 1 。 如果哈希表不含有给定字段或 key 不存在返回 0 。 语法HEXISTS KEY_NAME FIELD_NAME 例子 hexists user email 0hexists user name 1 Redis Hlen 命令用于获取哈希表中字段的数量。哈希表中字段的数量。 当 key 不存在时返回 0 。 语法HLEN KEY_NAME 例子 hlen goods 0hlen user 3 Redis Hvals 命令返回哈希表所有字段的值一个包含哈希表中所有值的表。 当 key 不存在时返回一个空表。 语法HVALS KEY_NAME 例子 hvals user 王五 25 男 Redis Hkeys 命令用于获取哈希表中的所有字段名。包含哈希表中所有字段的列表。 当 key 不存在时返回一个空列表。 语法HKEYS KEY_NAME 例子 hkeys user name age sex Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段不存在的字段将被忽略。被成功删除字段的数量不包括被忽略的字段。 语法HDEL KEY_NAME FIELD1.. FIELDN 例子 hmset letter 1 啊 2 喔 3 额 OKhdel letter 2 3 2hgetall letter 1 啊 2.3.3、hincrby、hincrbyfloat Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。增量也可以为负数相当于对指定字段进行减法操作。如果哈希表的 key 不存在一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在那么在执行命令前字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。 语法HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER 例子 hmset num a 1 b 2 c 3 d 4 OKhincrby num e 2 2hgetall num a 1 b 2 c 3 d 4 e 2hincrby num a 2 3hset num f 你好 1hincrby num f 2 ERR hash value is not an integer Redis Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在那么在执行命令前字段的值被初始化为 0 。执行 Hincrbyfloat 命令之后哈希表中字段的值。 语法HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER 例子 hmset float a 1.2 b 2 OKhincrbyfloat float 1 0.1 0.1hincrbyfloat float a 0.1 1.3hincrbyfloat float b 0.1 2.1 2.4、redis集合 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据集合对象的编码可以是 intset 或者 hashtable。Redis 中Set集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。 2.4.1、sadd、spop、srem、scard、smove Redis Sadd 命令将一个或多个成员元素加入到集合中已经存在于集合的成员元素将被忽略。假如集合 key 不存在则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时返回一个错误。自动去重 语法SADD KEY_NAME VALUE1..VALUEN 例子 sadd set 1 1 1 2 2 3 4 5 6 6smembers set 1 2 3 4 5 6 Redis Spop 命令用于移除并返回集合中的一个随机元素。被移除的随机元素。 当集合不存在或是空集时返回 nil 。 语法SPOP KEY 例子 smembers set 1 2 3 4 5 6spop set 5smembers set 1 2 3 4 6spop set1 null Redis Srem 命令用于移除集合中的一个或多个成员元素不存在的成员元素会被忽略。当 key 不是集合类型返回一个错误。 语法SREM KEY MEMBER1..MEMBERN 例子 srem set 1 2 2smembers set 3 4 6 Redis Scard 命令返回集合中元素的数量。集合的数量。 当集合 key 不存在时返回 0 。 语法 SCARD KEY_NAME 例子 scard set 3scard set1 0 Redis Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。SMOVE 是原子性操作。 如果 source 集合不存在或不包含指定的 member 元素则 SMOVE 命令不执行任何操作仅返回 0 。否则 member 元素从 source 集合中被移除并添加到 destination 集合中去。 当 destination 集合已经包含 member 元素时 SMOVE 命令只是简单地将 source 集合中的 member 元素删除。 当 source 或 destination 不是集合类型时返回一个错误。 语法 SMOVE SOURCE DESTINATION MEMBER 例子 smove set set1 3 1smembers set1 3smove set set1 5 0smembers set1 3 2.4.2、smembers、srandmember、sismembers Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。返回集合中的所有成员。 语法SMEMBERS KEY 例子 smembers set 1 2 3 4 5 6 Redis Srandmember 命令用于返回集合中的一个随机元素。从 Redis 2.6 版本开始 Srandmember 命令接受可选的 count 参数 如果 count 为正数且小于集合基数那么命令返回一个包含 count 个元素的数组数组中的元素各不相同。如果 count 大于等于集合基数那么返回整个集合。 如果 count 为负数那么命令返回一个数组数组中的元素可能会重复出现多次而数组的长度为 count 的绝对值。 该操作和 SPOP 相似但 SPOP 将随机元素从集合中移除并返回而 Srandmember 则仅仅返回随机元素而不对集合进行任何改动。 语法SRANDMEMBER KEY [count] 例子 srandmember set -1 4srandmember set -2 2 1srandmember set 2 1 4srandmember set 5 1 2 3 4 6 Redis Sismember 命令判断成员元素是否是集合的成员。如果成员元素是集合的成员返回 1 。 如果成员元素不是集合的成员或 key 不存在返回 0 。 语法SISMEMBER KEY VALUE 例子 sismember set 5 0sismember set 1 1 2.4.3、sdiff、sdffstore Redis Sdiff 命令返回给定集合之间的差集。不存在的集合 key 将视为空集包含差集成员的列表。大概的意思是判断集合之间我有你没有的。有点像对对碰对局结束后还剩什么 语法SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN 例子 smembers set1 a b c d 1 2 3 5 6smembers set2 c d 5 6 7 8 e fsdiff set1 set2 a b 1 2 3sdiff set2 set1 7 8 e f Redis Sdiffstore 命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在则会被覆盖。返回结果集中的元素数量。 语法SDIFFSTORE DESTINATION_KEY KEY1..KEYN 例子 sdiffstore set set1 set2 5smembers set a b 1 2 3 2.4.4、sunion、sunionstore Redis Sunion 命令返回给定集合的并集。不存在的集合 key 被视为空集返回值并集成员的列表。 语法SUNION KEY KEY1..KEYN 例子 sunion set1 set2 a b c d 1 2 3 5 6 7 8 e f Redis Sunionstore 命令将给定集合的并集存储在指定的集合 destination 中。返回结果集中的元素数量。 语法 SUNIONSTORE DESTINATION KEY KEY1..KEYN 例子 sunionstore set set1 set2 13smembers set a b c d 1 2 3 5 6 7 8 e f 2.4.5、sinter、sinterstore Redis Sinter 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时结果也为空集(根据集合运算定律)。返回值交集成员的列表。 语法SINTER KEY KEY1..KEYN 例子 sinter set1 set2 c d 5 6 Redis Sinterstore 命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在则将其覆盖。返回交集成员的列表。 语法SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN 例子 sinterstore set set1 set2 4smembers set c d 5 6 2.5、redis有序集合 Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。zset集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1。 2.5.1、zadd、zrem、zcard、zcount Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员那么更新这个成员的分数值并通过重新插入这个成员元素来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。如果有序集合 key 不存在则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时返回一个错误。返回值是被成功添加的新成员的数量不包括那些被更新的、已经存在的成员。 语法ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN 例子 zadd zset 99 张三 80 李四 100 王五 60 赵六 4zadd zset 77 王五 0zrange zset 0 -1 withscores 赵六 60 王五 77 李四 80 张三 99 Redis Zrem 命令用于移除有序集中的一个或多个成员不存在的成员将被忽略。当 key 存在但不是有序集类型时返回一个错误。 语法ZREM KEY 例子 zrange zset 0 -1 withscores 赵六 60 王五 77zrem zset 王五 1zrange zset 0 -1 withscores 赵六 60 Redis Zcard 命令用于计算集合中元素的数量。当 key 存在且是有序集类型时返回有序集的基数。 当 key 不存在时返回 0 。 语法ZCARD KEY 例子 zadd zset 99 张三 80 李四 100 王五 60 赵六 4zcard zset 4 Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。返回值分数值在 min 和 max 之间的成员的数量。 语法 ZCOUNT key min max 例子 zadd zset 99 张三 80 李四 100 王五 60 赵六 4zcard zset 4zcount zset 80 100 3 2.5.2、zrangezrevrange Redis Zrange 返回有序集中指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列。返回指定区间内带有分数值(可选)的有序集成员的列表。 下标参数 start 和 stop 都以 0 为底也就是说以 0 表示有序集第一个成员以 1 表示有序集第二个成员以此类推。你也可以使用负数下标以 -1 表示最后一个成员 -2 表示倒数第二个成员以此类推。 语法ZRANGE key start stop [WITHSCORES] 例子 zrange zset 0 -1 withscores 赵六 60 王五 77 李四 80 张三 99 Redis Zrevrange 命令返回有序集中指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。 语法ZREVRANGE key start stop [WITHSCORES] 例子 zrevrange zset 0 -1 withscores 张三 99 李四 80 王五 77 赵六 60 2.5.3、zrangebyscorezrevrangebysorce、zremrangebysorce Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的不需要额外的计算)。默认情况下区间的取值使用闭区间 (小于等于或大于等于)你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。 举个例子 ZRANGEBYSCORE zset (1 5 返回所有符合条件 1 score 5 的成员而 ZRANGEBYSCORE zset (5 (10 则返回所有符合条件 5 score 10 的成员。 语法 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 例子 zrangebyscore zset 80 100 withscores 李四 80 张三 99 Redis Zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。 语法 ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] 例子 zrevrangebyscore zset 80 100 withscores 张三 99 李四 80 Redis Zremrangebyscore 命令用于移除有序集中指定分数score区间内的所有成员。返回值是被移除成员的数量。 语法 ZREMRANGEBYSCORE key min max 例子 zremrangebyscore zset 80 100 2 2.5.4、zincrby、zscore Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment可以通过传递一个负数值 increment 让分数减去相应的值比如 ZINCRBY key -5 member 就是让 member 的 score 值减去 5 。 当 key 不存在或分数不是 key 的成员时 ZINCRBY key increment member 等同于 ZADD key increment member 。 当 key 不是有序集类型时返回一个错误。 分数值可以是整数值或双精度浮点数。 语法 ZINCRBY key increment member 例子 zincrby zset 10 赵六 70zincrby zset 1.2 赵六 71.2zincrby zset 88 孙琪 88zrange zset 0 -1 withscores 赵六 71.2 李四 80 孙琪 88 张三 99 王五 100 Redis Zscore 命令返回有序集中成员的分数值以字符串形式表示。 如果成员元素不是有序集 key 的成员或 key 不存在返回 nil 。 语法 ZSCORE key member 例子 zscore zset 赵六 71.2 2.5.5、zrank、zrevrank从零开始的排名 Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。如果成员是有序集 key 的成员返回 member 的排名。 如果成员不是有序集 key 的成员返回 nil 语法 ZRANK key member Redis Zrevrank 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。 排名以 0 为底也就是说 分数值最大的成员排名为 0 。 语法ZREVRANK key member 例子 ​zrange zset 0 -1 withscores 赵六 71.2 李四 80 孙琪 88 张三 99 王五 100zrank zset 赵六 0zrank zset 张三 3zrank zset 赵六 0zrevrank zset 张三 1zrevrank zset 赵六 4 2.6、redis地理空间 Redis GEO 主要用于存储地理位置信息并对存储的信息进行操作包括 添加地理位置的坐标。 获取地理位置的坐标。 计算两个位置之间的距离。 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合 2.6.1、geoadd、geopos Redis GEOADD 命令将指定的地理空间位置纬度、经度、名称添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。 该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的区域面积可以很接近极点但是不能索引。具体的限制由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下 有效的经度从-180度到180度。 有效的纬度从-85.05112878度到85.05112878度。 当坐标位置超出上述指定范围时该命令将会返回一个错误。 语法GEOADD KEY 经度 纬度 位置...... 例子: GEOADD city 116.403963 39.915119 天安门 116.403414 39.924091 故宫 116.024067 40.362639 长城 3zrange city 0 -1 天安门 故宫 长城 geopos命令是从key里返回所有给定位置元素的位置经度和纬度。给定一个sorted set表示的空间索引密集使用 geoadd 命令它以获得指定成员的坐标往往是有益的。当空间索引填充通过 geoadd 的坐标转换成一个52位Geohash所以返回的坐标可能不完全以添加元素的但小的错误可能会出台。 因为 GEOPOS 命令接受可变数量的位置元素作为输入 所以即使用户只给定了一个位置元素 命令也会返回数组回复。 语法: GEOPOS KEY ADDRESS 例子: GEOPOS city 天安门 故宫 长城 116.40396326780319214 39.91511970338637383 116.40341609716415405 39.92409008156928252 116.02406591176986694 40.36263993239462167 2.6.2、geohash 返回一个或多个位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技术使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同编码的编码也不同于标准。此命令返回一个标准的Geohash在维基百科和geohash.org网站都有相关描述。 Geohash字符串属性该命令将返回11个字符的Geohash字符串所以没有精度Geohash损失相比使用内部52位表示。返回的geohashes具有以下特性 他们可以缩短从右边的字符。它将失去精度但仍将指向同一地区。 它可以在 geohash.org 网站使用网址 http://geohash.org/geohash-string。查询例子Geohash - geohash.org/sqdtr74hyu0. 与类似的前缀字符串是附近但相反的是不正确的这是可能的用不同的前缀字符串附近。 语法geohash key address... 例子: geohash city 天安门 wx4g0f6f2v0 2.6.3、geodist、georadius、georadiusbymember Redis GEODIST 命令 - 返回两个给定位置之间的距离如果两个位置之间的其中一个不存在 那么命令返回空值。 指定单位的参数 unit 必须是以下单位的其中一个 m 表示单位为米。 km 表示单位为千米。 mi 表示单位为英里。 ft 表示单位为英尺。 如果用户没有显式地指定单位参数 那么 GEODIST 默认使用米作为单位。GEODIST 命令在计算距离时会假设地球为完美的球形 在极限情况下 这一假设最大会造成 0.5% 的误差。 语法GEODIST KEY ADDRESS1 ADDRESS2 例子: geodist city 天安门 长城 59338.9814 Redis GEORADIUS 命令 以给定的经纬度为中心 返回键包含的位置元素当中 与中心的距离不超过给定最大距离的所有位置元素。范围可以使用以下其中一个单位(就是计算出来当前坐标某一范围内的目标) m 表示单位为米。 km 表示单位为千米。 mi 表示单位为英里。 ft 表示单位为英尺。 在给定以下可选项时 命令会返回额外的信息 WITHDIST: 在返回位置元素的同时 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 WITHCOORD: 将位置元素的经度和维度也一并返回。 WITHHASH: 以 52 位有符号整数的形式 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试 实际中的作用并不大。 命令默认返回未排序的位置元素。 通过以下两个参数 用户可以指定被返回位置元素的排序方式 ASC: 根据中心的位置 按照从近到远的方式返回位置元素。 DESC: 根据中心的位置 按照从远到近的方式返回位置元素。 在默认情况下 GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT count 选项去获取前 N 个匹配元素 但是因为命令在内部可能会需要对所有被匹配的元素进行处理 所以在对一个非常大的区域进行搜索时 即使只使用 COUNT 选项去获取少量元素 命令的执行速度也可能会非常慢。 但是从另一方面来说 使用 COUNT 选项去减少需要返回的元素数量 对于减少带宽来说仍然是非常有用的。 语法 GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc GEORADIUS key 经度 维度 距离 距离单位 返回距离 返回经纬度  放回hash码  count 数量 排序方式 然后呐还有一个命令不用使用经纬度只需要使用地点的名字就可以 Redis GEORADIUSBYMEMBER 命令 - 找出位于指定范围内的元素中心点是由给定的位置元素决定、这个命令和 GEORADIUS 命令一样 都可以找出位于指定范围内的元素 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的 而不是像 GEORADIUS 那样 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。 2.7、redis基数统计 HyperLogLog 是用来做基数统计的算法HyperLogLog 的优点是在输入元素的数量或者体积非常非常大时计算基数所需的空间总是固定且是很小的。在 Redis 里面每个 HyperLogLog 键只需要花费 12 KB 内存就可以计算接近 2^64 个不同元素的基数。这和计算基数时元素越多耗费内存就越多的集合形成鲜明对比。但是因为 HyperLogLog 只会根据输入元素来计算基数而不会储存输入元素本身所以 HyperLogLog 不能像集合那样返回输入的各个元素。 2.7.1、pfadd、pgmerge、pgcount Redis Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。 返回整型如果至少有个元素被添加返回 1 否则返回 0。 语法 PFADD key element [element ...] 例子 PFADD mykey a b c d e f g h i j 1 a b 2 1pfcount mykey 12 Redis Pfcount 命令返回给定 HyperLogLog 的基数估算值。返回值整数返回给定 HyperLogLog 的基数值如果多个 HyperLogLog 则返回基数估值之和。 语法 PFCOUNT key [key ...] 例子 PFADD mykey a b c d e f g h i j 1 a b 2 1pfcount mykey 12PFADD hll foo bar zap 1pfcount mykey hll 15 Redis Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog 合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。 语法 PFMERGE destkey sourcekey [sourcekey ...] 例子 redis 127.0.0.1:6379 PFADD hll1 foo bar zap a (integer) 1 redis 127.0.0.1:6379 PFADD hll2 a b c foo (integer) 1 redis 127.0.0.1:6379 PFMERGE hll3 hll1 hll2 OK redis 127.0.0.1:6379 PFCOUNT hll3 (integer) 6 redis 2.8、redis位图 由0和1状态表现的二进制位的bit数组 2.8.1、setbit、getbit、strlen setbit是用于给指定key的值的第offset设置为value大概的意思就是我想设置某一个二进制数然后我的offset代表的就是我设置的位数然后value只能是0或者1。如果该位已经有值则进行覆盖。 语法SETBIT key offset value  例子 setbit day 1 0 0setbit day 2 1 0setbit day 3 1 0setbit day 4 0 0setbit day 5 1 0 getbit用来获取指定key的第offset位如果没有获取没有设置的位取出的默认值是 语法GETBIT key offset getbit day 3 1getbit day 6 0 strlen命令可以用来统计指定key所占的字节数是少,统计的不是字符串长度而是占据几个字节超过8位后自己按照8位一组一byte再扩容。 语法STRLEN key 例子: strlen day 1setbit day 9 1 0strlen day 2 2.8.、bitcount、bitop bitcount命令是用来返回指定key中[start,end]中为1的数量 语法BITCOUNT key [start end [BYTE | BIT]] 例子 bitcount day 6 bitop命令可以对不同的二进制存储数据进行位运算(AND、OR、NOT 、XOR) 语法BITOP AND | OR | XOR | NOT destkey key [key ...] 例子 setbit bit1 1 1 0setbit bit1 2 1 0setbit bit1 3 0 0setbit bit2 1 1 0setbit bit2 2 1 0setbit bit2 3 0 0setbit bit2 4 0 0bitop and bit3 bit1 bit2 1getbit bit3 1 1getbit bit3 2 1getbit bit3 3 0getbit bit3 4 0 2.9、redis位域 通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位)它会执行一系列操作并返回一个响应数组这个数组中的元素对应参数列表中的相应操作的执行结果。说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。 2.10、redis流 Redis Stream 是 Redis 5.0 版本新增加的数据结构。Redis Stream 主要用于消息队列MQMessage QueueRedis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能但它有个缺点就是消息无法持久化如果出现网络断开、Redis 宕机等消息就会被丢弃。简单来说发布订阅 (pub/sub) 可以分发消息但无法记录历史消息。而 Redis Stream 提供了消息的持久化和主备复制功能可以让任何客户端访问任何时刻的数据并且能记住每一个客户端的访问位置还能保证消息不丢失。 它的功能实现消息队列它支持消息的持久化、支持自动生成全局唯一 ID、支持ack确认消息的模式、支持消费组模式等让消息队列更加的稳定和可靠。 2.10.1、stream流的结构 一个消息链表将所有加入的消息都串起来每个消息都有一个唯一的 ID 和对应的内容 序号类型描述1Message Content消息内容2Consumer group消费组通过XGROUP CREATE 命令创建同一个消费组可以有多个消费者3Last_delivered_id游标每个消费组会有个游标 last_delivered_id任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。4Consumer消费者消费组中的消费者5Pending_ids消费者会有一个状态变量用于记录被当前消费已读取但未ack的消息Id如果客户端没有ack这个变量里面的消息ID会越来越多一旦某个消息被ack它就开始减少。这个pending_ids变量在Redis官方被称之为 PEL(Pending Entries List)记录了当前已经被客户端读取的消息但是还没有 ack (Acknowledge character确认字符它用来确保客户端至少消费了消息一次而不会在网络传输的中途丢失了没处理 在Stream中的特殊的符号 符号作用- 最大和最小可能出现的id$$表示消费新的消息当前流中最大的id可用于将来要到来的消息用于XREADGROUP命令表示迄今为止还没有发送给组中使用者的消息会更新消费者组的最后id*用于XADD命令让系统自动生成id 2.10.2、队列相关命令 指令名称指令作用XADD添加消息到队列的末尾XTRIM限制Stream长度如果超过长度的话会进行截取XDEL删除消息XLEN获取Stream中的消息长度XRANGE获取消息队列(可以指定范围)id从小到大忽略删除的消息XREVRANGE和XRANGRE的作用相同但是消息的id是从大到小XREAD获取消息(阻塞/非阻塞)返回大于指定id的消息 XADD 用于向Stream 队列中添加消息如果指定的Stream 队列不存在则该命令执行时会新建一个Stream 队列。* 号表示服务器自动生成 MessageIDXADD是将消息添加到队列的末尾然后要求消息的ID要比上一个的ID大如果ID小于上一个会报错然后使用号的话是ID的自动生成。 语法XADD key ID field string [field string ...] 例子: XADD stream * k1 v1 k2 v2 k3 v3 k4 v4 1704112841027-0XADD stream * k5 v5 1704113004931-0XADD stream * k6 v6 1704113012427-0 其中生成的id由两部分组成前一段是当前的时间戳后一段是在该毫秒生成的第几条消息。然后消息内容是类似hash结构的key-value的形式存在。 XRANGE获取消息队列(可以指定范围)id从小到大忽略删除的消息。 语法XRANGE key start end [COUNT count] 例子 XRANGE stream - 1704113632758-0 k1 v1 1704113644774-0 k2 v2 1704113653286-0 k3 v3 1704113663350-0 k4 v4 1704113670998-0 k5 v5 1704113677046-0 k6 v6 1704113685190-0 k7 v7 1704113691382-0 k8 v8XRANGE stream - count 2 1704113632758-0 k1 v1 1704113644774-0 k2 v2 XREVRANGE和XRANGRE的作用相同但是消息的id是从大到小 语法XREVRANGE key end start [COUNT count] 例子 XREVRANGE stream - 1704113691382-0 k8 v8 1704113685190-0 k7 v7 1704113677046-0 k6 v6 1704113670998-0 k5 v5 1704113663350-0 k4 v4 1704113653286-0 k3 v3 1704113644774-0 k2 v2 1704113632758-0 k1 v1XREVRANGE stream - count 2 1704113691382-0 k8 v8 1704113685190-0 k7 v7 XDEL可以用于删除消息通过主键也就是我们使用系统生成的id,可以删除一个或者多个 语法: XDEL key ID [ID ...] 例子 xdel stream 1704113691382-0 1704113685190-0 2XREVRANGE stream - 1704113677046-0 k6 v6 1704113670998-0 k5 v5 1704113663350-0 k4 v4 1704113653286-0 k3 v3 1704113644774-0 k2 v2 1704113632758-0 k1 v1 XLEN 获取Stream中的消息长度 语法: XLEN key 例子 XLEN stream 6 XTRIM 限制Stream长度如果超过长度的话会进行截取MAXLEN允许的最大长度对流进行修剪限制长度MINID允许的最小id从某个id值开始比该id值小的将会被抛弃。 语法XTRIM key MAXLEN|MINID [~] count 例子 长度限制超出的从最新的开始数长度超过的话就删除XTRIM stream MAXLEN 4 2XREVRANGE stream - 1704113677046-0 k6 v6 1704113670998-0 k5 v5 1704113663350-0 k4 v4 1704113653286-0 k3 v3 ​ 按照最小截取XTRIM stream minid 1704113670998-0 2XREVRANGE stream - 1704113677046-0 k6 v6 1704113670998-0 k5 v5 XREAD 用于获取消息(阻塞/非阻塞)智慧返回大于指定id的消息count表示读多少条消息block表示是否为阻塞方式读取消息默认不阻塞如果milliseconds设置为表示永远阻塞。 语法 XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...] 例子非阻塞 $代表特殊ID表示以当前Stream已经存储的最大的ID作为最后一个ID当前Stream中不存在大于当前最大ID的消息因此此时返回nilxread count 3 streams stream $ null ​ 0-0代表从最小的ID开始获取Stream中的消息当不指定count将会返回Stream中的所有消息注意也可以使用000/000也都是可以的……xread count 3 streams stream 0-0 stream 1704115717430-0 k1 v1 1704115722702-0 k2 v2 1704115730303-0 k3 v3xread count 3 streams stream 000 stream 1704115717430-0 k1 v1 1704115722702-0 k2 v2 1704115730303-0 k3 v3 例子阻塞 请redis-cli启动第2个客户端连接上来 xread count 1 block 0 streams stream $ #一个客户端执行后,然后一直没有结果然后再另一个客户端上执行添加后,原本阻塞的客户端立即输出! 2.10.3、消费相关指令 指令名称指令作用XGROUP CREATE创建消费者组XREADGROUP FROUP读取消费者组中的消息XACKack消息消息被标记为“已处理”XGROUP SERID设置消费者组最后递送消息的idXGROUP DELCONSUMER删除消费者组XPENDING打印待处理消息的详细信息XCLAIM转移消息的归属权长期违背处理无法处理的消息转交给其他的消费者组进行处理XINFO打印Stream/Consumer/Group的详细信息XINFO GROUPS打印消费者组的详情信息XINFO STREAM打印Stream的详情信息 XGROUP CREATE 创建消费者组创建消费者组的时候必须指定 ID, ID 为 0 表示从头开始消费为 $ 表示只消费新的消息队尾新来。 $表示从Stream尾部开始消费 0表示从Stream头部开始消费 语法XGROUP CREATE key groupname id|$ [MKSTREAM] 例子 xgroup create stream groupA $ OKxgroup create stream groupB 0 OK XREADGROUP FROUP 读取消费者组中的消息“”表示从第一条尚未被消费的消息开始读取他有一个特点就stream中的消息一旦被消费者读取就不能被消费组中的其他消费者读取也就是说同一个消费组中的消费者不能读取同一条消息但是不同组的消费者可以读取已经被其他组读取过的消息。 消费组设置的目的是让组内的多个消费者共同分担读取消息所以我们通常会让每个消费者读取部分消息从而实现消息读取负载在多个消费者间是均衡分布的 语法XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...] 例子 xreadgroup group groupB consumer1 streams stream stream 1704159696960-0 k1 v1 1704159714408-0 k2 v2 1704159720488-0 k3 v3 1704159725023-0 k4 v4 1704159729560-0 k5 v5 1704159735528-0 k6 v6 1704159743280-0 k7 v7 ​xreadgroup group groupB consumer2 streams stream null ​ ​xreadgroup group groupc consumer1 count 3 streams stream stream 1704159696960-0 k1 v1 1704159714408-0 k2 v2 1704159720488-0 k3 v3 ​ #也可以查询某一组的消费者消费的消息的具体信息XPENDING stream groupc - 10 consumer1 1704159696960-0 consumer1 6145581 1 1704159714408-0 consumer1 6145581 1 1704159720488-0 consumer1 6145581 1 1问题基于 Stream 实现的消息队列如何保证消费者在发生故障或宕机再次重启后仍然可以读取未处理完的消息2Streams 会自动使用内部队列也称为 PENDING List留存消费组里每个消费者读取的消息保底措施直到消费者使用 XACK 命令通知 Streams“消息已经处理完成”。3消费确认增加了消息的可靠性一般在业务处理完成之后需要执行 XACK 命令确认消息已经被消费完成 XPENDING 查询每个消费组内所有消费者「已读取、但尚未确认」的消息。 语法XPENDING key group [start end count] [consumer] 例子: XPENDING stream groupB 7 #最小的id 1704159696960-0 #最大的id 1704159743280-0 #读取信息的 consumer1 #读了多少 7 ​XPENDING stream groupc 6 1704159696960-0 1704159735528-0 consumer1 3 consumer2 3 XACK ack消息消息被标记为“已处理” 语法Xack key group id [id ...] 例子: #初次查询XPENDING stream groupc - 10 consumer1 1704159696960-0 consumer1 6145581 1 1704159714408-0 consumer1 6145581 1 1704159720488-0 consumer1 6145581 1 ​ #确认消息xack stream groupc 1704159696960-0 1 ​ #再次查询XPENDING stream groupc - 10 consumer1 1704159714408-0 consumer1 6630575 1 1704159720488-0 consumer1 6630575 1 3、redis的操作命令 3.1、通用操作命令 命令描述keys *查询所有的keytype key返回 key 所储存的值的类型。exist key检查给定 key 是否存在del key该命令用于在 key 存在的时候删除 keyunlink key非阻塞式删除只是将key从keyspace元数据中删除真正的删除会在异步中菜操作expire key为给定 key 设置过期时间ttl key以秒为单位返回给定 key 的剩余生存时间-1代表永不过期-2代表已过期move key dbindex 0-15将当前的数据库中的key移动到指定的数据库中select dbindex切换数据库0-15默认是0dbsize查看当前数据库中key的数量flushdb清空当前库flushall清空全部库help 类型帮助命令用于查看命令的使用方式
http://www.hkea.cn/news/14384583/

相关文章:

  • 网站 例一级a做爰片免播放器网站
  • 鄂州做网站的公司个人主页介绍文案
  • 网站建设和运维单位责任网站未备案会怎么样
  • 网站飘动国内做网站的公司有哪些
  • 网站销售系统怎么做石家庄模板建站代理
  • 梧州seo深圳网页设计公司搜行者seo
  • 网站被百度惩罚怎么办自己搭建网站怎么搭建
  • 做国内贸易的网站江都微信网站建设
  • .asp 网站中学生网站源码
  • 专业建设网站外包做视频网站需要什么证件
  • 保定免费网站建站模板广东民航机场建设有限公司网站
  • 网站怎么才能吸引人百度怎样可以搜到自己的网站
  • vs做网站开发吗北京网站建设 shwl
  • 网站集约化建设规范商务网站建设简答题及答案
  • 公众出行服务网站建设wordpress取自定义字段
  • 张家口住房和城乡建设厅网站廊坊哪里做网站
  • 网站开发维护计入什么费用软件开发包含网站开发吗
  • 网站主页 优帮云传奇网站建设
  • 网站 中文版与英文版的后台有什么不同网站开发和设计实训
  • 替人做赌彩网站被判刑网站开发公司怎么查
  • 注册了网站之后怎么设计做网站都要掌握什么软件
  • 免费做网站空间wordpress手机端适配
  • 怎么建设QQ网站电子商务网站建设课程性质
  • 中企动力做的网站被百度屏蔽长沙如何优化排名
  • 寿光专业做网站百色建设厅网站
  • 做珠宝首饰网站深圳网站定制公司
  • 郑州做音响网站的公司把网站扒下来以后怎么做
  • 怎么让网站页面自适应利用淘宝联盟做网站
  • 网站的类型和特色虚拟展馆官方网站建设
  • 品牌网站开发设计wordpress后台默认登录地址