Redis基本命令及常识
在真正学习Redis之前,得先了解一下Redis的一些基本命令,这样才可以更快的知道Redis的命令用法和大概的了解
①:连接服务端:
./redis-cli -h 127.0.0.1 -p 6379
②:Redis默认是有16个数据库的(0~15)通过select命令来切换数据库
select 1 -- 连接到第 2 个数据库 0开始计算
③:往数据库设置string类型值
set name zhangsan
④:查看数据库中key的数量
dbsize
⑤:查看刚才添加的key的值
get name
⑥:查看所有key的值
keys *
⑦:清空全部数据库和清空当前库
flushall(清空全部库) flushdb(清空当前库)
⑧:删除添加的name key键
del name
Key值命令
key值命令可以说是一些类型的公共命令,比如有设置定时时间,排序,数据迁移等等
语法:keys pattern
说明:用来匹配和查看指定的key
pattern:查询条件
h?llo 匹配 hello, hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo, 不匹配如 hillo
h[^e]llo 匹配 hallo, hbllo, ... 不匹配如 hello
h[a-e]llo 匹配 hallo 和 hbllo, [a-e]说明是a~e这个范围 ,如hcllo也可以匹配
若想匹配如转义字符的如下,就需要使用 \ 转义你想匹配的特殊字符。
set na\me zhangsan
keys na[\\]me
语法:del key [key ...]
说明:删除指定的key
del name age address
语法:unlink key [key ...]
说明:其实这个和删除del命令很像,也是存在key删除,不存在则忽略;删除几个键值,则返回删除的个数
unlink name1 name2 name3
注:del和unlink区别
del:它是线程阻塞的,当执行del命令是,del在没执行完时,其它后续的命令是无法进入的(要安全就使用del)
unlink:它不是线程阻塞的,当执行unlink命令时,它会将要删除的键移交给另外线程,然后将当前要删除的键与数据库空间断开连接
后续则由其它线程异步删除这些键(要效率快就使用unlink)
语法:exists key [key ...]
说明:返回要查询的key是否存在,存在则返回1,如果设置四个key都存在则会返回4;返回0则代表没有
exists name -- 查看是否存在name的key
exists name name -- 重复写两次name ,如果name存在则返回2
exists name address -- 查看当前是否存在name和address键
注:exists后面不管携带单个,多个或者有重复的,最终是存在一个就累加1
语法:type key
说明:返回当前指定的key的类型。可返回的类型是: string,list,set,zset,hash和stream
语法:rename key newkey
说明:修改key名称,存在原来则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1覆盖key2的值
rename name name1
语法:renamenx key newkey
说明:修改key名称存在则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1修改不成功
语法:randomkey
说明:随机返回一个key名称
语法: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里,存在则强行覆盖
语法:expire key seconds [nx|xx|gt|lt]
为一个存在的key设置过期时间 秒
语法:pexpire key milliseconds [nx|xx|gt|lt]
为一个存在的key设置过期时间 毫秒
语法:expireat key timestamp [nx|xx|gt|lt]
为一个存在的key设置过期时间 格式是uinx时间戳并精确到秒
语法:pexpireat key milliseconds-timestamp [nx|xx|gt|lt]
为一个存在的key设置过期时间 格式是uinx时间戳并精确到毫秒
说明:先设置一个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定时器会被携带不会被删除
语法:persist key
说明:清除当前有定时时间的键值,设置永不过期(和普通键值一样了),关闭后并不会删除已有的键值
persist name -- 关闭存在定时的键值
语法:ttl key
说明:查看当前有定时key的剩余时间,返回秒
语法:pttl key
说明:查看当前有定时key的剩余时间,返回毫秒
ttl name
pttl name
注:没过期反剩余时间 过期反-2 没设置过期时间的key反-1
语法:move key db
说明:把指定的键值移动到选定的数据库db当中。如果key在目标数据库中已存在,或者key在源数据库中不存,则key不会被移动。
move name 2 -- 把name移动到三号数据库里
语法:touch key [key ...]
说明:修改指定key的最后访问时间。忽略不存在的 key。(我的理解是这个键被设置/更新成功,并且被放到数据库则是成功,会返回1)
touch name1 name2 name3 -- 返回被设置成功的键个数
scan cursor [match pattern] [count count] [type type]
说明:用于迭代当前数据库中的数据库键
cursor:游标(告诉迭代器从哪开始迭代)
[match pattern]:过滤筛选条件
[count count]:迭代的个数
[type type]:迭代的类型
127.0.0.1:6379> keys *
1) "name8"
2) "name3"
3) "name5"
4) "name1"
5) "name2"
6) "name9"
7) "name7"
8) "name4"
9) "name6"
127.0.0.1:6379> scan 0 match name* count 2 type string
-- 迭代开始,从游标0开始(开头),筛选带 name* 并且查2个,还要是string类型
-- 执行后,会返回两个键,并且还返回游标现在指向的位置 2 ,那我们下次迭代就可以从 2 开始继续
1) "2"
2) 1) "name8"
2) "name7"
127.0.0.1:6379> scan 2 match name* count 2 type string
-- 设置游标从 2 开始 并查询 2 个键(具体为什么有查询两个也有三个也没太往后了解)
1) "5"
2) 1) "name3"
2) "name2"
3) "name9"
127.0.0.1:6379> scan 5 match name* count 2 type string
1) "3"
2) 1) "name1"
2) "name4"
127.0.0.1:6379> scan 3 match name* count 2 type string
1) "0"
2) 1) "name5"
2) "name6"
migrate host port key|"" destination-db timeout [copy] [replace] [auth password] [auth2 username password] [keys key [key ...]]
说明:将key原子性的从当前实例库传送到目标实例的指定数据库上,一旦迁移成功,key会在目标实例上,而当前实例上的key会被删除(默认删除)
host:设置迁移的IP地址
port:设置迁移的端口号
key|"":如果要迁移单个key则可以在这设置key,如果是多个key则在这里只需要设置 "" 在后面设置更多的key
destination-db:迁移到目标Redis服务器的哪个实例数据库
timeout:超时时间
[copy]:设置此属性代表复制迁移,不删除源实例中的key。
[replace]:强行替换,如果目标数据库存在则更新值,不存在则添加;如果不设置replace则代表对方数据库存在迁移的key则不成功
[auth password]:请求对方数据库的密码
[auth2 username password]:请求对方数据库的用户名和密码
[keys key [key ...]]:如果前面没设置 key为"",则在后面可以设置多个key迁移,如keys aaa bbb ccc
set name zhangsan
-- 设置一个普通的键值
migrate 127.0.0.1 6380 name 1 2000
-- 把name键值迁移到指定IP和端口的Redis服务器上,并且放在2号实例数据库上,超时时间2秒(超时关闭)
migrate 127.0.0.1 6380 name 0 2000 copy
-- 和上面一个命令一样,但是不同的是上一个命令成功则删除原始键值,而当前命令加上copy则只是复制到对方数据库
migrate 127.0.0.1 6380 name 0 2000 copy replace
-- 加上replace则代表目地数据库存在此键则会强行更新,不存在则添加
migrate 127.0.0.1 6380 name 0 2000 copy replace auth 1234
-- 加上密码验证
migrate 127.0.0.1 6380 "" 0 2000 copy replace auth 1234 name age address
-- 一次性迁移多个keys
sort key [by pattern] [limit offset count] [get pattern [get pattern ...]] [asc|desc] [alpha] [store destination]
说明:此命令是用来对list,set或sorted中元素排序;默认是按照数值排序的;并且按照两个元素的双精度浮点数类型值进行比较
key:排序的key
[by pattern]:通过引用外部key来排序
[limit offset count]:分页,limit 2,3 从0开始偏移到第2条数据,并查询3条数据
[get pattern [get pattern ...]]:获取外部key的值
[asc|desc]:排序的规则
[alpha]:当排序的集合中存在字符串则需要使用此属性,按照字典顺序排序;因为默认按照两个元素的双精度浮点数类型值进行比较
[store destination]:把处理好的结果存放到指定的key容器中
创建两个集合:(后面会说list集合命令)
lpush listNumber 8.4 13 14 10.5 4 19.6 10 14 5.2 10 3 2.5 7 4.7 10 11.2 8 2.2 15.7 20.9
lpush listString remini Momen Pledg Memo Tende Biode Revie silen Romanti AusL Simpl Promis Romanti Bautifu smil Initiall sunse lemo firs Chaffere
查看添加的命令:
lrange listNumber 0 -1
lrange listString 0 -1
基本使用:
sort listNumber -- 默认排序是按照双精度浮点数类型从小到大升序
sort listNumber desc -- 按照从降序排列
sort listString alpha -- 如果排序中包含字符串类型则必须使用 alpha 修饰;则会使用字节排序
sort listString limit 2 5 alpha -- 排序并分页,分页从0开始数到2,再从2的位置往后数5个元素
sort listString alpha limit 2 5 store newliststring -- 排序分页,并把排序好的数据存放到另外一个集合中
by属性的使用(通过外部key排序):
lpush mylist 20 15 18
set n_20 b
set n_15 a
set n_18 c
sort mylist by n_* alpha
1) "15"
3) "20"
5) "18"
如果使用了by属性,那么sort就会先取出mylist的全部值,也就是20,15,18,然后再去跟by里设置的pattern进行
组合(n_*,里面的*必须要和mylist的值有个一一对应关系,要不无法组合);所以就变为了n_20,n_15,n_18 ,
再按照这些拼装出的键里面的值进行排序(默认升序,从小到大);这些键排完序规则为
n_15 a
n_20 b
n_18 c
对应好之后,程序就会按照键后面的权重值来排序,所以最终排序a,b,c起作用,那么反过来推算
n_15代表mylist的15,n_20代表mylist的20,n_18代表mylist的18,
所以15对应排序的权重a;20对应排序的权重b;18对应排序的权重c;
练习:现在有zhangsan(salary=5200),lisi(salary=3000),wangwu(salary=4500),mazi(salary=3200)四人,
但是他们想比较谁的工资高,该如何设计排序
lpush names zhangsan lisi wangwu mazi
set name_zhangsan 5200
set name_lisi 3000
set name_wangwu 4500
set name_mazi 3200
sort names by name_* desc
get是使用则是先加载出mylist,并且再拼装到n_*(一一对应)然会直接输出那个键的权重(根据mylist里面排序)
get属性使用(获取外部key):
lpush mylist 20 15 18
set n_20 b
set n_15 a
set n_18 c
1:获取外部key
127.0.0.1:6379> sort mylist get n_*
1) "a"
2) "c"
3) "b"
2:获取外部key并获取当前结合的集合值
127.0.0.1:6379> sort mylist get n_* get #
1) "a"
2) "15"
3) "c"
4) "18"
5) "b"
6) "20"
3:如果有多个get也是可以的,会依次匹对返回
127.0.0.1:6379> sort mylist get n_* get # get nn_* get #
String(字符串)类型命令
语法:set key value [ex seconds|px milliseconds|exat timestamp|pxat milliseconds-timestamp|keepttl] [nx|xx] [get]
说明:设置string类型的键值,如果key已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型
key:存储的key名称
value:存储的value数据
[ex seconds|px milliseconds|exat timestamp|pxat milliseconds-timestamp|keepttl]:
ex seconds:设置键key的过期时间,单位时秒
px milliseconds:设置键key的过期时间,单位时毫秒
exat timestamp:设置键过期的指定Unix时间,以秒为单位
pxat milliseconds-timestamp:设置键过期的指定Unix时间,以毫秒为单位
keepttl:获取key的过期时间
[nx|xx]:
nx:只有键key不存在的时候才会设置key的值
xx:只有键key存在的时候才会设置key的值
[get]:返回 key 存储的值,如果 key 不存在返回空
set name zhangsan -- 设置一个最基本的键值
set name zhangsan ex 60 -- 设置一个键值,并指定过期时间秒,ttl可以查看过期时间
set name zhangsan nx -- 设置一个键值,但是加上nx 代表只能更新已经存在的,如不存在name键则无法添加
set name zhangsan xx -- 生长一个键值,但是xx和nx相反
语法:setnx key value
说明:设置键值,存在此键则返回0不覆盖,否则正常设置
setnx name zhangsan -- 设置name为键,并赋值
语法:setrange key offset value
说明:偏移量offset>=0开始, 用value参数覆盖键key储存的字符串值。不存在的键key当作空白字符串处理。
set name zhangsan --创建原始键值
setrange name 5 ' yu xiao'
-- 把原有的 zhangsan 从第五位之后更改(0下标);最终变为 "zhang yu xiao"
setrange name 14 out
-- 超出偏移则使用空格 '\x00' 代替一个空格;最终变为 "zhang yu xiao\x00out"
setrange address 2 anhui
-- 如果设置的键不存在则会新建,但是偏移量会以空格代替;最终变为 "\x00\x00anhui"
语法:strlen key
说明:获取指定key所储存的字符串值的长度。当key储存的不是字符串类型时,返回错误。
语法:append key value
说明:用于为指定的key追加值,成功后返回当前键里面的字符串全部长度(如果追加有空格需要使用 '')
append name 'good good boy' -- 追加有空格的,并且成功后返回当前key的全部长度
语法:get key
说明:如果键key不存在,那么返回特殊值nil;否则返回键key的值。
get name -- 获取name键的值
语法:getdel key
说明:先获取到指定的key后,再删除获取的那个key;最终返回被删除的值
语法:getset key value
说明:设置更新key值,设置前先把原有的值返回出来,并设置新的值,如果key不存在时使用getset则返回nil,并设置新值
语法:getrange key start end
说明:获取指定的范围值,start(从0开始)end(从0开始)
set name zhangsan
getrange name 2 5 -- 获取范围值,最终返回 'angs'
getrange name 3 -2 -- 获取范围值,最终返回 'ngsa'
注:若使用getrange name 0 -1 (其中-1代表从后往前数)
语法:getex key [ex seconds|px milliseconds|exat timestamp|pxat milliseconds-timestamp|persist]
说明:获取指定的key值,并且获取后可以对当前key设置超时时间或者清除超时时间
[ex seconds|px milliseconds|exat timestamp|pxat milliseconds-timestamp|persist]:
ex seconds:设置键key的过期时间,单位时秒
px milliseconds:设置键key的过期时间,单位时毫秒
exat timestamp:设置键过期的指定Unix时间,以秒为单位
pxat milliseconds-timestamp:设置键过期的指定Unix时间,以毫秒为单位
persist:清除超时时间
语法:mset key value [key value ...]
说明:和set命令差不多,但是这个是批量设置,如果设置键存在则覆盖,不存在则添加
mset name zhangsn age 22 address anhui -- 批量设置name和age和address
语法:mget key [key ...]
说明:批量获取键的值,如果获取的某个不存在则返回(nil),其它正常返回
mget name aaa -- 批量获取name和aaa的值(aaa键不存在则返回nil)
语法:setex key seconds value
说明:将键key的值设置为value ,并将键key的过期时间设置为seconds秒钟,如果key存在则覆盖原有值
setex name 60 zhangsan -- 设置key为name,并且设置60秒过期时间
语法:psetex key milliseconds value
说明:将键key的值设置为value ,并将键key的过期时间设置为milliseconds毫秒,如果key存在则覆盖原有值
psetex name 70000 zhangsan -- 设置key为name,并且设置70秒过期时间
语法:msetnx key value [key value ...]
说明:当且仅当所有给定键都不存在时,为所有给定键设置值(如果添加的其中键在当前数据库存在则都不成功)
msetnx是一个原子性(atomic)操作,所有给定键要么就全部都被设置,要么就全部都不设置
msetnx name zhangsan age 22 -- 设置name和age两个键值
语法:incr key
说明:将key中储存的数字值增一,并返回增加后的值(只能用在整型,字符串啥的会报错)
语法:incrby key increment
说明:将key中储存的数字值增加指定步长increment,并返回增加后的值(只能用在整型,字符串啥的会报错)
语法:incrbyfloat key increment
说明:将key中储存的数字值增加指定步长increment,并返回增加后的值(只能用在浮点型,字符串啥的会报错)
incrbyfloat salary 333.33 -- 对salary添加步长333.33
语法:decr key
语法:将key中储存的数字值减一,并返回减后的值(只能用在整型,字符串啥的会报错)
语法:decrby key decrement
说明:将key中储存的数字值减指定步长increment,并返回减后的值(只能用在整型,字符串啥的会报错)
Hash(哈希表)类型命令
语法:hset key field value [field value ...]
说明:用于为存储在key中的哈希表的field字段赋值value
hset student name zhangsan age 22 -- 设置key为student但里面存储着name和age字段
语法:hmset key field value [field value ...]
说明:用于同时将多个field-value(字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段
注:Redis4.0.0起被废弃,推荐使用hset,它也可以一次性添加多个
语法:hsetnx key field value
说明:用于为存储在key中的哈希表的field字段赋值value;如果当前field存在则添加失败(不可覆盖添加)
语法:hget key field
说明:用于返回哈希表中指定字段field的值
hget student name -- 获取哈希表里的field字段
语法:hmget key field [field ...]
说明:用于返回哈希表中指定字段field的值;但是可以一次性返回多个field值
hmget student name age -- 获取哈希表里的field多个字段
语法:hdel key field [field ...]
说明:用于删除哈希表key中的一个或多个指定字段,不存在的字段将被忽略。如果key不存在,会被当作空哈希表处理并返回0
hdel student name -- 删除哈希表中key为student里的name字段
语法:hexists key field
说明:用于查看哈希表的指定字段field是否存在,1存在,0不存在
hexists student name -- 查看哈希表中key为student里的name字段是否存在
语法:hgetall key
说明:用于返回存储在key中的哈希表中所有的field和value。
语法:hkeys key
说明:返回存储在key中哈希表的所有field
语法:hvals key
说明:返回存储在key中哈希表的所有value
语法:hincrby key field increment
说明:为哈希表key中的field的值加上指定的增量,并返回增量后的值(增量正数累加,增量负数递减)
hincrby student age 2 -- 对年龄累加
hincrby student age -28 -- 对年龄递减
注:当前命令只可操作整数类型,而字符串,浮点类型啥的会报错
语法:hincrbyfloat key field increment
说明:为哈希表key中的field的值加上指定的增量,并返回增量后的值(增量正数累加,增量负数递减)
hincrby student salary 300.3 -- 对工资累加
hincrby student salary -432.84 -- 对工资递减
注:当前命令只可操作整数类型、浮点类型,而操作字符串会报错
语法:hstrlen key field
说明:返回存储在key中给定field相关联的值的字符串长度(string length)
语法:hlen key
说明:用于获取哈希表中字段(fields)的数量
语法:hrandfield key [count [withvalues]]
说明:随机返回key里的field字段
count:返回的field个数,如果是正数且超过key里的field总数则全部返回,
如果是负数且超过key里的field总数绝对值则返回空,
整数则返回不重复字段,负数则可能返回重复字段
注:在传 1 或 -1 它是随机在key里面选择,
在传 2 则随机返回key里的2个field字段,这两个field不可能存在重复
在传-2 则随机返回key里的2个field字段,这两个field可能会存在重复
withvalues:返回field字段时后面还返回当前field的值
hset student name zhangsan age 22 address anhui salary 3000.30 -- 初始化
127.0.0.1:6379> hrandfield student -2
1) "salary"
2) "salary"
127.0.0.1:6379> hrandfield student 2
1) "name"
2) "age"
127.0.0.1:6379> hrandfield student 2 withvalues
1) "salary"
2) "3000.30"
3) "name"
4) "zhangsan"
语法:hscan key cursor [match pattern] [count count]
说明:用于遍历哈希表中的键值对
cursor:游标(告诉迭代器从哪开始迭代)
[match pattern]:过滤筛选条件
[count count]:迭代的个数
hscan student 0 match * count 2
-- 迭代student里的field字段,下标0开始,过滤条件*全部,但是每次迭代count为2,但2不起作用(没研究)
-- 具体可以查看我些的scan命令,全文搜索
List(集合)类型命令
语法:lpush key element [element ...]
说明:将一个或多个值插入到集合key的头部(头插法),如果当前key不存在则创建新的
lpush listNumber 8.4 13 14 10.5 4 19.6 10 14 5.2 10 3 2.5 7 4.7 10 11.2 8 2.2 15.7 20.9
lpush listString remini Momen Pledg Memo Tende Biode Revie silen Romanti AusL Simpl Promis Romanti Bautifu smil Initiall sunse lemo firs Chaffere
-- 插入两个案例,后面以这个说明
语法:lpushx key element [element ...]
说明:往集合左边插入一个元素;若集合key不存在无法插入
语法:rpush key element [element ...]
说明:将一个或多个值插入到集合key的尾部(尾插法),如果当前key不存在则创建新的
语法:rpushx key element [element ...]
说明:往集合右边插入一个元素;若集合key不存在无法插入
语法:lpop key [count]
说明:从集合左边(头部)弹出(删除)指定的count个元素删除
lpop listString 2 -- 从集合左边弹出两个元素删除
语法:rpop key [count]
说明:从集合右边(尾部部)弹出(删除)指定的count个元素删除
语法:blpop key [key ...] timeout
说明:移出并获取集合头部第一个元素,如果集合没有元素会阻塞集合直到等待超时或发现可弹出元素为止,它是lpop的阻塞版
key:如果当前key不存在或者key内部没元素,则一直阻塞等待,等待其它客户端创建此key和元素,会立马弹出
但是超出延迟时间的话还没有弹出元素则会在最后弹出(nil)
[key ...]:设置多个key时,如果第一个key不存在则会考虑弹出第二个key,第三个key....,如果每个key都不存在或没元素
则当前客户端会进入一个阻塞状态,直到有元素弹出,或者自动超时弹出(nil)
127.0.0.1:6379> blpop listA mylist 480
1) "mylist"
2) "remini"
-- 设置两个key,其中listString为空,会自动去找mylist集合,发现存在元素,并立刻弹出
语法:brpop key [key ...] timeout
说明:移出并获取集合尾部第一个元素,如果集合没有元素会阻塞集合直到等待超时或发现可弹出元素为止,它是lpop的阻塞版
语法:llen key
说明:获取到集合里元素的总个数
语法:lrange key start stop
说明:查询集合元素,并设置查询区间
start:起始值,设置正数则从左往右,设置负数则从右往左开始
stop:终点值,设置正数则从左往右,设置负数则从右往左开始
注:start(0) stop(-1)代表查询全部
lrange listString -5 -3
-- 起点从尾部往前数5个,终点从尾部往前数3个;最终显示 -5,-4,-3这三个元素
lrange listString -5 -8
-- 起点从尾部往前数5个,终点从尾部往前数8个;最终显示(empty array)
语法:lindex key index
说明:返回集合key里索引index位置存储的元素,0~n从左往右索引、-1~-n从右往左索引
lindex listString -1 -- 获取集合listString里的最后一个索引的元素
语法:lrem key count element
说明:从集合key中删除前count个值等于element的元素
count > 0: 从头到尾删除值为 value 的元素
count < 0: 从尾到头删除值为 value 的元素
count = 0: 移除所有值为 value 的元素
lrem listString -2 Romanti
-- 移除集合listString中的Romanti元素,删除个数-2(代表从尾部查找并删除两个),并返回删除成功个数
语法:lset key index element
说明:设置集合key中index位置的元素值为新的element,index为正数则从头到位索引,为负数从尾到头索引查询
lset listString 2 yyds -- 修改集合listString中索引为2的元素为yyds
语法:linsert key before|after pivot element
说明:把element元素插入到指定集合key里,但是还要以pivot内部的一个元素为基准,看是插到这个元素的左边还是右边
before|after:插入元素的前后位置选项
pivot:集合里的参考元素
element:待插入的元素
注:当集合key不存在时,这个list会被看作是空list,什么都不执行
注:当集合key存在,值不是列表类型时,返回错误
注:当给定的参考元素pivot不存在是则返回-1,因为程序不知道往哪插入
linsert listString after Romanti niubi -- 把niubi插入到listString集合里,插入参考Romanti元素的后面
语法:lpos key element [rank rank] [count num-matches] [maxlen len]
说明:返回集合key中匹配给定element成员的索引
key:要查询的集合key
element:要查询索引的元素
[rank rank]:选择匹配上的第几个元素,若超出集合指定元素的个数则返回(nil)
[count num-matches]:返回匹配上元素的索引个数,默认返回1个
[maxlen len]:告知lpos命令查询集合的前len个元素,限制查询个数
lpos listString Romanti -- 查询集合listString里的Romanti出现的索引位置(0开始索引)
lpos listString Romanti rank 2 -- 查询Romanti元素的第二个索引位置
lpos listString Romanti rank 1 count 3 -- 查询Romanti索引的三条记录
lpos listString Romanti rank 1 count 3 maxlen 20 -- 限制查询下标为0~20
1) (integer) 7
2) (integer) 11
语法:lmove source destination left|right left|right
说明:用于原子地从source集合左边或者右边弹出一个元素,添加到destination新集合里的左边或右边
source:源集合
destination:目标集合
left|right left|right:
第一个:代表从源集合的左边或者右边弹出元素
第二个:代表从目标集合的左边或者右边添加
lmove listString mylist left right
-- 从listString源集合的左边弹出个元素,添加到mylist目标集合的右边
语法:rpoplpush source destination
说明:原子地从集合source中移除并返回最后一个元素,然后把这个元素插入集合destination的第一个元素
source:源集合
destination:目标集合
注:此方法在Redis6.2.0被废除(使用lmove代替)
语法:blmove source destination left|right left|right timeout
说明:用于原子地从source集合左边或者右边弹出一个元素,添加到destination新集合里的左边或右边,但是它时lmove的阻塞版本
blmove listString mylist left right 60 -- 从集合listString左边弹出一个元素放到目标集合mylist的尾部
但是存在60秒的超时时间,超过60秒没有弹出元素则自动失败,返回(nil)
语法:brpoplpush source destination timeout
说明:原子地从集合source中移除并返回最后一个元素,然后把这个元素插入集合destination的第一个元素(已废弃使用blmove代替)
brpoplpush listString mylist 50 -- 从集合listString尾部弹出一个元素添加到目标mylist集合的头部,超时时间50秒
语法:ltrim key start stop
说明:修订一个已经存在的集合;修订一个指定范围的元素放到当前集合中
127.0.0.1:6379> ltrim listString -10 -5
OK
127.0.0.1:6379> lrange listString 0 -1
1) "Simpl"
2) "AusL"
3) "silen"
4) "Revie"
5) "Biode"
6) "Tende"
补充Redis7.0.0即将提供
语法:lmpop numkeys [key [key ...]] left|right [count count]
语法:blmpop timeout numkeys [key [key ...]] left|right [count count]