一、
JAVA操作redis通常使用的是Jedis,通过java代码来操作redis的数据存储读取等操作,用过的人应该知道,Jedis客户端已经足够简单和轻量级了,但是呢,在此同时,Spring也为Redis提供了支持,就是在Spring-data模块中的Spring-Data-Redis(SDR),它一部分是基于Jedis客户端的API封装,另一部分是对Spring容器的整合。
springdata的一些资料:
资料:http://projects.spring.io/spring-data-redis/
文档:https://docs.spring.io/spring-data/redis/docs/1.8.6.RELEASE/reference/html/
前提你的ssm已经搭建好(其实就是redis与spring的整合)
二、整合
1、pom中引入相应的jar包
<!--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>
2、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
3、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>
3、将spring-redis引入到主的spring配置文件中applicationContentx中
三、测试
在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服务)
来源:oschina
链接:https://my.oschina.net/u/3234821/blog/1844439