安装单机版
导入压缩包后
解压: tar -zxvf redis-3.0.0.tar.gz
删除包: rm -rf redis-3.0.0.tar.gz
安装编译环境 gcc-c++
编译 [root@localhost redis-3.0.0]# make
安装到指定位置 [root@localhost redis-3.0.0]# make install PREFIX=/usr/local/src/myapp/redis
复制一份做集群使用 [root@localhost myapp]# cp -r redis redis_backup
复制一份配置文件 [root@localhost bin]# cp ../../redis-3.0.0/redis.conf ./
修改配置文件 vi redis.conf
将daemonize no改为daemonize yes使redis可以后端启动
启动服务端 [root@localhost bin]# ./redis-server redis.conf
启动客户端 [root@localhost bin]# ./redis-cli
搭建redis集群
至少需要留个虚拟机来搭建,过于麻烦,我们使用一个虚拟机搭建伪集群
模拟使用6个端口(后面的为备份服务)
7001----7004
7002----7005
7003----7006
创建文件夹存放所有redis [root@localhost myapp]# mkdir redis-cluster
复制备份的新redis [root@localhost myapp]# cp -r redis_backup redis-cluster/
重命名 [root@localhost redis-cluster]# mv redis_backup redis01
拷贝配置文件 [root@localhost redis-cluster]# cp ../redis-3.0.0/redis.conf ./redis01/bin/
修改配置文件 [root@localhost redis01]# vi ./bin/redis.conf
daemonize no改为daemonize yes
port 6379改为port 7001
把REDIS CLUSTER下的cluster-enabled yes注释消除
复制redis [root@localhost redis-cluster]# cp -r redis01/ redis02
[root@localhost redis-cluster]# cp -r redis01/ redis03
[root@localhost redis-cluster]# cp -r redis01/ redis04
[root@localhost redis-cluster]# cp -r redis01/ redis05
[root@localhost redis-cluster]# cp -r redis01/ redis06
分别修改每个redis的配置文件(只修改端口号)
创建批启动文件 [root@localhost redis-cluster]# touch redis-start.sh
修改 [root@localhost redis-cluster]# vi redis-start.sh
内容cd redis01/bin
./redis-server redis.conf
cd ../../
cd redis02/bin
./redis-server redis.conf
cd ../../
cd redis03/bin
./redis-server redis.conf
cd ../../
cd redis04/bin
./redis-server redis.conf
cd ../../
cd redis05/bin
./redis-server redis.conf
cd ../../
cd redis06/bin
./redis-server redis.conf
cd ../../
创建批结束文件 [root@localhost redis-cluster]# touch redis-shutdown.sh
修改 [root@localhost redis-cluster]# vi redis-shutdown.sh
内容 redis01/bin/redis-cli -p 7001 shutdown
redis01/bin/redis-cli -p 7002 shutdown
redis01/bin/redis-cli -p 7003 shutdown
redis01/bin/redis-cli -p 7004 shutdown
redis01/bin/redis-cli -p 7005 shutdown
redis01/bin/redis-cli -p 7006 shutdown
为两个批文件添加执行权限
[root@localhost redis-cluster]# chmod u+x redis-start.sh
[root@localhost redis-cluster]# chmod u+x redis-shutdown.sh
安装ruby运行环境 yum install ruby
yum install rubygems
将 redis-3.0.0.gem.tar.gz 上传到根目录
安装插件 [root@localhost ~]# gem install redis-3.0.0.gem
拷贝redis-3.0.0/src下的ruby脚本到redis-cluster下
[root@localhost ~]# cp /usr/local/src/myapp/redis-3.0.0/src/redis-trib.rb /usr/local/src/myapp/redis-cluster/
启动 [root@localhost redis-cluster]# ./redis-start.sh
ruby搭建 [root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.11.102:7001 192.168.11.102:7002 192.168.11.102:7003 192.168.11.102:7004 192.168.11.102:7005 192.168.11.102:7006
创建完成
进入
[root@localhost bin]# ./redis-cli -p 7001 -c
spring中引用
xml配置
<!-- 单机版redis配置(连接池) -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
</bean>
<bean id="jedisClientPool" class="com.igeek.util.JedisClientPool">
<!-- 注入jedisPool连接池对象 -->
<property name="jedisPool" ref="jedisPool"></property>
</bean>
<!-- 集群版本 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7001"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.11.102"></constructor-arg>
<constructor-arg name="port" value="7006"></constructor-arg>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.igeek.util.JedisClientCluster">
<property name="jedisCluster" ref="jedisCluster"></property>
</bean>
在需要使用的service中通过autowired注入
//redis集群版本
@Autowired
private JedisClientCluster jedisClientCluster;
//redis单机版本
@Autowired
private JedisClientPool jedisClientPool;
内容缓存与缓存同步
//范例1.利用缓存机制的业务
public List<TbContent> selectContentsByCid(Long categoryId) {
String contentString = jedisClientCluster.hget("CONTENT", categoryId+"");
if(StringUtils.isNotBlank(contentString)){
System.out.println("从缓存中查询");
//不为空,String 转 对象
return JsonUtils.jsonToList(contentString, TbContent.class);
}
List<TbContent> contents = contentMapper.selectByCid(categoryId);
//存入缓存
jedisClientCluster.hset("CONTENT", categoryId+"",JsonUtils.objectToJson(contents));
System.out.println("从数据库中查询");
return contents;
}
//范例2.缓存同步
public BuyResult addContent(TbContent content) {
contentMapper.insert(content);
//缓存同步(做 新增,删除,修改 业务时应删除对应的缓存)
jedisClientCluster.hdel("CONTENT", content.getCategoryId()+"");
return BuyResult.ok();
}
在使用RedisDesktopManager工具连接Redis时,如果连接不成功的话,可能是6379端口未开启,如下时CentOS6的解决办法
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT 写入修改
/etc/init.d/iptables save 保存修改
service iptables restart 重启防火墙,修改生效