-- 基础命令 --
基础
- 安装: 安装:
sudo apt-get install redis-server
启动:sudo systemctl start redis-server
- 连接: 连接本地服务:
redis-cli
连接远程服务(免密登录):redis-cli -h host
连接远程服务(密码登录):redis-cli -h host -p port -a password
- 连接后命令
PING
: 如果服务器运作正常的话,会返回一个 PONGOUIT
: 关闭redis连接 (总是返回OK)AUTH <password>
: 验证密码 (正确返回OK,错误返回error)ECHO <message>
: 打印指定字符串SELECT <index>
: 切换到指定数据库 (总是返回OK)- 注: index用数字值指定, 索引从0开始(默认使用0号数据库)
配置命令
- 配置文件位置: 安装目录下的redis.conf(Linux) redis.windows.conf(Windows)
/etc/redis
(kali) - 配置项[[#配置项目录]]
- 指令:
CONFIG GET <配置项名/*>
: 获取配置项的值 (返回由 配置项名 与 对应项值组成的 列表)CONFIG SET <配置项名> <值>
: 设置配置项的值, 只在当前redis实例运行期间有效, 重启后失效CONFIG REWRITE <配置项名> <值>
: 对配置文件进行改写, 重启后才生效
键命令
- 删除键:
DEL <key>
(返回被删除键的数量)
脚本命令
- 直接执行脚本:
EVAL "<script>" <numkeys> <key> ... <arg> ...
- 添加至缓存:
SCRIPT LOAD <script>
(将script添加到脚本缓存中,不立即执行, 返回脚本的sha1校验码) - 执行缓存脚本:
EVALSHA <sha1> <numkeys> <key> ... <arg> ...
(通过sha1校验码指定脚本) - 查看脚本是否存在缓存中:
SCRIPT EXISTS <sha1> ...
(返回一个列表, 存在则对应位置元素为1, 否则为0) - 清除缓存中所有脚本:
SCRIPT FLUSH
(总是返回OK) - 杀死正在运行的脚本:
SCRIPT KILL
(总是返回OK) - 介绍: 脚本: Redis使用 [[Lua]] 来执行脚本 script: Lua脚本代码,可用KEYS[]调用用传入的key,用ARGV[]调用传入的arg (这两个数组下角标从1开始) numkeys: 指定键名参数的个数,即key[]数组的元素个数(通过该参数判定哪些是key参数,哪些是arg参数)
备份命令
- 备份:
SAVE
(在redis目录中以dump.rdb形式储存) - 恢复备份数据:
CONFIG GET dir
得到redis安装目录 将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可 - 清空数据库所有数据:
Flushall
-- 数据类型 --
数据类型
- string(字符串): 基本的数据存储单元, 可以存储 字符串 整数 浮点数, 可包含二进制数据(如图片数据 或 序列化对象等), 最大512MB
- hash(哈希): 一个键(字段)值对集合, 是一个string类型的field和value的映射表, 每个哈希最多可以存储2^32-1个键值对
- list(列表): Redis的列表是简单的字符串列表, 一个列表最多可以包含2^32-1个元素
- set(集合): Redis中的集合是String类型的无序集合, 不能出现重复(相同)的成员, 集合中最大的成员数为2^32 -1
- zset(sorted set: 有序集合): 类似于集合, 但是每个元素都有一个分数(score)与之关联,是string类型元素的集合, 不允许出现重复的成员, 每个成员会关联一个double类型的分数, 并按该分数从小到大排序, 不同成员分数可以相同, 集合中最大的成员数为2^32 -1
- 位图(Bitmaps): 基于字符串类型, 可以对每个位进行操作
- 超日志(HyperLogLogs): 用于基数统计, 可以估算集合中的唯一元素数量
- 地理空间(Geospatial): 用于存储地理位置信息
- 发布/订阅(Pub/Sub): 一种消息通信模式, 允许客户端订阅消息通道, 并接收发布到该通道的消息
- 流(Streams): 用于消息队列和日志存储, 支持消息的持久化和时间排序
- 模块(Modules): Redis 支持动态加载模块, 可以扩展 Redis 的功能
字符串命令
- 设置键的值:
SET <key> <value>
(<2.6.12总是返回OK; >=2.6.12在设置操作完成时才返回OK) - 获取键的值:
GET <key>
(若键不存在返回nil;若值不是字符串则返回error)
哈希命令
- 删除字段:
HDEL <key> <field1> ...
(返回被成功删除字段的数量) - 查看指定字段是否存在:
HEXISTS <key> <field>
(存在则返回1;不存在 或 key不存在返回0) - 获取指定字段值:
HGET <key> <field>
(若 字段不存在 或 key不存在 则返回nil) - 获取所有字段及其值:
HGETALL <key>
(返回列表; 若key不存在 返回空列表)
列表命令
- 移出并获取第一个元素:
LPOP <key1>
(成功则返回元素值; key不存在则返回nil) - 移出并获取最后一个元素:
RPOP <key1>
(成功则返回元素值; key不存在则返回nil) - 移出并获取第一个元素(堵塞):
BLPOP <key1> ... <timeout>
如果没有元素则会阻塞列表直到等待超时或发现可弹出元素为止 (成功则返回 由 key与元素值 组成的列表; 失败则则返回一个 nil 和等待时长) - 移出并获取最后一个元素(堵塞):
BRPOP <key1> ... <timeout>
如果没有元素则会阻塞列表直到等待超时或发现可弹出元素为止 (成功则返回 由 key与元素值 组成的列表; 失败则则返回一个 nil 和等待时长)
集合命令
- 添加成员:
SADD <key> <member1> ...
(返回成功添加的元素数) - 获取成员数:
SCARD <key>
(key不存在时返回0)
有序集合命令
- 添加成员(或更新已有成员分数):
ZADD <key> <score1> <member1> ...
(返回成功添加的 新成员数) - 获取成员数:
ZCARD <key>
(当key不存在时, 返回0)
-- 其它 --
配置项目录
--- | ||||
---|---|---|---|---|
requirepass "" | 连接密码, 若配置了密码, 客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码后才可执行其它命令, 默认关闭 |
|||
dir /var/lib/redis | 指定本地数据库存放目录 | |||
port 6379 | 指定Redis监听端口 | |||
bind 127.0.0.1 | 绑定的主机地址 | |||
timeout 300 | 当客户端闲置多长秒后关闭连接, 如果指定为0, 表示关闭该功能 | |||
daemonize no | 是否以守护进程方式运行(非windows默认为no) (Windows 不存在该配置, 默认以守护进程方式运行) |
|||
pidfile /var/run/redis.pid | 以守护进程方式运行时, 默认会把pid写入 /var/run/redis.pid文件 | |||
loglevel notice | 指定日志记录级别, Redis 总共支持四个级别:debug verbose notice warning | |||
logfile stdout | 日志记录方式, 默认为标准输出, 如果配置 Redis 为守护进程方式运行, 而这里又配置为日志记录方式为标准输出, 则日志将会发送给 /dev/null | |||
databases 16 | 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id | |||
save <seconds> <changes>
Redis 默认配置文件中提供了三个条件: save 900 1 save 300 10 save 60 10000 分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改. |
指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合 | |||
rdbcompression yes | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大 | |||
dbfilename dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb | |||
slaveof |
设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步 | |||
masterauth |
当 master 服务设置了密码保护时,slave 服务连接 master 的密码 | |||
maxclients 128 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制.当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 | |||
maxmemory |
指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作.Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区 | |||
appendonly no | 指定是否在每次更新操作后进行日志记录,Redis 在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失.因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中.默认为 no | |||
appendfilename appendonly.aof | 指定更新日志文件名,默认为 appendonly.aof | |||
appendfsync everysec | 指定更新日志条件,共有 3 个可选值:
- no:表示等操作系统进行数据缓存同步到磁盘(快) |
|||
vm-enabled no | 指定是否启用虚拟内存机制,默认值为 no,简单的介绍一下,VM 机制将数据分页存放,由 Redis 将访问量较少的页即冷数据 swap 到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析 Redis 的 VM 机制) | |||
vm-swap-file /tmp/redis.swap | 虚拟内存文件路径,默认值为 /tmp/redis.swap,不可多个 Redis 实例共享 | |||
vm-max-memory 0 | 将所有大于 vm-max-memory 的数据存入虚拟内存,无论 vm-max-memory 设置多小,所有索引数据都是内存存储的(Redis 的索引数据 就是 keys),也就是说,当 vm-max-memory 设置为 0 的时候,其实是所有 value 都存在于磁盘.默认值为 0 | |||
vm-page-size 32 | Redis swap 文件分成了很多的 page,一个对象可以保存在多个 page 上面,但一个 page 上不能被多个对象共享,vm-page-size 是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page 大小最好设置为 32 或者 64bytes;如果存储很大大对象,则可以使用更大的 page,如果不确定,就使用默认值 | |||
vm-pages 134217728 | 设置 swap 文件中的 page 数量,由于页表(一种表示页面空闲或使用的 bitmap)是在放在内存中的,,在磁盘上每 8 个 pages 将消耗 1byte 的内存. | |||
vm-max-threads 4 | 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟.默认值为4 | |||
glueoutputbuf yes | 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启 | |||
hash-max-zipmap-entries 64 hash-max-zipmap-value 512 |
指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法 | |||
activerehashing yes | 指定是否激活重置哈希,默认为开启(后面在介绍 Redis 的哈希算法时具体介绍) | |||
include /path/to/local.conf | 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件 | |||
键命令目录
--- | ||||
---|---|---|---|---|
2 | DUMP key 序列化给定 key ,并返回被序列化的值。 |
|||
3 | EXISTS key 检查给定 key 是否存在。 |
|||
4 | EXPIRE key seconds 为给定 key 设置过期时间,以秒计。 |
|||
5 | EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 |
|||
6 | PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。 |
|||
7 | PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 |
|||
8 | KEYS pattern 查找所有符合给定模式( pattern)的 key 。 |
|||
9 | MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。 |
|||
10 | PERSIST key 移除 key 的过期时间,key 将持久保持。 |
|||
11 | PTTL key 以毫秒为单位返回 key 的剩余的过期时间。 |
|||
12 | TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 |
|||
13 | RANDOMKEY 从当前数据库中随机返回一个 key 。 |
|||
14 | RENAME key newkey 修改 key 的名称 |
|||
15 | RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。 |
|||
16 | SCAN cursor [MATCH pattern] [COUNT count] 迭代数据库中的数据库键。 |
|||
17 | TYPE key 返回 key 所储存的值的类型。 |
服务器命令目录
--- | ||||
---|---|---|---|---|
1 | BGREWRITEAOF 异步执行一个 AOF(AppendOnly File) 文件重写操作 |
|||
2 | BGSAVE 在后台异步保存当前数据库的数据到磁盘 |
|||
3 | CLIENT KILL [ip:port] [ID client-id] 关闭客户端连接 |
|||
4 | CLIENT LIST 获取连接到服务器的客户端连接列表 |
|||
5 | CLIENT GETNAME 获取连接的名称 |
|||
6 | CLIENT PAUSE timeout 在指定时间内终止运行来自客户端的命令 |
|||
7 | CLIENT SETNAME connection-name 设置当前连接的名称 |
|||
8 | CLUSTER SLOTS 获取集群节点的映射数组 |
|||
9 | COMMAND 获取 Redis 命令详情数组 |
|||
10 | COMMAND COUNT 获取 Redis 命令总数 |
|||
11 | COMMAND GETKEYS 获取给定命令的所有键 |
|||
12 | TIME 返回当前服务器时间 |
|||
13 | COMMAND INFO command-name [command-name ...] 获取指定 Redis 命令描述的数组 |
|||
14 | CONFIG GET parameter 获取指定配置参数的值 |
|||
15 | CONFIG REWRITE 对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写 |
|||
16 | CONFIG SET parameter value 修改 redis 配置参数,无需重启 |
|||
17 | CONFIG RESETSTAT 重置 INFO 命令中的某些统计数据 |
|||
18 | DBSIZE 返回当前数据库的 key 的数量 |
|||
19 | DEBUG OBJECT key 获取 key 的调试信息 |
|||
20 | DEBUG SEGFAULT 让 Redis 服务崩溃 |
|||
21 | FLUSHALL 删除所有数据库的所有key |
|||
22 | FLUSHDB 删除当前数据库的所有key |
|||
23 | INFO [section] 获取 Redis 服务器的各种信息和统计数值 |
|||
24 | LASTSAVE 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |
|||
25 | MONITOR 实时打印出 Redis 服务器接收到的命令,调试用 |
|||
26 | ROLE 返回主从实例所属的角色 |
|||
27 | SAVE 同步保存数据到硬盘 |
|||
28 | SHUTDOWN [NOSAVE] [SAVE] 异步保存数据到硬盘,并关闭服务器 |
|||
29 | SLAVEOF host port 将当前服务器转变为指定服务器的从属服务器(slave server) |
|||
30 | SLOWLOG subcommand [argument] 管理 redis 的慢日志 |
|||
31 | SYNC 用于复制功能(replication)的内部命令 |
字符串命令目录
--- | ||||
---|---|---|---|---|
3 | GETRANGE key start end 返回 key 中字符串值的子字符 |
|||
4 | GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
|||
5 | GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
|||
6 | MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。 |
|||
7 | SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
|||
8 | SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
|||
9 | SETNX key value 只有在 key 不存在时设置 key 的值。 |
|||
10 | SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |
|||
11 | STRLEN key 返回 key 所储存的字符串值的长度。 |
|||
12 | MSET key value [key value ...] 同时设置一个或多个 key-value 对。 |
|||
13 | MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
|||
14 | PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |
|||
15 | INCR key 将 key 中储存的数字值增一。 |
|||
16 | INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。 |
|||
17 | INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。 |
|||
18 | DECR key 将 key 中储存的数字值减一。 |
|||
19 | DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。 |
|||
20 | APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。 |
哈希命令目录
--- | ||||
---|---|---|---|---|
5 | HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。 |
|||
6 | HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 |
|||
7 | HKEYS key 获取哈希表中的所有字段 |
|||
8 | HLEN key 获取哈希表中字段的数量 |
|||
9 | HMGET key field1 [field2] 获取所有给定字段的值 |
|||
10 | HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。 |
|||
11 | HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。 |
|||
12 | HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。 |
|||
13 | HVALS key 获取哈希表中所有值。 |
|||
14 | HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。 |
列表命令目录
--- | |||||
---|---|---|---|---|---|
3 | BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
||||
4 | LINDEX key index 通过索引获取列表中的元素 |
||||
5 | [LINSERT key BEFORE | AFTER pivot value](https://www.runoob.com/redis/lists-linsert.html) 在列表的元素前或者后插入元素 |
|||
6 | LLEN key 获取列表长度 |
||||
8 | LPUSH key value1 [value2] 将一个或多个值插入到列表头部 |
||||
9 | LPUSHX key value 将一个值插入到已存在的列表头部 |
||||
10 | LRANGE key start stop 获取列表指定范围内的元素 |
||||
11 | LREM key count value 移除列表元素 |
||||
12 | LSET key index value 通过索引设置列表元素的值 |
||||
13 | LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
||||
15 | RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
||||
16 | RPUSH key value1 [value2] 在列表中添加一个或多个值到列表尾部 |
||||
17 | RPUSHX key value 为已存在的列表添加值 |
集合命令目录
--- | ||||
---|---|---|---|---|
3 | SDIFF key1 [key2] 返回第一个集合与其他集合之间的差异。 |
|||
4 | SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中 |
|||
5 | SINTER key1 [key2] 返回给定所有集合的交集 |
|||
6 | SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中 |
|||
7 | SISMEMBER key member 判断 member 元素是否是集合 key 的成员 |
|||
8 | SMEMBERS key 返回集合中的所有成员 |
|||
9 | SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合 |
|||
10 | SPOP key 移除并返回集合中的一个随机元素 |
|||
11 | SRANDMEMBER key [count] 返回集合中一个或多个随机数 |
|||
12 | SREM key member1 [member2] 移除集合中一个或多个成员 |
|||
13 | SUNION key1 [key2] 返回所有给定集合的并集 |
|||
14 | SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中 |
|||
15 | SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素 |