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 可以定义新命令名称,或者用随机字符代替。

经过以上的设置之后,危险命令就不会被客户端执行了。

  

原文地址:https://www.cnblogs.com/jokerbj/p/10257383.html