Redis学习笔记

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

4)切换用户,验证权限

相关推荐
Code额1 小时前
缓存 “三剑客”
redis·缓存
珹洺1 小时前
C++从入门到实战(十)类和对象(最终部分)static成员,内部类,匿名对象与对象拷贝时的编译器优化详解
java·数据结构·c++·redis·后端·算法·链表
lwewan7 小时前
26考研——栈、队列和数组_数组和特殊矩阵(3)
数据结构·笔记·考研·算法
wei3872452328 小时前
java笔记02
java·开发语言·笔记
nuc-1278 小时前
sqli-labs学习记录8
数据库·学习·sqli-labs
士别三日&&当刮目相看9 小时前
JAVA学习*简单的代理模式
java·学习·代理模式
要天天开心啊9 小时前
MyBatis第二天笔记
笔记·tomcat·mybatis
枫林血舞9 小时前
python笔记之函数
笔记·python
今夜有雨.9 小时前
HTTP---基础知识
服务器·网络·后端·网络协议·学习·tcp/ip·http