大家首先得搭建好了SSM框架,然后把Redis相关的添加进去就好了。
一、Linux安装单机版Redis
1. 查看是否安装gcc-c++
[root@itcast-01 ~]# rpm -qa | grep gcc-c++
输出:gcc-c++-4.4.7-17.el6.i686
2. 如果没有安装,可以使用yum命令进行网络安装
[root@itcast-01 ~]# yum install gcc-c++
3. 在Linux的CRT客户端,按alt+p进行上传,直接把安装包拖动上去
4. 解压安装包
[root@itcast-01 ~]# tar -zxvf redis-3.0.2.tar.gz
5. 进入解压的文件夹,进行编译
[root@itcast-01 ~]# cd redis-3.0.2
[root@itcast-01 redis-3.0.2]# make
6. 查看安装目录
[root@itcast-01 redis-3.0.2]# cd /usr/local/redis/bin/
7. 后台启动Redis:
a. 从安装包中复制redis.conf文件到/usr/local/redis/bin中
[root@itcast-01 bin]# cp /root/redis-3.0.2/redis.conf ./
b. 修改redis.conf配置文件,修改为yes
[root@itcast-01 bin]# vim redis.conf
c.启动命令
[root@itcast-01 bin]# ./redis-server redis.conf
8. 查看启动效果:
[root@itcast-01 bin]# ps -ef | grep redis
二、简单Demo测试是否可用
public class RedisTest {
public static void main(String[] args) {
// 1. 创建jedis对象,需要ip和port
Jedis jedis = new Jedis("192.168.37.161", 6379);
// 2. 使用jedis操作redis,jedis的方法和命令是一样的
String pong = jedis.ping();
System.out.println(pong);
String key = "jedis";
String setResult = jedis.set(key, "hello redis!");
System.out.println(setResult);
String getResult = jedis.get(key);
System.out.println(getResult);
// 3. 释放资源,关闭jedis
jedis.close();
}
}
三、SSM集成Redis
1.maven目录结构
2. 添加maven坐标
<!-- Redis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
3. 与Spring整合:applicationContext-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置jedis连接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name = "host" value="192.168.37.161"/>
<constructor-arg name = "port" value="6379"/>
</bean>
<!-- 配置操作单机版redis的实现类 -->
<bean id="poolJedisClient" class="cn.jindou.redis.RedisPool" />
</beans>
4.操作Redis的接口和实现类‘
/**
* 操作Redis的方法接口
*/
public interface RedisUtils {
/**
* 保存
*
* @param key
* @param value
*/
public void set(String key, String value);
/**
* 根据key查询
*
* @param key
* @return
*/
public String get(String key);
/**
* 删除
*
* @param key
*/
public void del(String key);
/**
* 根据key设置生存时间
*
* @param key
* @param seconds
*/
public void expire(String key, Integer seconds);
/**
* 保存并设置生存时间
*
* @param key
* @param value
* @param seconds
*/
public void set(String key, String value, Integer seconds);
/**
* value加一
*
* @param key
* @return
*/
public Long incr(String key);
}
public class RedisPool implements RedisUtils{
@Autowired
private JedisPool jedisPool;
@Override
public void set(String key, String value) {
Jedis jedis = this.jedisPool.getResource();
jedis.set(key, value);
jedis.close();
}
@Override
public String get(String key) {
Jedis jedis = this.jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
@Override
public void del(String key) {
Jedis jedis = this.jedisPool.getResource();
jedis.del(key);
jedis.close();
}
@Override
public void expire(String key, Integer seconds) {
Jedis jedis = this.jedisPool.getResource();
jedis.expire(key, seconds);
jedis.close();
}
@Override
public void set(String key, String value, Integer seconds) {
Jedis jedis = this.jedisPool.getResource();
jedis.set(key, value);
jedis.expire(key, seconds);
jedis.close();
}
@Override
public Long incr(String key) {
Jedis jedis = this.jedisPool.getResource();
Long count = jedis.incr(key);
jedis.close();
return count;
}
}
5.修改Controller层,添加Redis缓存
@Controller
@RequestMapping("linkman")
public class LinkManController {
@Autowired
private LinkManService linkManService;
@Autowired
private RedisUtils redisUtils;
/**
* 联系人列表
*/
@RequestMapping(value = "list",method = RequestMethod.GET)
public ModelAndView queryAllLinkMan(){
// 1. 从缓存中命中
try {
List<LinkMan> list;
String redisJson = redisUtils.get("linkManList");
// 判断是否为空,如果不为空表示命中了,直接返回
if (StringUtils.isNotBlank(redisJson)) {
// Jackson反序列化List
ObjectMapper mapper = new ObjectMapper();
JavaType constructParametricType = mapper.getTypeFactory().constructParametricType(List.class, LinkMan.class);
list = mapper.readValue(redisJson,constructParametricType);
System.out.println("我进来了啊"+list.toString());
} else {
//从数据库查询,并保存到Redi缓存
list = this.linkManService.queryAllLinkMan();
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(list);
System.out.println(writeValueAsString);
// 注意:此处的key若Redis中已存在,会报错的(困了菜鸡一下午啊)!
redisUtils.set("linkManList", writeValueAsString);
System.out.println("我进来了哦"+list.toString());
}
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("linkMan",list);
modelAndView.setViewName("linkman-list");
return modelAndView;
} catch (Exception e1) {
e1.printStackTrace();
}
return new ModelAndView("error");
}
}
四、Redis原理一些东西
1. 使用Redist添加缓存的原因:
(1)Redis是将数据存到内存中,而Mysql存在磁盘中,从内存中读取数据更快。
注:Redis的数据模型:key : value
(2)访问率高但更新频率较低的数据,可以添加缓存,减少Mysql压力。
(3)查询时先从Redis中查,没有再去Mysql中查,将查到的数据放缓存中一份。
2. Redis的使用:
(1) Redis持久化方案:
RDB 快照,在指定时间间隔将把内存中的数据快照写入磁盘中(dump.rdb)
AOF 保存命令日志,把每条Redis命令都保存到AOF日志文件中。
(2) Redis支持多种数据类型(特指value),比如:String、Hash、List、Set、SoredSet
(3) Redis可以集群来提高网站的响应速度。
3. Redis集群原理简介:
(1) 所有Redis节点是互联的,我们连接Redis时只需要连接任意一个节点即可
(2) 搭建集群需要分配0~16383个插槽,Redis-cluster会对key进行算法计算,将value值存储到对应节点。
(3) Redis集群中超过半数主节点失效或一个主节点失效且无从节点时,认定集群不可用。
(4) Redis集群搭建,因其投票机制,至少需要3个主节点和3个从节点,所以至少需要6台Redis服务器。