1 Redis版本特性介绍
这里安装6个redis,配置如下:
小知识点(Redis6.0.5):
如果需要安装单机版,需要安装指定的插件 yum -y install gcc gcc-c++ libstdc++-devel 升级gcc yum -y install centos-release-scl devtoolset-7 yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 切换gcc7 scl enable devtoolset-7 bash 单机版安装 解压redis-6.0.5.tar.gz tar -xf redis-6.0.5.tar.gz 进入到redis-6.0.5目录 cd redis-6.0.5 编译安装 make make install PREFIX=/usr/local/server/redis-cluster/redis redis.conf拷贝到安装bin目录下 cp /usr/local/server/redis-cluster/redis-6.0.5/redis.conf /usr/local/server/redis- cluster/redis/bin/ 修改redis.conf更改redis配置: 设置daemonize为yes 让redis支持后台启动 将protected-mode 改为no,远程连接就不需要账号密码了 bind 192.168.211.141
注意安装Redis6.x的时候一定要切换到gcc7再安装,否则会报如下错误:
切换语法:
scl enable devtoolset-7 bash
Redis我们采用Redis6.0.5最新版本,它有很多新特性,我们这里对Redis每个版本的特性介绍一下:
Redis2.6
Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下:
1)服务端支持Lua脚本。
2)去掉虚拟内存相关功能。
3)放开对客户端连接数的硬编码限制。
4)键的过期时间支持毫秒。
5)从节点支持只读功能。
6)两个新的位图命令:bitcount和bitop。
7)增强了redis-benchmark的功能:支持定制化的压测,CSV输出等功能。
8)基于浮点数自增命令:incrbyfloat和hincrbyfloat。
9)redis-cli可以使用–eval参数实现Lua脚本执行。
10)shutdown命令增强。
11)重构了大量的核心代码,所有集群相关的代码都去掉了,cluster功能将会是3.0版本最大的亮点。
12)info可以按照section输出,并且添加了一些统计项
13)sort命令优化
Redis2.8
Redis2.8在2013年11月22日正式发布,经历了24个版本,到2.8.24版本,相比于Redis2.6,主要特性如下:
1)添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成RDB对系统造成的压力。
2)尝试性的支持IPv6.
3)可以通过config set命令设置maxclients。
4)可以用bind命令绑定多个IP地址。
5)Redis设置了明显的进程名,方便使用ps命令查看系统进程。
6)config rewrite命令可以将config set持久化到Redis配置文件中。
7)发布订阅添加了pubsub。
8)Redis Sentinel第二版,相比于Redis2.6的Redis Sentinel,此版本已经变成生产可用。
Redis3.0(里程碑)
Redis3.0在2015年4月1日正式发布,相比于Redis2.8主要特性如下:
Redis最大的改动就是添加Redis的分布式实现Redis Cluster。
1)Redis Cluster:Redis的官方分布式实现。
2)全新的embedded string对象编码结果,优化小对象内存访问,在特定的工作负载下载速度大幅提升。
3)Iru算法大幅提升。
4)migrate连接缓存,大幅提升键迁移的速度。
5)migrate命令两个新的参数copy和replace。
6)新的client pause命令,在指定时间内停止处理客户端请求。
7)bitcount命令性能提升。
8)cinfig set设置maxmemory时候可以设置不同的单位(之前只能是字节)。
9)Redis日志小做调整:日志中会反应当前实例的角色(master或者slave)。
10)incr命令性能提升。
Redis3.2
Redis3.2在2016年5月6日正式发布,相比于Redis3.0主要特征如下:
1)添加GEO相关功能。
2)SDS在速度和节省空间上都做了优化。
3)支持用upstart或者systemd管理Redis进程。
4)新的List编码类型:quicklist。
5)从节点读取过期数据保证一致性。
6)添加了hstrlen命令。
7)增强了debug命令,支持了更多的参数。
8)Lua脚本功能增强。
9)添加了Lua Debugger。
10)config set 支持更多的配置参数。
11)优化了Redis崩溃后的相关报告。
12)新的RDB格式,但是仍然兼容旧的RDB。
13)加速RDB的加载速度。
14)spop命令支持个数参数。
15)cluster nodes命令得到加速。
16)Jemalloc更新到4.0.3版本。
Redis4.0
可能出乎很多的意料,Redis3.2之后的版本是4.0,而不是3.4、3.6、3.8。
一般这种重大版本号的升级也意味着软件或者工具本身发生了重大改革。下面是Redis4.0的新特性:
1)提供了模块系统,方便第三方开发者拓展Redis的功能。
2)PSYNC2.0:优化了之前版本中,主从节点切换必然引起全量复制的问题。
3)提供了新的缓存剔除算法:LFU(Last Frequently Used),并对已有算法进行了优化。
4)提供了非阻塞del和flushall/flushdb功能,有效解决删除了bigkey可能造成的Redis阻塞。
5)提供了memory命令,实现对内存更为全面的监控统计。
6)提供了交互数据库功能,实现Redis内部数据库的数据置换。
7)提供了RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优势。
8)Redis Cluster 兼容NAT和Docker。
Redis5.0
1.新的Stream数据类型。5.0
2.新的Redis模块API:Timers and Cluster API。
3. RDB现在存储LFU和LRU信息。
4.集群管理器从Ruby(redis-trib.rb)移植到C代码。可以在redis-cli中。查看redis-cli —cluster help
了解
更多信息。
5.新sorted set命令:ZPOPMIN / MAX和阻塞变量。
6.主动碎片整理V2。
7.增强HyperLogLog实现。
8.更好的内存统计报告。
9.许多带有子命令的命令现在都有一个HELP子命令。
10.客户经常连接和断开连接时性能更好。
11.错误修复和改进。
12. Jemalloc升级到5.1版
Redis6.0.5(里程碑)
1.ACL用户权限控制功能
2.RESP3:新的 Redis 通信协议
3.Cluster 管理工具
4.SSL 支持
5.IO多线程支持
6.新的Module API
7.新的 Expire 算法
8.Redis Cluster Proxy
9.Disque
2 Redis集群配置
现在安装对应的应用软件一般都推荐使用Docker容器,我们这里也不例外,直接使用Docker容器进行安装,安装大
概要分这几个步骤:
1、创建redis-cluster.tmpl配置Redis信息【端口、是否开启集群等】
2、创建redis.sh配置需要创建的redis信息
3、添加网络,redis集群使用该网络
4、执行redis.sh实现创建redis
5、执行redis-cli创建集群
配置Redis信息
创建 redis-cluster.tmpl 配置Redis信息(redis.conf)
#端口 port ${PORT} #非保护模式 protected-mode no #启用集群模式 cluster-enabled yes cluster-config-file nodes.conf #超时时间 cluster-node-timeout 5000 #集群各节点IP地址 cluster-announce-ip 192.168.211.141 #集群节点映射端口 cluster-announce-port ${PORT} #集群总线端口 cluster-announce-bus-port 1${PORT} #开启aof持久化策略 appendonly yes #后台运行 #daemonize yes #进程号存储 pidfile /var/run/redis_${PORT}.pid #集群加密 #masterauth itheima #requirepass itheima
Redis创建配置
创建 redis.sh 配置需要创建的 Redis 集群
#!/bin/bash #在/usr/local/server/redis-cluster下生成conf和data目标,并生成配置信息 for port in `seq 7001 7006`; do mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; done #创建6个redis容器 for port in `seq 7001 7006`; do docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/server/redis- cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/server/redis- cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; done #查找ip for port in `seq 7001 7006`; do echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis- net").IPAddress }}' "redis-${port}")":${port}" "; done #换行 echo -e "\n" #输入信息 read -p "请把输入要启动的docker容器名称,默认redis-7001:" DOCKER_NAME #判断是否为空 if [ ! $DOCKER_NAME ]; then DOCKER_NAME='redis-7001'; fi #进入容器 docker exec -it redis-7001 /bin/bash
这里涉及到了一个网络的定义 redis-net ,代码如下:
docker network create redis-net
移除脚本创建
创建 stop.sh 脚本,用于停止Redis容器,并且移除对应容器
#!/bin/bash docker stop redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 docker rm redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 rm -rf 7001 7002 7003 7004 7005 7006
脚本授权:给 redis.sh 和 stop.sh 添加可执行权限:
chmod +x redis.sh chmod +x stop.sh
执行脚本开始安装Redis节点,并进入到 /usr/local/bin 目录下执行 redis-cli 创建集群关联:
#执行集群几点创建 ./redis.sh #进入到任意一个安装好的redis节点的bin目录,里面有个脚本对象redis-cli,然后执行集群创建 ./redis-cli --cluster create 172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 172.18.0.5:7004 172.18.0.6:7005 172.18.0.7:7006 --cluster-replicas 1
–cluster-replicas 表示有一个主有几个slave。
安装好了后,我们链接Redis效果如下: