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

相關文章
相關標籤/搜索