**

1、导包

**

1-SSM(spring+mybatis+SpringMVC)的jar包

2-Redis连接的jar包

redis与ssm整合视频教程 ssm使用redis_redis与ssm整合视频教程


3-然后json和其他相关jar包,(这里用的json jar包不是阿里巴巴的)

redis与ssm整合视频教程 ssm使用redis_SSM项目结合redis数据库_02

2、添加工具类redisUtil

package util;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import net.sf.json.JSONArray;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@Component
public class RedisUtil {
	
	@Autowired
	JedisPool pool;
	
	// 判断Redis中是否存在键
		public boolean existsKey(String key) {
			Jedis jedis = pool.getResource();
			boolean bool;
			try {
				bool = jedis.exists(key);
			} finally {
				jedis.close();
			}
			return bool;
		}


		// 把List集合对象转换成json格式保存到指定的键中
		public void saveJsonArray(Object object, String key) {
			Jedis jedis = pool.getResource();
			try {
				// 格式化成Json字符串
				JSONArray array = JSONArray.fromObject(object);
				jedis.set(key, array.toString()); // 存入缓存
			} finally {
				jedis.close();
			}
		}
	 
		// 通过键取出Json字符串并转换成 Class<T>这个T所指定的类型
		@SuppressWarnings({ "static-access", "unchecked" })
		public <T> List<T> getJsonArray(String key, Class<T> classz) {
			Jedis jedis = pool.getResource();
			try {
				String str = jedis.get(key);
				JSONArray array = JSONArray.fromObject(str);
				// 把字符串转换回集合对象 clazz是指定的类型
				return (List<T>) array.toCollection(array, classz);
			} finally {
				jedis.close();
			}
		}
		
		
		
		//第二种方法
		// 取缓存中的二进制数据,反序列化成List集合对象
		/*
		public <T> List<T> getObject(String key, Class<T> clazz) {
			Jedis jedis = pool.getResource();
			// 二进制 IO 输入流
			ByteArrayInputStream is = null;
			ObjectInputStream ois = null;
			try {
				// 从缓存中取二进制数据
				byte[] b = jedis.get(key.getBytes());
				is = new ByteArrayInputStream(b);
				ois = new ObjectInputStream(is);
				// 把二进制转换成T指定类型的集合
				return (List<T>) ois.readObject();
	 
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					is.close();
					ois.close();
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				jedis.close();
			}
			return null;
		}
	 
		// 把对象序列化二进制格式并保证到Redis缓存中
		public  void saveObject(Object object, String key) {
			Jedis jedis = pool.getResource();
			// 二进制 IO 输出流
			ByteArrayOutputStream os = null;
			ObjectOutputStream oos = null;
			try {
				os = new ByteArrayOutputStream();
				oos = new ObjectOutputStream(os);
				oos.writeObject(object); // 二进制数据
				byte[] b = os.toByteArray();
				// 存入二进制数据到Redis缓存中
				jedis.set(key.getBytes(), b);
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					os.close();
					oos.close();
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				jedis.close();
			}
		}*/		
}

这里有两种方式,二进制和json的

3、添加配置

在一个applicationContext.xml文件中添加(要注意添加扫描util包)

<context:component-scan base-package="util" />

<!-- Redis 连接池配置 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool"
	destroy-method="close">		
	<constructor-arg name="host" value="127.0.0.1" />
	<constructor-arg name="port" value="6379" />
</bean>

4、在contorller类里面运用

package controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import entity.Grade;
import redis.clients.jedis.JedisPool;
import service.GradeService;
import util.RedisUtil;
/**
 * 年级的控制类
 * @author yjl
 *
 */
@Controller
@RequestMapping("/grade")
public class GradeController {
	@Autowired // 从IOC容器注入业务层对象
	GradeService service;
	@Autowired
	JedisPool pool;
	@Autowired
	RedisUtil redisUtil;
	
	
	@RequestMapping("/list")
	public ModelAndView list() {
		List<Grade> grades = null;
		if (redisUtil.existsKey("gr")) {
			System.out.println("从Redis 缓存中取数据..");
			//调用反序列化方法取缓存的数据  --二进制  
            //grades = redisUtil.getObject("gr",Grade.class);			
			
            //调用Json格式转换的方法取缓存数据
            grades = redisUtil.getJsonArray("gr", Grade.class);				
		} else {
			System.out.println("从数据库中取数据,并存入缓存..");			
			//调用底层方法从数据库中取数据
            grades = service.find();
 
            //调用序列化方法把数据缓存到Redis中 --二进制
			//redisUtil.saveObject(grades, "gr");
 
            //调用Json格式化方法把数据缓存到Redis中
			redisUtil.saveJsonArray(grades, "gr");		 
		}	 
		return new ModelAndView("gradeList", "grades", grades);
	}
}

如果redis数据库里面没有这个gr的值,他会从数据库里面拿,然后缓存到redis数据库中,有gr值的话,就直接在redis中拿取数据。

主意事项:(有的是我自己写这个是犯的一些错误,还有同学犯的一些错误)

  1. web文件里面的项目名字(因为一般web.xml文件都是直接复制的,所以开头的项目名字记得要改)
  2. 写util类时,例如:redisUtil类,要加@Component注解
  3. 页面的<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>指令不要忘记加,一般要用jstl方式的多多少少这个忘记加过
  4. 应用jar包时,要注意不要导入其他的jar包的方法(因为有很多其他jar包也有这个方法)