一:序
其实本文的命令大家都可以去官网学习,但是我出这篇文章只是以更直观的方式来解读官网上的命令,让大家一眼可以看得懂,看的明白;
注意:我全文使用的Redis版本为 6.2.x 版本,低版本可能有些命令不存在;还有要想学习更全的Redis命令,推荐官网学习
其实写本次文章让我最初模棱两可的一些命令印在我的脑海,后期在查命令也是有印象
本文主要介绍通俗易懂的命令,具体文章会有如下内容(红色字体,其它则会在其它文章指出)
连接命令:连接(connection)
基本key类型:键(key)
基本数据类型:字符串(String)、散列(hash)、列表(list)、集合(set)、有序集合(sorted)
特殊数据类型:位图(bitmaps)、超长日志(hyperloglog)、地理空间(geospatial)
发布订阅命令
事务命令...
二: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"