7.Redis安全(创建用户)、数据备份与恢复、管道技术、分区

目录


Redis专栏目录(点击进入…)



Redis安全(创建用户)、数据备份与恢复、管道技术、分区

Redis安全(创建用户)

可以通过redis的配置文件设置密码参数,这样客户端连接到redis服务就需要密码验证,这样可以让redis服务更安全。

通过命令查看是否设置了密码验证:

CONFIG GET requirepass

默认情况下requirepass参数是空的,这就意味着无需通过密码验证就可以连接到redis服务

设置密码

可以通过以下命令来修改该参数

CONFIG SET requirepass “admin”

设置密码为admin后,客户端连接redis服务就需要密码验证,否则无法执行命令

AUTH(解锁)

AUTH命令解锁,解锁之后才能使用其他Redis命令。

如果AUTH命令给定的密码password和配置文件中的密码相符的话,服务器会返回OK并开始接受命令输入。另一方面,假如密码不匹配的话,服务器将返回一个错误,并要求客户端需重新输入密码。因为Redis高性能的特点,在很短时间内尝试猜测非常多个密码是有可能的,因此请确保使用的密码足够复杂和足够长,以免遭受密码猜测攻击

# 设置密码
redis> CONFIG SET requirepass secret_password   # 将密码设置为secret_password
OK
redis> QUIT                                     # 退出连接,让新密码对客户端生效
redis 127.0.0.1:6379> redis
redis> PING                                     # 未验证密码,操作被拒绝
(error) ERR operation not permitted
redis> AUTH wrong_password_testing              # 尝试输入错误的密码
(error) ERR invalid password
redis> AUTH secret_password                     # 输入正确的密码
OK
redis> PING                                     # 密码验证成功,可以正常操作命令了
PONG

数据备份与恢复

备份数据

(1)SAVE
用于创建当前数据库的备份

redis 127.0.0.1:6379> SAVE 
OK

该命令将在redis安装目录中创建dump.rdb文件

(2)Bgsave
创建redis备份文件也可以使用命令BGSAVE,该命令在后台执行


恢复数据

如果需要恢复数据,只需将备份文件(dump.rdb)移动到redis安装目录并启动服务即可

获取redis目录可以使用CONFIG GET命令

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "E:\\Mysoftware\\Redis"

CONFIG GET dir:输出的redis安装目录为E:\Mysoftware\Redis


客户端连接数

Redis通过监听一个TCP端口或者Unix socket的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
(1)首先,客户端socket会被设置为非阻塞模式,因为Redis在网络事件处理上采用的是非阻塞多路复用模型
(2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法
(3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送

最大连接数

在Redis 2.4中,最大连接数是被直接硬编码在代码里面;而在2.6版本后这个值变成可配置
maxclients的默认值是10000,也可以在redis.conf中对这个值进行修改
(1)得到最大连接数:CONFIG GET maxclients
(2)设置最大连接数:CONFIG SET maxclients

以下在服务启动时设置最大连接数为100:

redis-server  --maxclients  100

客户端命令

S.N.命令描述
1CLIENT LIST返回连接到redis服务的客户端列表
2CLIENT SETNAME设置当前连接的名称
3CLIENT GETNAME获取通过CLIENT SETNAME命令设置的服务名称
4CLIENT PAUSE挂起客户端连接,指定挂起的时间以毫秒计
5CLIENT KILL关闭客户端连接

管道技术

Redis是一种基于客户端 <–> 服务端模型以及请求/响应协议的TCP服务

Redis管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应

通常情况下一个请求会遵循以下步骤
(1)客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应
(2)服务端处理命令,并将结果返回给客户端

分区

分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集

优势

(1)通过利用多台计算机内存的和值,允许构造更大的数据库
(2)通过多核和多台计算机,允许扩展计算能力;通过多台计算机和网络适配器,允许扩展网络带宽

不足

redis的一些特性在分区方面表现的不是很好
(1)涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,就不能对这两个set执行交集操作
(2)涉及多个key的redis事务不能使用
(3)当使用分区时,数据处理较为复杂,比如需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件
(4)增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的

分区类型

Redis有两种类型分区。假设有4个Redis实例R0、R1、R2、R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。

①范围分区

最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。
比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。
这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。

②哈希分区

另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:
(1)用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
(2)对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。
注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值