redis简介
资源:
-
https://redis.io/
https://redis.io/download/
http://redisdoc.com/
特点:
- 速度快
- 支持多种数据结构
- 持久化
- 主从复制
- 支持过期时间
- 支持事务
- 消息订阅
- 官方不支持windows,但是有第三方版本
应用场景:
- 数据缓存 --提高访问性能,使用的方式与memcache相同
- 会话缓存(Session Cache) --保存web会话信息,与cookie,session相比,因为有slb的原因,用redis更适合
- 排行榜/计数器 --Nginx+lua+Redis计数器进行ip自动封禁
- 消息队列 --构建实时消息系统,聊天,群聊

redis安装与多实例
安装配置:
yum安装,如果起不来,请参考日志信息
[root@Poppy ~]# yum install redis [root@Poppy ~]# systemctl status redis.service [root@Poppy ~]# vi /etc/redis.conf [root@Poppy ~]# cat /var/log/redis/redis.log [root@Poppy ~]# chown -R redis.redis /var/log/redis/redis.log [root@Poppy ~]# systemctl start redis.service [root@Poppy ~]# systemctl status redis
编译安装,可以设置多目录,改不同端口可实现多redis实例共存
[root@Poppy ~]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz [root@Poppy ~]# mv redis-3.2.6.tar.gz /data/ [root@Poppy ~]# cd /data/ [root@Poppy ~]# mkdir redis6380 [root@Poppy ~]# tar -zxf redis-3.2.6.tar.gz -C redis6380/ [root@Poppy ~]# cd redis6380/ [root@Poppy ~]# cd redis-3.2.6/ [root@Poppy ~]# make [root@Poppy ~]# cp redis.conf ../ [root@Poppy ~]# cp src/redis-server ../
配置文件redis.conf里面修改

启动redis
[root@Poppy redis6380]# ./redis-server ./redis.conf [root@Poppy redis6380]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 60.205.188.107:6666 0.0.0.0:* LISTEN 14584/java tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 18969/redis-server tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 25154/./redis-serve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2213/sshd
访问redis
[root@Poppy ~]# redis-cli 6379 [root@Poppy ~]# ./redis-cli -p 6380 编译目录下src下有这个命令 [root@Poppy ~]# redis-cli -h 127.0.0.1 -p 6380 通过netstart -ntlp查看绑定在哪个ip上
退出访问终端和在终端停止redis
[root@Poppy redis6380]# redis-cli -p 6380 127.0.0.1:6380> exit [root@Poppy redis6380]# redis-cli -p 6380 127.0.0.1:6380> SHUTDOWN not connected> exit
Bind 保护模式,认证机制
- Redis 3.2新特性 -解决访问安全
- Bind -指定ip进行监听bind 192.168.1.xxx
- 启用保护模式protected-mode -protected-mode yes/no
- 增加requirepass {password} -requirepass poppy
- 在redis-cli中使用 -auth {password}进行认证

客户端登录
[root@Poppy redis6380]# kill -9 25378 [root@Poppy redis6380]# ./redis-server ./redis.conf [root@Poppy redis6380]# redis-cli -p 6380 127.0.0.1:6380> get foo (error) NOAUTH Authentication required. 127.0.0.1:6380> auth poppy OK
运行配置
- 获取当前配置 config get*
- 变更运行配置 config set loglevel 'notice'
客户端进入后,可输入上述命令查看,运行配置变更重启失效
redis数据存储

持久化

持久化策略

压缩

同步

常规操作与数据类型

字符串操作

哈希操作

列表操作

集合操作

生产消费模型

list数据类型生产包子,删除包子
redis发布订阅

订阅发布实例

redis事务

事务命令


服务器命令

慢日志查询

数据备份
![]()
主从复制
在官方文档里面查找方法
危险 Redis 命令
Redis 稍微有点使用经验的人都知道线上是不能执行 keys * 相关命令的,虽然其模糊匹配功能使用非常方便也很强大,在小数据量情况下使用没什么问题,数据量大会导致 Redis 锁住及 CPU 飙升,在生产环境建议禁用或者重命名!
还有哪些危险命令?
Redis 的危险命令主要有以下几个:
-
keys
客户端可查询出所有存在的键。
-
flushdb
Delete all the keys of the currently selected DB. This command never fails.
删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败。
-
flushall
Delete all the keys of all the existing databases, not just the currently selected one. This command never fails.
删除 Redis 中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。
-
config
客户端可修改 Redis 配置。
怎么禁用或重命名危险命令?
看下 redis.conf 默认配置文件,找到 SECURITY 区域,如以下所示。
################################## SECURITY ################################### # Require clients to issue AUTH <PASSWORD> before processing any other # commands. This might be useful in environments in which you do not trust # others with access to the host running redis-server. # # This should stay commented out for backward compatibility and because most # people do not need auth (e.g. they run their own servers). # # 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. # # requirepass foobared # Command renaming. # # It is possible to change the name of dangerous commands in a shared # environment. For instance the CONFIG command may be renamed into something # hard to guess so that it will still be available for internal-use tools # but not available for general clients. # # Example: # # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # # It is also possible to completely kill a command by renaming it into # an empty string: # # rename-command CONFIG "" # # Please note that changing the name of commands that are logged into the # AOF file or transmitted to slaves may cause problems.
看说明,添加 rename-command 配置即可达到安全目的。
1)禁用命令
rename-command KEYS "" rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG ""
2)重命名命令
rename-command KEYS "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command FLUSHALL "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command FLUSHDB "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command CONFIG "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
上面的 XX 可以定义新命令名称,或者用随机字符代替。
经过以上的设置之后,危险命令就不会被客户端执行了。