1、html
JAVA操做redis一般使用的是Jedis,經過java代碼來操做redis的數據存儲讀取等操做,用過的人應該知道,Jedis客戶端已經足夠簡單和輕量級了,可是呢,在此同時,Spring也爲Redis提供了支持,就是在Spring-data模塊中的Spring-Data-Redis(SDR),它一部分是基於Jedis客戶端的API封裝,另外一部分是對Spring容器的整合。java
springdata的一些資料:web
資料:http://projects.spring.io/spring-data-redis/
文檔:https://docs.spring.io/spring-data/redis/docs/1.8.6.RELEASE/reference/html/redis
前提你的ssm已經搭建好(其實就是redis與spring的整合)spring
2、整合數據庫
一、pom中引入相應的jar包apache
<!--reids--> <spring.redis.version>1.6.0.RELEASE</spring.redis.version> <jedis.version>2.7.2</jedis.version> <commons.version>2.4.2</commons.version>
<!--redis--> <!-- config redis data and client jar--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${spring.redis.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>${commons.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency>
二、redis.properties文件 (注意:spring默認只認一個.properties文件,若是有兩個,須要在掃面配置文件的地方都加入ignore-unresolvable="true")緩存
#============================# #==== Redis settings ====# #============================# #redis 服務器 IP redis.host=127.0.0.1 #redis 服務器端口 redis.port=6379 #redis 密碼 redis.pass=398023 #redis 支持16個數據庫(至關於不一樣用戶)可使不一樣的應用程序數據彼此分開同時又存儲在相同的實例上 redis.dbIndex=0 #redis 緩存數據過時時間單位秒 redis.expiration=3000 #控制一個 pool 最多有多少個狀態爲 idle 的jedis實例 redis.maxIdle=300 #控制一個 pool 可分配多少個jedis實例 redis.maxActive=600 #當borrow一個jedis實例時,最大的等待時間,若是超過等待時間,則直接拋出JedisConnectionException; redis.maxWait=1000 #在borrow一個jedis實例時,是否提早進行alidate操做;若是爲true,則獲得的jedis實例均是可用的; redis.testOnBorrow=true
三、spring-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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--掃描redis配置文件--> <context:property-placeholder ignore-unresolvable="true" location="classpath:META-INF/redis.properties"/> <!-- 配置 JedisPoolConfig 實例 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}"/> <property name="maxTotal" value="${redis.maxActive}"/> <property name="maxWaitMillis" value="${redis.maxWait}"/> <property name="testOnBorrow" value="${redis.testOnBorrow}"/> </bean> <!-- 配置JedisConnectionFactory --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}"/> <property name="port" value="${redis.port}"/> <property name="password" value="${redis.pass}"/> <property name="database" value="${redis.dbIndex}"/> <property name="poolConfig" ref="poolConfig"/> </bean> <!-- 配置RedisTemplate --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory"/> </bean> <!-- 配置RedisCacheManager --> <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate"/> <property name="defaultExpiration" value="${redis.expiration}"/> </bean> </beans>
三、將spring-redis引入到主的spring配置文件中applicationContentx中app
3、測試
在service層寫業務
RedisBaseTakes
public interface RedisBaiseTakes<H,K,V> { //增 public void add(K key,String value); public void addObj(H objectKey,K key,V object); //刪 public void delete(K key); public void delete(List<K> listKeys); public void deletObj(H objecyKey,K key); //改 public void update(K key,String value); public void updateObj(H objectKey,K key,V object); //查 public String get(K key); public V getObj(H objectKey,K key); }
seeUserRedisTakes
package com.test.service.impl; import com.demo.Utils.CommonUtils; import com.demo.pojo.PageHelper; import com.test.dao.IUserDao; import com.test.model.User; import com.test.service.IUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class UserServiceImpl implements IUserService { @Resource private IUserDao userDao; public int insertUser(User user) { user.setUser_id(CommonUtils.getUUID()); userDao.insertUser(user); return 0; } public String deleteUser(String ids) { userDao.delUser(ids); return ids; } public String updataUser(User user) { userDao.updateUser(user); return user.getUser_id(); } public User selectUserById(String id) { return userDao.selectUserById(id); } public List selectAlluser(PageHelper pageHelper) { return userDao.selectAllUser(pageHelper); } }
pojo的seeUser
package com.test.model; import java.io.Serializable; public class SeeUser implements Serializable { private String id; private String ip;//用戶的id private String seeTime;//用戶訪問的時間 private int seeCount;//用戶訪問的次數 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getSeeTime() { return seeTime; } public void setSeeTime(String seeTime) { this.seeTime = seeTime; } public int getSeeCount() { return seeCount; } public void setSeeCount(int seeCount) { this.seeCount = seeCount; } }
controller層
package com.test.controller; import com.test.model.SeeUser; import com.test.service.RedisBaiseTakes; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import java.util.Calendar; import java.util.logging.Logger; @Controller @RequestMapping(value = "/test") public class TestRedis { @Resource(name="seeUserRedisTakes") private RedisBaiseTakes seeUserRedisTakes; @RequestMapping("/hello") @ResponseBody public ModelAndView hello(){ ModelAndView mv = new ModelAndView(); System.out.println("hello see"); seeUserRedisTakes.add("hello1","zxm"); mv.setViewName("hello"); return mv; } @RequestMapping("/hello2") @ResponseBody public ModelAndView hello2(){ Calendar g=Calendar.getInstance(); ModelAndView mv = new ModelAndView(); SeeUser seeUser=new SeeUser(); seeUser.setId("1"); seeUser.setIp("1192.168.7.7"); seeUser.setSeeTime(g.getTime().toString()); seeUser.setSeeCount(1); seeUserRedisTakes.addObj("seeUser",seeUser.getId(),seeUser); mv.setViewName("hello"); return mv; } @RequestMapping("/hello3") @ResponseBody public ModelAndView hello3(){ ModelAndView mv = new ModelAndView(); SeeUser seeUser = (SeeUser) seeUserRedisTakes.getObj("seeUser","1"); if(seeUser!=null){ System.out.println(seeUser.getId()+"======="+seeUser.getIp()+"======"+seeUser.getSeeTime()+"======="+seeUser.getSeeCount()); } mv.setViewName("hello"); return mv; } }
運行測試省略(測試時別忘了啓動redis服務)