目录
Redis中文官方网站:
在线测试网址:
1. 简介
Redis主要是针对Linux开发与维护,且大部分公司服务器都在使用Linux操作系统,而Redis在Linux操作系统上的表现已经得到了实践的验证。对于使用Windows操作系统的读者,可以通过安装虚拟机来体验Redis的诸多特性。
Redis安装完毕之后其启动方式有3种:
①默认配置启动:redis-server
②运行配置启动:redis-server加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置:
redis-server --configKey1 configValue1 --configKey2 configValue2
③配置文件启动:将配置写到指定文件里,例如/XXX/redis.conf中,那么只需要执行如下命令即可启动Redis:redis-server /XXX/redis.conf
通过redis-cli来连接、操作Redis服务:
①redis-cli -h {host} -p {port}方式连接到Redis服务,之后所有的操作都是通过交互的方式实现。
②redis-cli -h {host} -p {port}{command}就可以直接得到命令的返回结果。
通过shutdown命令来停止Redis服务。shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件:redis-cli shutdown nosave|save
2. 全局命令
指令 | 解释 | 指令时间复杂度/说明 |
keys * | 查看所有键 | O(n) |
dbsize | 键总数 | O(1) |
exists key | 检查键key是否存在,存在则返回1,不存在则返回0 |
|
del key [key...] | 删除键key,del是一个通用命令,无论值是什么数据结构类型,del命令都可以将其删除,返回结果为成功删除键的个数,如果删除一个不存在的键则返回0 | O(k),k是键的个数 |
expire key seconds | 键过期,当超过过期时间seconds后则自动删除键 |
|
ttl key | 返回键key的剩余过期时间,有3种返回值:大于等于0的整数来代表键key剩余的过期时间、-1代表键key没设置过期时间、-2代表键不存在。 |
|
type key | 键的数据结构类型,如果键不存在则返回none |
|
object encoding key | 查询key的内部编码 |
|
rename key newkey | 键重命名,如果在rename之前,newkey已经存在,则newkey的值会被key的值覆盖。由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性 |
|
renamenx key newkey | 键重命名,确保只有newkey不存在的时候才被覆盖。由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性 |
|
randomkey | 随机返回一个键 |
|
expire key seconds | 键key在seconds秒之后过期 | 如果expire key的键不存在,返回结果为0: 如果过期时间为负值,键会立即被删除,犹如使用del命令一样: persist命令可以将键的过期时间清除: 对于字符串类型键,执行set命令会去掉过期时间 Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能 setex命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间 |
expireat key timestamp | 键key在秒级时间戳timestamp后过期 |
|
ttl key | 查询键的剩余过期时间: ①大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。 ②-1:键没有设置过期时间。 ③-2:键不存在。 |
|
pttl key | 查询键的剩余过期时间,该指令精读更高: ①大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。 ②-1:键没有设置过期时间。 ③-2:键不存在。 |
|
pexpire key milliseconds | 键key在milliseconds毫秒后过期 |
|
pexpireat key milliseconds-timestamp | 键key在毫秒级时间戳timestamp后过期 |
|
move key db | move命令用于在Redis内部进行数据迁移,把指定的键从源数据库移动到目标数据库中 |
|
dump key restore key ttl value | dump+restore可以实现在不同的Redis实例之间进行数据迁移的功能。 1)在源Redis上,dump命令会将键值序列化,格式采用的是RDB格式。 2)在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间。 有两点需要注意:第一,整个迁移过程并非原子性 的,而是通过客户端分步完成的。第二,迁移过程是开启了两个客户端连 接,所以dump的结果不是在源Redis和目标Redis之间进行传输 |
|
migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key...] | migrate命令也是用于在Redis实例间进行数据迁移的,实际上migrate命令就是将dump、restore、del三个命令进行组合,从而简化了操作流程。 migrate命令具有原子性,而且从Redis3.0.6版本以后已经支持迁移多个键的功能,有效地提高了迁移效率. 实现过程和dump+restore基本类似,但是有3点 不太相同:第一,整个过程是原子执行的,不需要在多个Redis实例上开启 客户端的,只需要在源Redis上执行migrate命令即可。第二,migrate命令的 数据传输直接在源Redis和目标Redis上完成的。第三,目标Redis完成restore 后会发送OK给源Redis,源Redis接收后会根据migrate对应的选项来决定是否 在源Redis上删除对应的键。 | host:目标Redis的IP地址。 port:目标Redis的端口。 key|"":在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处是要迁移的键,但Redis3.0.6版本之后支持迁移多个键,如果当前需要迁移多个键,此处为空字符串""。 destination-db:目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0。 timeout:迁移的超时时间(单位为毫秒)。 [copy]:如果添加此选项,迁移后并不删除源键。 [replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖。 [keys key[key...]]:迁移多个键,例如要迁移key1、key2、key3,此处填写“keys key1 key2 key3”。 |
keys pattern | 全量遍历键 *代表匹配任意字符 ·代表匹配一个字符 []代表匹配部分字符,例如[1,3]代表匹配1,3,[1-10]代表匹配1到10的任意数字。 \x用来做转义,例如要匹配星号、问号需要进行转义。 |
|
scan cursor [match pattern] [count number] | 渐进式遍历,它能有效的解决keys命令存在的问题,scan采用渐进式遍历的方式来解决keys命令可能带来的阻塞问题,但是要真正实现keys的功能,需要执行多次scan。 ①cursor是必需参数,实际上cursor是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束。 ②match pattern是可选参数,它的作用的是做模式的匹配,这点和keys的模式匹配很像。 ③count number是可选参数,它的作用是表明每次要遍历的键个数,默认值是10,此参数可以适当增大。 |
|
select dbIndex | 切换数据库,Redis默认配置中是有16个数据库。不过Redis3.0中已经逐渐弱化这个功能 |
|
flushdb/flushall | flushdb只清除当前数据库,flushall会清除所有数据库 |
|
常见小功能:慢查询分析
所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息记录下来。
配置Redis慢查询分析
①慢查询预设超时阈值:
slowlog-log-slower-than,单位是微秒,默认值是10000,如果一条指令的执行时间超过了10000微秒,那么它将被记录在慢查询日志中。
slowlog-log-slower-than=0会记录所有的命令。
slowlog-log-slowerthan<0对于任何命令都不会进行记录。
②如何读取慢查询记录:
slowlog-max-len只是标记慢查询日志最多存储多少条,并没有说明存放在哪里。slowlog-max-len就是列表的最大长度。一个新的命令满足慢查询条件时被插入到这个列表中,当慢查询日志列表已处于其最大长度时,最早插入的一个命令将从列表中移出。
可以通过命令来实现对慢查询日志的访问和管理:
获取慢查询日志:slowlog get [n]
获取慢查询日志列表当前的长度:slowlog len
慢查询日志重置:slowlog reset
每个每个慢查询日志有4个属性组成:慢查询日志标识id、发生时间戳、命令耗时、执行命令和参数。
③如何配置这2个参数
要么修改配置文件、要么使用config set命令动态修改
config set slowlog-log-slower-than 50000
config set slowlog-max-len 10
config rewrite
常见小功能:redis-cli详解
redis-cli -help查看帮助
redis-cli -r这里的r代表repeat,即将命令执行多次
redis-cli -i这里的i代表interval,即每隔几秒执行一次命令,但是-i选项必须和-r选项一起使用。-i的单位是秒。
redis-cli -x该选项代表从标准输入来读取数据作为redis-cli的最后一个参数。
redis-cli -c该选项是连接Redis Cluster节点时需要使用的,-c选项可以防止moved和ask异常。
redis-cli -a如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要手动输入auth命令。
redis-cli --scan/--pattern用于扫描指定模式的key,相当于使用scan命令
redis-cli --slave把当前客户端模拟成当前Redis节点的从节点,可以用来获取当前Redis节点的更新操作。
redis-cli --rdb该选项会请求Redis实例生成并发送RDB持久化文件,保存在本地,可以使用它做持久化文件的定期备份。
redis-cli --pipe该选项用于将命令封装成Redis通信协议定义的数据格式,批量发送给Redis执行。
redis-cli --bigkeys该选项使用scan命令对Redis的key进行采样,找出内存占用比较大的键值。
redis-cli --eval该选项用于执行指定的Lua脚本。
redis-cli --latency该选项可以测试客户端到目标Redis的网络延迟
redis-cli --latency-history每隔一段时间(参数i控制)输出客户端到目标Redis的网络延迟,而--latency只输出一次,该参数可以输出多次
redis-cli --latency-dist该选项使用统计图表的形式从控制台输出延迟统计信息
redis-cli --stat实时获取Redis的重要统计信息
redis-cli --raw要求返回结果必须是格式化之后的结果
redis-cli --no-raw要求返回结果必须是原始格式
redis-server --test-memory检测当前操作系统是否稳定的分配指令容量内存给Redis
redis-benchmark -c该选项代表客户端client的并发数量
redis-benchmark -n该选项代表客户端请求总量num
redis-benchmark -q该选项仅仅现实redis-benchmark的每秒请求reuqest的信息
redis-benchmark -r该选项可以向Redis随机random插入key
redis-benchmark -P代表每个请求pipeline的数据量
redis-benchmark -k代表客户端是否使用keepalive,1为使用,0为不使用。
redis-benchmark -t该选项可以对指定命令进行基准测试
redis-benchmark --csv将结果按照CSV格式输出