REDIS集群
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 可以定义新命令名称,或者用随机字符代替。
经过以上的设置之后,危险命令就不会被客户端执行了。