一、基础命令
心跳命令
命令:ping
如果执行命令返回PONG,表示我们客户端与服务端连接是正常的。
读写键值命令
写入键值对,命令:set key value 把指定的key-value对写入到DB
读取指定键的值,命令:get key 读取指定key对应的value值
数据库切换
Redis默认会提供16个数据库,其编号为0~15,默认连接上后使用的是DB0
如果我们要切换到指定的数据库,使用命令:select 5 表示我们此时需要切换到5号数据库
查看数据库中的key数量
命令:dbsize 返回当前库中key有多少个
删除数据库中的数据
删除数据库中的数据命令在使用时一定要小心,一般在生产中会把空上命令进行重命名,防止误操作。
命令:flushdb 删除当前数据库中的所有数据,对于其它数据库中的数据没有影响
命令:flushall 删除所有数据库中的所有数据
对于上面的两个删除命令一般会在redis.conf文件中做如下配置,让删除数据的命令不可用
rename-command flushall ""
rename-command flushdb ""
退出客户端
命令:quit 或者是 exit
在客户端处于连接状态下,使用shutdown命令可以关闭服务端!
二、key操作命令
Redis中存储数据的整体是一个Map,其中key是String类型,value可以是String,Hash,List,Set等类型。
命令 | 说明 | 示例 |
---|---|---|
keys | 查询库中的key keys 这个命令一般在生产中不会使用,因为生产环境中的key非常多,而使用keys这样查的话可能会阻塞当前redis服务,可以考虑使用scan命令替代。 |
keys *:这进面的*表示是所有key keys h*:这里的参数h*表示查询所有以h开头的key keys *o*:这里的参数*o*表示查询带有o的key keys h?ll:这里的h?ll表示查询key的名称匹配正则h?ll的key |
exists | 判断当前库中是否存在指定的key 一次可以判断多个key,存在则为1,不存在为0,最终返回的结果是每个key判断结果的合计(有多少key存在则返回多少) |
exists name age |
del | 删除指定的key 一次可以删除多个key,删除成功返回1,不成功返回0,如果删除多个则是对这多个删除结果0和1的汇总数量 |
del name age |
rename | 重命名key 这个命令把指定的key重新命名为一个新的名称,重命名成功返回ok,如果指定需要重命名的key不存在则会报错 |
rename emp employee:把emp这个key的名称重命名为employee |
move | 移动指定key到其它的数据库 把指定的key移动到指定的数据库,指定的数据库使用数据库索引来表示,成功返回1,失败返回0,不可以把某个key指定移动到key本身所在的库,这样的话会报错 |
move name 1:把name这个key移动到索引为1号的数据库 |
type | 返回key存储的值的类型 有六种返回情况 none(指定key不存在) string(字符串) list(列表) set(集合) zset(有序集合) hash(哈希表) |
type name:查询name存储值的类型 |
expire/pexpire | 用来指定key的生存时间 expire这个指定时间以秒为单位 pexpire这个指定的时间以毫秒为单位 在redis当中带有生存时间的key被称为”易失的“ |
expire name 10:设置name这个key的生存时间为10秒 pexpire name 3000:设置name这个key的生存时间是3000毫秒 |
ttp/pttl | 这个命令上面的生成时间有关系,它返回的是指定key还有多长时间的生成时间 如果key已经没有了则会返回-2 ttl返回的数值单位是秒,pttl返回的数值单位是毫秒 |
ttl name:查询name这个key还剩余的生存时间,单位是秒 pttl name:查询name这个key还剩余的生存时间,单位是毫秒 |
persist | 把指定的key从易失的变为持久的,也就是把有过期时间的变为没有过期时间的 如果把key从有过期时间的变为没有过期时间的后,再用ttl查其剩余的生存时间时会返回-1(表示key没有过期时间) |
persist name |
randomkey | 从当前库中随机返回一个key 可以使用这个命令来判断一个库是不是空的,返回有值则不是空的,如果没有值则为空的 |
randomkey |
关于scan命令说明
scan命令后加上一个游标,它指定了从哪里开始,内部的每个key记录的都有一个类似于指针的东西,这个指定的游标就是指定从哪里开始做检索查询。
示例命令:scan 0 count 3 表示从0开始,一次检索3个数据
返回的数据由两部分组成:
- 第一部分:表示下一次开始的指针位置,如果这一部分返回0表示结束了没有数据了
- 第二部分:表示这次检索出来的数据
示例命令:scan 0 count 5 match *a* 表示从0开始,检索5个,这5个要匹配*a*的规则,这个时候同样会返回两部分数据,第一部分是下一次开始的指针位置,第二部分是匹配到的数据
示例命令:scan 0 count 6 type list 表示从0开始,检索6个,这6个中要匹配类型是list的,同样它返回的也有两部分数据
对于scan命令中的参数 count,match,type都是检索条件可以省略的!
注意事项:
- 使用间断的、负数、超出范围或者其它非正常的游标来指行增量式迭代时不会造成服务器的崩溃
- scan命令中的count参数用于建议每次迭代返回的元素数量,但是它并不是一个严格的限制,而是给redis的一个提示值,redis最终返回会尽量接近这个值,但是实际返回的数量可能会不同
- 虽然scan命令不会阻塞服务器,但是在高并发的场景下仍需要注意其对性能的影响
- 当一个数据库的数据一直在增加时,想要访问这个数据库中的所有元素就需要做越来越多的迭代工作,能否结束则要看迭代的速度是否比数据增长的速度快
与scan相关的还有三个命令:
- hscan:属于hash型value操作命令集合,用来遍历db当中指定hash表的所有field-value对
- 命令示例:hscan employee 0 count 5
- sscan:属于set型value操作命令集合,用来遍历当前db中指定set集合的所有元素
- zscan:属于zset型value操作命令集合,用于遍历当前db中指定有序集合的所有元素
scan是对db中的key进行遍历迭代,其它的三个hscan是对db中key的对应hash中的内容再做遍历迭代,sscan是对db中指定key的值类型是set的元素内容再做遍历迭代,zscan是对key的值类型是zset的内容进行遍历迭代。