一、Redis介绍
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 5种数据类型 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
速度: 读 11.2万/秒 /写 8.6万/秒 平均 10万/秒
二、redis安装
1、将 redis-5.0.4.tar.gz 压缩包上传至服务器 /usr/local/src目录下
redis-5.0.4下载:https://www.lanzous.com/i6k23ub
redis官网下载:https://redis.io/download
2、执行命令进行解压,并将目录名改为redis,然后删除redis-5.0.4.tar.gz压缩包
解压命令:tar -xvf redis-5.0.4.tar.gz 目录更名:mv redis-5.0.4 redis 删除压缩包:rm -rf redis-5.0.4.tar.gz
得到以下文件及目录
3.1、进行编译,等待编译完成
在redis根目录中执行命令:make
3.2、进行安装
在redis根目录中执行命令:make install
三、集群搭建
1、为什么要搭建集群?
通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。
Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。
由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用多台 Redis作为缓存数据库。但是如何保证数据存储的一致性呢,这时就需要搭建redis集群.采用合理的机制,保证用户的正常的访问需求.
采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实现了服务故障的自动迁移.
2、 集群搭建计划
主从划分:3台主机 3台从机共6台 端口划分7000-7005
3、创建文件夹
在redis根目录中执行命令:mkdir cluster 在cluster文件夹中创建6个文件夹:mkdir 7000 7001 7002 7003 7004 7005
4、关于redis配置文件
1、复制redis.config文件
将redis根目录中的redis.conf文件复制到cluster/7000/ 并以原名保存
在redis根目录中执行命令:cp redis.conf cluster/7000/
2、编辑redis.config配置文件
在7000文件夹中执行命令:vim redis.conf
(1)、去除IP绑定,在69行,前面加#号注释
(2)、关闭保护模式,在88行,改为no
(3)、修改端口号,92行,改为7000
(4)、开启后台启动,136行,改为yes
(5)、修改pid路径,在158行,路径修改为 /usr/local/src/redis/cluster/7000/redis.pid
(6)、修改持久化文件路径,在263行,修改为 /usr/local/src/redis/cluster/7000
(7)、设定内存优化策略,在597行,去掉注释,并将 noeviction 改为 volatile-lru
(8)、关闭AOF模式,699行改为no
(9)、开启集群配置,838行,去掉注释
(10)、开启集群配置文件,846行,去掉注释并改为 cluster-config-file nodes.conf
(11)、修改集群超时时间,852行,去掉注释
(12)、修改完成,ESC退出编辑模式,:wq命令保存退出
5、 复制修改后的配置文件
(1)、将7000文件夹下的redis.conf文件分别复制到7001-7005中
cp 7000/redis.conf 7001 cp 7000/redis.conf 7002 cp 7000/redis.conf 7003 cp 7000/redis.conf 7004 cp 7000/redis.conf 7005
(2)、分别将7001-7005文件夹中的redis.config文件中的7000改为对应的端口号的名称,分别编辑7001-7005文件夹中的redis.config(vim redis.config),根据相应的端口号,输入全局修改指令进行全局修改,并:wq保存退出
:%s/7000/7001/g :%s/7000/7002/g :%s/7000/7003/g :%s/7000/7004/g :%s/7000/7005/g
6、创建脚本
(1)、创建启动脚本
在cluster目录下创建start.sh脚本:vim start.sh
start.sh中内容输入:
redis-server 7000/redis.conf & redis-server 7001/redis.conf & redis-server 7002/redis.conf & redis-server 7003/redis.conf & redis-server 7004/redis.conf & redis-server 7005/redis.conf &
(2)、创建关闭脚本
在cluster目录下创建start.sh脚本:vim shutdown.sh
shutdown.sh中内容输入:
redis-cli -p 7000 shutdown & redis-cli -p 7001 shutdown & redis-cli -p 7002 shutdown & redis-cli -p 7003 shutdown & redis-cli -p 7004 shutdown & redis-cli -p 7005 shutdown &
7、检查redis节点
启动命令:sh start.sh 检查是否全部启动命令:ps -ef|grep redis 关闭命令:sh shutdown.sh
四、Spring Boot整合Redis
在进行连接redis时,首先得关闭Linux系统防火墙
检查防火墙状态命令:service iptables status 临时命令在每次linux重启后失效 临时开启命令:service iptables start 临时关闭命令:service iptables stop 永久性生效,重启后不会复原,设置后需重启 永久开启命令:chkconfig iptables on 永久关闭命令:chkconfig iptables off
1、添加pom.xml依赖
<!--spring整合redis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> </dependency>
2、配置文件redis.properties
redis.nodes=192.168.38.128:7000,192.168.38.128:7001,192.168.38.128:7002,192.168.38.128:7003,192.168.38.128:7004,192.168.38.128:7005
3、Redis集群配置类
package com.kjyfx.config; import java.util.HashSet; import java.util.Set; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; @Configuration //标识配置类 @PropertySource("classpath:/properties/redis.properties")//数据源 public class RedisConfig { @Value("${redis.nodes}") private String nodes; //node1,node2,nod3.... @Bean public JedisCluster jedisCluster() { Set<HostAndPort> setNodes = new HashSet<>(); String[] arrayNode = nodes.split(","); for (String node : arrayNode) { String host = node.split(":")[0]; int port = Integer.parseInt(node.split(":")[1]); setNodes.add(new HostAndPort(host, port)); } return new JedisCluster(setNodes); } }
需要使用时,使用Autowired自动装配即可
//required = false 当用户使用时才注入 @Autowired(required = false) private JedisCluster jedis; //注入redis集群对象
相关文件下载:https://www.lanzous.com/i6k7vpe
私人文档:
评论前必须登录!
注册