Redis 环境搭建及运行
安装(Ubuntu)
shell
apt-get update && apt-get install redis-server -y
启动 redis
shell
redis-server &
注:加上 &
是让 redis-server
运行在后台,按 enter
后,即可不阻塞当前终端。
redis 自带客户端连接 redis-server
shell
redis-cli
Redis 连接与安全验证
查看 Key 数量
查询当前库的key数量
shell
dbsize
redis 设置 pass 验证
Redis数据库可以使用安全的方案,使得进行连接的任何客户端在执行命令之前都需要进行身份验证。
要保护Redis安全,需要在配置文件中设置密码。
查看密码配置
shell
CONFIG get requirepass
默认情况下此属性为空,这表示还没有为此实例设置密码。您可以通过执行以下命令更改此属性。如下所示:
1) "requirepass"
2) ""
进行密码配置
shell
CONFIG sceltoud requirepass "AAbb123456="
注:pwd-store-in-server
是你设置的密码
shell
CONFIG get requirepass
设置密码后,如果任何客户端运行命令而不进行身份验证,则会返回一个 (error) NOAUTH Authentication required.
的错误信息。 因此,客户端需要使用AUTH命令来验证。
AUTH命令语法
shell
AUTH YourNewPassword
Redis连接命令
下表列出了与Redis连接相关的一些基本命令。
shell
redis-cli
序号 | 命令 | 说明 |
---|---|---|
1 | AUTH password | 使用给定的密码验证服务器 |
2 | ECHO message | 打印给定的字符串信息 |
3 | PING | 检查服务器是否正在运行 |
4 | QUIT | 关闭当前连接 |
5 | SELECT index | 更改当前连接的所选数据库 |
在远程服务器上运行命令
要在Redis远程服务器上运行命令,需要通过客户端redis-cli
连接到服务器
语法:
redis-cli -h host -p port -a password
host
: 主机port
: 端口password
: 密码
举例:
shell
redis-cli -h 127.0.0.1 -p 6379 -a 123456
Redis 数据结构-键(key)
Redis
键命令用于管理 Redis 中的键。以下是使用redis键命令的语法。
sql
COMMAND KEY_NAME
Redis键命令
下表列出了与键相关的一些基本命令。
编号 | 命令 | 描述 |
---|---|---|
1 | DEL key | 此命令删除一个指定键(如果存在)。 |
2 | DUMP key | 此命令返回存储在指定键的值的序列化版本。 |
3 | EXISTS key | 此命令检查键是否存在。 |
4 | EXPIRE key seconds | 设置键在指定时间秒数之后到期/过期。 |
5 | EXPIREAT key timestamp | 设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式。 |
6 | PEXPIRE key milliseconds | 设置键的到期时间(以毫秒为单位)。 |
7 | PEXPIREAT key milliseconds-timestamp | 以Unix时间戳形式来设置键的到期时间(以毫秒为单位)。 |
8 | KEYS pattern | 查找与指定模式匹配的所有键。 |
9 | MOVE key db | 将键移动到另一个数据库。 |
10 | PERSIST key | 删除指定键的过期时间,得永生。 |
11 | PTTL key | 获取键的剩余到期时间。 |
12 | RANDOMKEY | 从Redis返回一个随机的键。 |
13 | RENAME key newkey | 更改键的名称。 |
14 | PTTL key | 获取键到期的剩余时间(以毫秒为单位)。 |
15 | RENAMENX key newkey | 如果新键不存在,重命名键。 |
16 | TYPE key | 返回存储在键中的值的数据类型。 |
Redis 数据结构-字符串(string)
Redis字符串命令
下表列出了一些用于在 Redis 中管理字符串的基本命令。
编号 | 命令 | 描述说明 |
---|---|---|
1 | SET key value | 此命令设置指定键的值。 |
2 | GET key | 获取指定键的值。 |
3 | GETRANGE key start end | 获取存储在键上的字符串的子字符串。 |
4 | GETSET key value | 设置键的字符串值并返回其旧值。 |
5 | GETBIT key offset | 返回在键处存储的字符串值中偏移处的位值。 |
6 | MGET key1 [key2...] | 获取所有给定键的值 |
7 | SETBIT key offset value | 存储在键上的字符串值中设置或清除偏移处的位 |
8 | SETEX key seconds value | 使用键和到期时间来设置值 |
9 | SETNX key value | 设置键的值,仅当键不存在时 |
10 | SETRANGE key offset value] | 在指定偏移处开始的键处覆盖字符串的一部分 |
11 | STRLEN key | 获取存储在键中的值的长度 |
12 | MSET key value [key value ...] | 为多个键分别设置它们的值 |
13 | MSETNX key value [key value ...] | 为多个键分别设置它们的值,仅当键不存在时 |
14 | PSETEX key milliseconds value | 设置键的值和到期时间(以毫秒为单位) |
15 | INCR key | 将键的整数值增加1 |
16 | INCRBY key increment | 将键的整数值按给定的数值增加 |
17 | INCRBYFLOAT key increment | 将键的浮点值按给定的数值增加 |
18 | DECR key | 将键的整数值减1 |
19 | DECRBY key decrement | 按给定数值减少键的整数值 |
20 | APPEND key value | 将指定值附加到键 |
Redis 数据结构-哈希(hash)
Redis Hashes
是字符串字段和字符串值之间的映射(类似于PHP中的数组类型)。 因此,它们是表示对象的完美数据类型。
在Redis中,每个哈希(散列)可以存储多达4亿个键-值对。
Redis哈希命令
下表列出了与哈希/散列相关的一些基本命令。
序号 | 命令 | 说明 |
1 | HDEL key field2 [field2] | 删除一个或多个哈希字段。 |
2 | HEXISTS key field | 判断是否存在散列字段。 |
3 | HGET key field | 获取存储在指定键的哈希字段的值。 |
4 | HGETALL key | 获取存储在指定键的哈希中的所有字段和值 |
5 | HINCRBY key field increment | 将哈希字段的整数值按给定数字增加 |
6 | HINCRBYFLOAT key field increment | 将哈希字段的浮点值按给定数值增加 |
7 | HKEYS key | 获取哈希中的所有字段 |
8 | HLEN key | 获取散列中的字段数量 |
9 | HMGET key field1 [field2] | 获取所有给定哈希字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] | 为多个哈希字段分别设置它们的值 |
11 | HSET key field value | 设置散列字段的字符串值 |
12 | HSETNX key field value | 仅当字段不存在时,才设置散列字段的值 |
13 | HVALS key |
Redis 数据结构-列表(list)
Redis
列表只是字符串列表,按插入顺序排序。可以在列表的头部或尾部添加Redis
列表中的元素。
列表的最大长度为 2^32 - 1
个元素(即 4294967295
,每个列表可存储超过40亿个元素)。
Redis列表命令
下表列出了与列表相关的一些基本命令。
序号 | 命令 | 说明 |
---|---|---|
1 | BLPOP key1 [key2 ] timeout | 删除并获取列表中的第一个元素,或阻塞,直到有一个元素可用 |
2 | BRPOP key1 [key2 ] timeout | 删除并获取列表中的最后一个元素,或阻塞,直到有一个元素可用 |
3 | BRPOPLPUSH source destination timeout | 从列表中弹出值,将其推送到另一个列表并返回它; 或阻塞,直到一个可用 |
4 | LINDEX key index] | 通过其索引从列表获取元素 |
5 | LINSERT key BEFORE/AFTER pivot value | 在列表中的另一个元素之前或之后插入元素 |
6 | LLEN key | 获取列表的长度 |
7 | LPOP 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 | 修剪列表的指定范围 |
14 | RPOP key | 删除并获取列表中的最后一个元素 |
15 | RPOPLPUSH source destination | 删除列表中的最后一个元素,将其附加到另一个列表并返回 |
16 | RPUSH key value1 [value2] | 将一个或多个值附加到列表 |
17 | RPUSHX key value | 仅当列表存在时才将值附加到列表 |
Redis 数据结构-集合(set)
Redis
集合是唯一字符串的无序集合。 唯一值表示集合中不允许键中有重复的数据。
在 Redis
中设置添加,删除和测试成员的存在(恒定时间O(1),而不考虑集合中包含的元素数量)。列表的最大长度为 2^32 - 1
个元素(即4294967295,每组集合超过40亿个元素)。
Redis集合命令
下表列出了与集合相关的一些基本命令。
序号 | 命令 | 说明 |
---|---|---|
1 | SADD key member1 [member2] | 将一个或多个成员添加到集合 |
2 | SCARD key | 获取集合中的成员数 |
3 | SDIFF key1 [key2] | 减去多个集合 |
4 | SDIFFSTORE destination key1 [key2] | 减去多个集并将结果集存储在键中 |
5 | SINTER key1 [key2] | 相交多个集合 |
6 | SINTERSTORE destination key1 [key2] | 交叉多个集合并将结果集存储在键中 |
7 | SISMEMBER key member | 判断确定给定值是否是集合的成员 |
8 | SMOVE source destination member | 将成员从一个集合移动到另一个集合 |
9 | SPOP key | 从集合中删除并返回随机成员 |
10 | SRANDMEMBER key [count] | 从集合中获取一个或多个随机成员 |
11 | SREM key member1 [member2] | 从集合中删除一个或多个成员 |
12 | SUNION key1 [key2] | 添加多个集合 |
13 | SUNIONSTORE destination key1 [key2] | 添加多个集并将结果集存储在键中 |
14 | SSCAN key cursor [MATCH pattern] [COUNT count] | 递增地迭代集合中的元素 |
Redis 事务(transaction)
Redis
事务允许在单个步骤中执行一组命令。以下是事务的两个属性:
- 事务中的所有命令作为单个隔离操作并按顺序执行。不可以在执行
Redis
事务的中间向另一个客户端发出的请求。 Redis
事务也是原子的。原子意味着要么处理所有命令,要么都不处理。
语法示例
Redis
事务由命令 MULTI
命令启动,然后需要传递一个应该在事务中执行的命令列表,然后整个事务由 EXEC
命令执行。
sql
MULTI
List of commands here
EXEC
Redis事务命令
下表列出了与 Redis
事务相关的一些基本命令。
序号 | 命令 | 说明 |
---|---|---|
1 | DISCARD | 丢弃在MULTI之后发出的所有命令 |
2 | EXEC | 执行MULTI后发出的所有命令 |
3 | MULTI | 标记事务块的开始 |
4 | UNWATCH | 取消 WATCH 命令对所有 key 的监视。 |
5 | WATCH key [key ...] | 监视给定的键以确定MULTI / EXEC块的执行 |
Redis 脚本
Redis
脚本用于使用 Lua解释器
来执行脚本。从 Redis 2.6.0
版开始内置到Redis
中。使用脚本的命令是 EVAL 命令。
语法
以下是 EVAL
命令的基本语法。
sql
EVAL script numkeys key [key ...] arg [arg ...]
Redis事务命令
下表列出了与Redis脚本相关的一些基本命令。
序号 | 命令 | 说明 |
---|---|---|
1 | EVAL script numkeys key [key ...] arg [arg ...] | 执行一个Lua脚本。 |
2 | EVALSHA sha1 numkeys key [key ...] arg [arg ...] | 执行一个Lua脚本。 |
3 | SCRIPT EXISTS script [script ...] | 检查脚本缓存中是否存在脚本。 |
4 | SCRIPT FLUSH | 从脚本缓存中删除所有脚本。 |
5 | SCRIPT KILL | 杀死当前正在执行的脚本。 |
6 | SCRIPT LOAD script | 将指定的Lua脚本加载到脚本缓存中。 |
Redis 配置(redis.conf)
在 Redis
中,在 Redis
的根目录下有一个配置文件( redis.conf
)。当然您可以通过 Redis
CONFIG
命令获取和设置所有的 Redis 配置。
语法 以下是 Redis
中的 CONFIG
命令的基本语法。
sql
CONFIG GET CONFIG_SETTING_NAME
要获取所有配置设置,请使用
*
代替CONFIG_SETTING_NAME
编辑配置
要更新配置,可以直接编辑 redis.conf
文件,也可以通过 CONFIG set
命令更新配置。
语法 以下是 CONFIG SET
命令的基本语法。
sql
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
Redis 发送订阅(pub sub)
Redis
发布订阅( pub/sub
)是一种消息通信模式:发送者( pub
)发送消息,订阅者( sub
)接收消息。 Redis
发布订阅( pub/sub
)实现了消息系统,发送者(在 redis
术语中称为发布者)在接收者(订阅者)接收消息时发送消息。传送消息的链路称为信道。
在 Redis
中,客户端可以订阅任意数量的信道。
Redis发布订阅命令
下表列出了与 Redis
发布订阅相关的一些基本命令。
序号 | 命令 | 说明 |
---|---|---|
1 | PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合给定模式的频道。 |
2 | PUBSUB subcommand [argument [argument ...] | 查看订阅与发布系统状态。 |
3 | PUBLISH channel message | 将信息发送到指定的频道。 |
4 | PUNSUBSCRIBE [pattern [pattern ...] | 退订所有给定模式的频道。 |
5 | SUBSCRIBE channel [channel ...] | 订阅给定的一个或多个频道的信息。 |
6 | UNSUBSCRIBE [channel [channel ...] | 退订给定的频道。 |
因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。
可以通过修改 redis.conf 文件, 或者直接使用 CONFIG SET 命令来开启或关闭键空间通知功能:
当 notify-keyspace-events 选项的参数为空字符串时,功能关闭。
另一方面,当参数不是空字符串时,功能开启。
notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:

输入的参数中至少要有一个 K 或者 E , 否则的话, 不管其余的参数是什么, 都不会有任何通知被分发。
举个例子, 如果只想订阅键空间中和列表相关的通知, 那么参数就应该设为 Kl , 诸如此类。
将参数设为字符串 "AKE" 表示发送所有类型的通知。
Redis 基准测试(benchmark)
Redis
基准测试是通过同时运行 n
个命令来检查 Redis
的性能的实用程序。
语法
以下是基准测试命令的基本语法。
shell
redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
sql
redis-benchmark [option] [option value]
以下是Redis基准测试中可用选项的列表。
序号 | 选项 | 说明 | 默认值 |
1 | -h |
指定服务器主机名 | 127.0.0.1 |
2 | -p |
指定服务器端口 | 6379 |
3 | -s |
指定服务器套接字 | |
4 | -c |
指定并行连接的数量 | 50 |
5 | -n |
指定请求的总数 | 10000 |
6 | -d |
指定SET/GET 值的数据大小(以字节为单位) |
2 |
7 | -k |
1=keep alive, 0=reconnect | 1 |
8 | -r |
使用SET/GET/INCR 的随机键,SADD的随机值 |
|
9 | -p |
管道*[Math Processing Error]*请求 | 1 |
10 | -h |
指定服务器主机名 | |
11 | -q |
强制让Redis安装。 只显示query/sec 值 |
|
12 | --csv |
以CSV格式输出 | |
13 | -l |
生成循环,永久运行测试 | |
14 | -t |
只运行逗号分隔的测试列表 | |
15 | -I |
空闲模式。 只打开N个空闲连接并等待 |
示例1
以下示例通过调用100000
个命令检查Redis。
language-bash
redis-benchmark -n 100000
示例2
下面的示例显示了Redis基准实用程序中多个选项的使用。
language-bash
redis-benchmark -h 30.203.150.29 -p 10408 -a 'AAbb$1314520' -c 100 -n 20000 -r 100000 -d 100000 -l -q
bash
redis-benchmark -h 30.203.152.145 -p 16176 -a '!Jbjhhzstsl1' -n 100000 -r 100000 -c 888 -l -d 1024 --csv
shell
redis-benchmark -h 30.203.152.145 -p 16176 -a '!Jbjhhzstsl1' -c 100 -n 20000 -r 100000 -d 100000 -l --csv
示例3
bash
redis-trib.rb rebalance --password pa888888 --use-empty-masters 30.138.26.12:10090
redis-trib.rb rebalance --password pa888888 30.138.26.12:10090
redis-trib.rb check --password pa888888 30.138.26.12:10090
redis-trib.rb fix --password pa888888 30.138.26.12:10090
Redis
6.0功能更新
新增 ACL
命令
Redis ACL是 Access Control List
(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。
在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :
(1)接入权限:用户名和密码
(2)可以执行的命令
(3)可以操作的 KEY
1、使用acl list命令展现用户权限列表
2、使用acl cat命令
1)查看添加权限指令类别
2)加参数类型名可以查看类型下具体命令
3、使用acl whoami命令查看当前用户
4、使用aclsetuser命令创建和编辑用户ACL
1)ACL规则
下面是有效ACL规则的列表。某些规则只是用于激活或删除标志,或对用户ACL执行给定更改的单个单词。其他规则是字符前缀,它们与命令或类别名称、键模式等连接在一起。
2)通过命令创建新用户默认权限
acl setuser user1
在上面的示例中,我根本没有指定任何规则。如果用户不存在,这将使用just created的默认属性来创建用户。如果用户已经存在,则上面的命令将不执行任何操作。
3)设置有用户名、密码、ACL权限、并启用的用户
acl setuser user2 on >password ~cached:* +get