美文网首页
redis key类型命令

redis key类型命令

作者: 饱饱想要的灵感 | 来源:发表于2023-02-01 11:33 被阅读0次

key过期总结

  1. 使用del可以删除定时的key
  2. set会删除key的过期设置
  3. getset可以返回并设置值,并删除过期设置
  4. 使用rename修改key名称,但key的过期设置不会删除

get

语法:get key

查看key的值

keys

语法: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 baobao
keys na[\\]me

del

语法:del key [key ...]

删除指定的key

例子:del name age address

unlink

语法:unlink key [key ...]

unlink和删除del命令很像,也是存在key删除,不存在则忽略;删除几个键值,则返回删除的个数
del和unlink区别:
del:它是线程阻塞的,当执行del命令是,del在没执行完时,其它后续的命令是无法进入的(要安全就使用del)
unlink:它不是线程阻塞的,当执行unlink命令时,它会将要删除的键移交给另外线程,然后将当前要删除的键与数据库空间断开连接, 后续则由其它线程异步删除这些键(要效率快就使用unlink)

例子:unlink name1 name2 name3

exists

语法:exists key [key ...]

返回要查询的key是否存在,存在则返回1,如果设置四个key都存在则会返回4;返回0则代表没有; exists后面不管携带单个还是多个, 甚至重复,都是存在一个就累加1

例子:

exists name -- 查看是否存在name的key
exists name name  -- 重复写两次name ,如果name存在则返回2
exists name address -- 查看当前是否存在name和address键

type

语法:type key

返回当前指定的key的类型。可返回的类型是: string,list,set,zset,hash和stream

rename

语法:rename key newkey

修改key名称,存在原来则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1覆盖key2的值

例子:name name1

renamenx

语法:renamenx key newkey

修改key名称存在则覆盖,不存在则抛错;如果修改key1为key2,key2存在,则key1修改不成功

randomkey

语法:randomkey

随机返回一个key名称

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里,存在则强行覆盖

expire

语法:expire key seconds [nx|xx|gt|lt]

为一个存在的key设置过期时间 秒

pexpire

语法:pexpire key milliseconds [nx|xx|gt|lt]

为一个存在的key设置过期时间 毫秒

expireat

语法:expireat key timestamp [nx|xx|gt|lt]

为一个存在的key设置过期时间 格式是uinx时间戳并精确到秒

pexpireat

语法: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到期(精确毫秒)

persist

语法:persist key

清除当前有定时时间的键值,设置永不过期(和普通键值一样),关闭后并不会删除已有的键值

例子:persist name -- 关闭存在定时的键值

ttl

语法:ttl key

查看当前有定时key的剩余时间,返回秒

没过期返回剩余时间, 过期了返回-2, 没设置过期时间的key返回-1

pttl

语法:pttl key

查看当前有定时key的剩余时间,返回毫秒

没过期返回剩余时间, 过期了返回-2, 没设置过期时间的key返回-1

例子:

ttl name
pttl name

move

语法:move key db

把指定的键值移动到选定的数据库db当中。如果key在目标数据库中已存在,或者key在源数据库中不存,则key不会被移动。

例子:move name 2 --把name移动到数据库2

touch

语法:touch key [key ...]

修改指定key的最后访问时间。忽略不存在的 key。(我的理解是这个键被设置/更新成功,并且被放到数据库则是成功,会返回1)

例子: touch name1 name2 name3 -- 返回被设置成功的键个数

scan

语法:scan cursor [match pattern] [count count]

用于迭代当前数据库中的数据库键
cursor:游标(告诉迭代器从哪开始迭代)
[match pattern]:过滤筛选条件
[count count]:迭代的个数

需要注意的是count的使用:

  • COUNT 参数的默认值为 10 。
  • 在迭代一个足够大的、由哈希表实现的数据库、集合键、哈希键或者有序集合键时, 如果用户没有使用 MATCH 选项, 那么命令返回的元素数量通常和 COUNT 选项指定的一样, 或者比 COUNT 选项指定的数量稍多一些。
  • 在迭代一个编码为整数集合(intset,一个只由整数值构成的小集合)、 或者编码为压缩列表(ziplist,由不同值构成的一个小哈希或者一个小有序集合)时, 增量式迭代命令通常会无视 COUNT 选项指定的值, 在第一次迭代就将数据集包含的所有元素都返回给用户。

例子:

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
-- 迭代开始,从游标0开始(开头),筛选带 name* 并且查2个
-- 执行后,会返回两个键,并且还返回游标现在指向的位置 2 ,那我们下次迭代就可以从 2 开始继续
1) "2"
2) 1) "name8"
   2) "name7"
127.0.0.1:6379> scan 2 match name* count 2
 -- 设置游标从 2 开始 并查询 2 个键
1) "5"
2) 1) "name3"
   2) "name2"
   3) "name9"

migrate

语法: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

语法:sort key [by pattern] [limit offset count] [get pattern [get pattern ...]] [asc|desc] [alpha] [store destination]

sort是用来对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 #

相关文章

  • Redis常用命令

    Redis常用命令 redis常见数据类型操作命令参考网址 1.键(key) keys *:查看所有key; ex...

  • redis 第三讲 数据类型

    redis 五大数据类型 哪里获取redis常见数据类型操作命令 参考 redis 键(key) redis 字符...

  • Redis基本命令(数据类型)

    Redis命令大全 Redis命令大全 Key常用命令 keys * exists key(是否存在) move ...

  • Redis常用命令手册

    Redis 命令大致可分为以下几种:服务端(server)命令客户端(client)命令键命令(key)数据类型命...

  • Redis中的数据类型及常用命令备忘录

    带目录版:Redis中的数据类型及常用命令备忘录Redis安装及启停:Redis安装 Redis 键(key) k...

  • Redis 键(key) 命令

    Redis 键(key) 命令 1> del 命令:该命令用于在 key 存在是删除 key格式:DEL key返...

  • redis 简单记录

    redis关注点: 1、redis命令:Redis 命令参考 — Redis 命令参考 字符串:SET key v...

  • redis基础

    redis value数据类型 redis 是key-value 类型的内存缓存 key的数据类型是Stringv...

  • redis数据结构详解之Hash

    redis中hash对单个key/value操作的命令演示 redis中hash的添加命令hset,如果key不存...

  • php操作redis(string)

    链接redis string 类型常用场景 计数器 string类型的incr和decr命令的作用是将key中储存...

网友评论

      本文标题:redis key类型命令

      本文链接:https://www.haomeiwen.com/subject/ocdihdtx.html