Redis基础
Redis基础知识
Redis CentOS7下安装
Redis的安装,有epel和remi两个yum源可选。当然也可以选择从源码安装。
如下介绍epel和remi的两种安装方式。
EPEL安装
CentOS 7中EPEL中redis最新的版本是3.2.12-2
安装命令如下:
1 | sudo yum install epel-release yum-utils |
REMI安装
remi-release-7中redis最新的版本是6.0.5
安装命令如下:
1 | sudo yum install epel-release yum-utils |
基本配置
配置访问密码
配置
在/etc/redis.conf中修改requirepass master_password, 将master_password换成所要配置的密码。
注意: 配置文件中描述, redis每秒可以承受150k的密码撞击,所以务必将密码设置的极为复杂。
Warning: since Redis is pretty fast an outside user can try up to
150k passwords per second against a good box. This means that you should
use a very strong password otherwise it will be very easy to break.
因为密码显示的存在配置文件中,因此不用担心会忘记密码,尽可能的使用复杂密码,
网上一个使用sha256sum来生成强密码的方法 How to Install and Secure Redis on Centos7
1 | [root@localhost lib]# echo "hello-world" | sha256sum |
试验
cli中使用AUTH来输入密码。
1 | [root@localhost ~]# redis-cli |
没有密码时,执行命令会报错
1 | [root@localhost ~]# redis-cli |
访问安全
Redis Security中有相关描述。
Redis is designed to be accessed by trusted clients inside trusted environments.
Redis设计的用途就是在信任环境中使用的,因此自身没有用户系统和访问控制机制。
redis默认的安全设定
/etc/redis.conf配置中,默认bind 127.0.0.1,即只能从本地访问redis- 从3.2.0开始,Protected mode默认是启动的,默认配置
protected-mode yes。在这个模式中,只有来自loopback interface的请求才会被响应,其他地址的请求会被返回错误。
外部控制
如果redis需要对外提供服务,那么需要在bind后面加上绑定的本机IP, 例如:
1 | bind 127.0.0.1 192.168.187.182 |
但因为redis除了密码以外,没有其他的访问控制机制。因此需要依赖于系统防火墙进行访问控制,比如设置访问白名单。
1 | sudo firewall-cmd --new-zone=redis --permanent |
配置持久化
配置说明
持久化目录, 由/etc/redis.conf中dir 配置, 配置的解释
1 | # The working directory. |
其中epel中安装的redis,默认目录是/var/lib/redis.
修改方法
修改redis目录为/opt/app/redis的方法如下。
创建目录
1 | sudo mkdir -p /opt/app/redis |
修改/etc/redis.conf中dir参数为/opt/app/redis
1 | dir /opt/app/redis |
重启redis
1 | systemctl restart redis |
异常
如果切换了dir的目录,但执行save命令时失败,log中有Permission denied的错误时。
1 | Failed opening the RDB file dump.rdb (in server root dir /opt/app/redis) for saving: Permission denied |
有可能的原因:
- 目录没有设置为redis账户可读写
- 开启了selinux所致。
配置日志地址
修改配置中logfile的值。epel安装的redis,默认值为/var/log/redis/redis.log.
1 | logfile /var/log/redis/redis.log |
常用命令
基本操作
- DEL key: 该命令用于在 key 存在时删除 key。
- DUMP key: 序列化给定 key ,并返回被序列化的值。
- EXISTS key: 检查给定 key 是否存在。
- EXPIRE key seconds: 为给定 key 设置过期时间。
- EXPIREAT key timestamp: EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
- PEXPIRE key milliseconds: 设置 key 的过期时间以毫秒计。
- PEXPIREAT key milliseconds-timestamp: 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
- KEYS pattern: 查找所有符合给定模式( pattern)的 key 。
- MOVE key db: 将当前数据库的 key 移动到给定的数据库 db 当中。
- PERSIST key: 移除 key 的过期时间,key 将持久保持。
- PTTL key: 以毫秒为单位返回 key 的剩余的过期时间。
- TTL key: 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
- RANDOMKEY: 从当前数据库中随机返回一个 key 。
- RENAME key newkey: 修改 key 的名称
- RENAMENX key newkey: 仅当 newkey 不存在时,将 key 改名为 newkey 。
- TYPE key: 返回 key 所储存的值的类型。
基本命令小实验
设置和获取key,设置key的过期时间,获取key的过期时间。
1 | 127.0.0.1:6379> set testkey "testvalue" |
TTL命令
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
实验过程:
1 | 127.0.0.1:6379> get testkey # 获取testkey,还没设置,返回nil |
key 的变动
1 | 127.0.0.1:6379> keys * # 获取所有的key,为空。 |