redis(三)与spring整合

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服务)

相关文章
相关标签/搜索