婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > windows環境下Redis+Spring緩存實例講解

windows環境下Redis+Spring緩存實例講解

熱門標簽:西藏教育智能外呼系統價格 百度商家地圖標注怎么做 地圖標注如何即時生效 竹間科技AI電銷機器人 最簡單的百度地圖標注 地圖標注費用 太原營銷外呼系統 玄武湖地圖標注 小紅書怎么地圖標注店

一、Redis了解

1.1、Redis介紹:

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

Redis數據庫完全在內存中,使用磁盤僅用于持久性。相比許多鍵值數據存儲,Redis擁有一套較為豐富的數據類型。Redis可以將數據復制到任意數量的從服務器。

1.2、Redis優點:

(1)異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。

(2)支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數據類型更好。

(3)操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。

(4)多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發布/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。

1.3、Redis缺點:

(1)單線程

(2)耗內存

二、64位windows下Redis安裝

Redis官方是不支持windows的,但是Microsoft Open Tech group 在 GitHub上開發了一個Win64的版本,下載地址:https://github.com/MSOpenTech/redis/releases。注意只支持64位哈。

小寶鴿是下載了Redis-x64-3.0.500.msi進行安裝。安裝過程中全部采取默認即可。

安裝完成之后可能已經幫你開啟了Redis對應的服務,博主的就是如此。查看資源管理如下,說明已經開啟:

已經開啟了對應服務的,我們讓它保持,下面例子需要用到。如果沒有開啟的,我們命令開啟,進入Redis的安裝目錄(博主的是C:\Program Files\Redis),然后如下命令開啟:

redis-server  redis.windows.conf

OK,下面我們進行實例。

三、詳細實例

本工程采用的環境:Eclipse + maven + spring + junit

3.1、添加相關依賴(spring+junit+redis依賴),pom.xml:

project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 modelVersion>4.0.0/modelVersion>
 groupId>com.luo/groupId>
 artifactId>redis_project/artifactId>
 version>0.0.1-SNAPSHOT/version>
 
 properties>
  !-- spring版本號 -->
  spring.version>3.2.8.RELEASE/spring.version>
  !-- junit版本號 -->
  junit.version>4.10/junit.version>
 /properties>
 
 dependencies>
  !-- 添加Spring依賴 -->
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-core/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-webmvc/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-context/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-context-support/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-aop/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-aspects/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-tx/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-jdbc/artifactId>
   version>${spring.version}/version>
  /dependency>
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-web/artifactId>
   version>${spring.version}/version>
  /dependency>
 
  !--單元測試依賴 -->
  dependency>
   groupId>junit/groupId>
   artifactId>junit/artifactId>
   version>${junit.version}/version>
   scope>test/scope>
  /dependency>
 
  !--spring單元測試依賴 -->
  dependency>
   groupId>org.springframework/groupId>
   artifactId>spring-test/artifactId>
   version>${spring.version}/version>
   scope>test/scope>
  /dependency>
 
  !-- Redis 相關依賴 -->
  dependency>
   groupId>org.springframework.data/groupId>
   artifactId>spring-data-redis/artifactId>
   version>1.6.1.RELEASE/version>
  /dependency>
  dependency>
   groupId>redis.clients/groupId>
   artifactId>jedis/artifactId>
   version>2.7.3/version>
  /dependency>
 
 /dependencies>
/project>

3.2、spring配置文件application.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:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation=" 
 
http://www.springframework.org/schema/beans
 
 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 
 
http://www.springframework.org/schema/aop
 
 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
 
 
http://www.springframework.org/schema/context
 
 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
 !-- 自動掃描注解的bean -->
 context:component-scan base-package="com.luo.service" />
 
 !-- 引入properties配置文件 --> 
 bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  property name="locations">
   list>
    value>classpath:properties/*.properties/value>
    !--要是有多個配置文件,只需在這里繼續添加即可 -->
   /list>
  /property>
 /bean>
 
 !-- jedis 配置 -->
 bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" >
   property name="maxIdle" value="${redis.maxIdle}" />
   property name="maxWaitMillis" value="${redis.maxWait}" />
   property name="testOnBorrow" value="${redis.testOnBorrow}" />
 /bean >
 
 !-- redis服務器中心 -->
 bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
   property name="poolConfig" ref="poolConfig" />
   property name="port" value="${redis.port}" />
   property name="hostName" value="${redis.host}" />
   !-- property name="password" value="${redis.password}" /> -->
   property name="timeout" value="${redis.timeout}" >/property>
 /bean >
 bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
   property name="connectionFactory" ref="connectionFactory" />
   property name="keySerializer" >
    bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
   /property>
   property name="valueSerializer" >
    bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
   /property>
 /bean >
 
 !-- cache配置 -->
 bean id="methodCacheInterceptor" class="com.luo.redis.cache.MethodCacheInterceptor" >
   property name="redisTemplate" ref="redisTemplate" />
 /bean >
 
 !-- aop配置切點跟通知 -->
 bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  property name="advice" ref="methodCacheInterceptor"/>
  property name="pattern" value=".*ServiceImpl.*getTimestamp"/>
 /bean>
 bean id="redisTestService" class="com.luo.service.impl.RedisTestServiceImpl">
 /bean>
 bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
 
/beans>

3.3、Redis配置參數,redis.properties:

#redis中心
#綁定的主機地址
redis.host=127.0.0.1
#指定Redis監聽端口,默認端口為6379
redis.port=6379
#授權密碼(本例子沒有使用)
redis.password=123456 
#最大空閑數:空閑鏈接數大于maxIdle時,將進行回收
redis.maxIdle=100 
#最大連接數:能夠同時建立的“最大鏈接個數”
redis.maxActive=300 
#最大等待時間:單位ms
redis.maxWait=1000 
#使用連接時,檢測連接是否成功 
redis.testOnBorrow=true
#當客戶端閑置多長時間后關閉連接,如果指定為0,表示關閉該功能
redis.timeout=10000

3.4、添加接口及對應實現RedisTestService.Java和RedisTestServiceImpl.java:

package com.luo.service;
 
public interface RedisTestService {
 public String getTimestamp(String param);
}
package com.luo.service.impl;
 
import org.springframework.stereotype.Service;
import com.luo.service.RedisTestService;
 
@Service
public class RedisTestServiceImpl implements RedisTestService {
 
 public String getTimestamp(String param) {
  Long timestamp = System.currentTimeMillis();
  return timestamp.toString();
 }
 
}


3.5、本例采用spring aop切面方式進行緩存,配置已在上面spring配置文件中,對應實現為MethodCacheInterceptor.java:

package com.luo.redis.cache;
 
import java.io.Serializable;
import java.util.concurrent.TimeUnit;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
 
public class MethodCacheInterceptor implements MethodInterceptor {
 
 private RedisTemplateSerializable, Object> redisTemplate;
 private Long defaultCacheExpireTime = 10l; // 緩存默認的過期時間,這里設置了10秒
 
 public Object invoke(MethodInvocation invocation) throws Throwable {
  Object value = null;
 
  String targetName = invocation.getThis().getClass().getName();
  String methodName = invocation.getMethod().getName();
 
  Object[] arguments = invocation.getArguments();
  String key = getCacheKey(targetName, methodName, arguments);
 
  try {
   // 判斷是否有緩存
   if (exists(key)) {
    return getCache(key);
   }
   // 寫入緩存
   value = invocation.proceed();
   if (value != null) {
    final String tkey = key;
    final Object tvalue = value;
    new Thread(new Runnable() {
     public void run() {
      setCache(tkey, tvalue, defaultCacheExpireTime);
     }
    }).start();
   }
  } catch (Exception e) {
   e.printStackTrace();
   if (value == null) {
    return invocation.proceed();
   }
  }
  return value;
 }
 
 /**
  * 創建緩存key
  *
  * @param targetName
  * @param methodName
  * @param arguments
  */
 private String getCacheKey(String targetName, String methodName,
   Object[] arguments) {
  StringBuffer sbu = new StringBuffer();
  sbu.append(targetName).append("_").append(methodName);
  if ((arguments != null)  (arguments.length != 0)) {
   for (int i = 0; i  arguments.length; i++) {
    sbu.append("_").append(arguments[i]);
   }
  }
  return sbu.toString();
 }
 
 /**
  * 判斷緩存中是否有對應的value
  * 
  * @param key
  * @return
  */
 public boolean exists(final String key) {
  return redisTemplate.hasKey(key);
 }
 
 /**
  * 讀取緩存
  * 
  * @param key
  * @return
  */
 public Object getCache(final String key) {
  Object result = null;
  ValueOperationsSerializable, Object> operations = redisTemplate
    .opsForValue();
  result = operations.get(key);
  return result;
 }
 
 /**
  * 寫入緩存
  * 
  * @param key
  * @param value
  * @return
  */
 public boolean setCache(final String key, Object value, Long expireTime) {
  boolean result = false;
  try {
   ValueOperationsSerializable, Object> operations = redisTemplate
     .opsForValue();
   operations.set(key, value);
   redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
   result = true;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 
 public void setRedisTemplate(
   RedisTemplateSerializable, Object> redisTemplate) {
  this.redisTemplate = redisTemplate;
 }
}


3.6、單元測試相關類:

package com.luo.baseTest;
 
import org.junit.runner.RunWith; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
 
//指定bean注入的配置文件 
@ContextConfiguration(locations = { "classpath:application.xml" }) 
//使用標準的JUnit @RunWith注釋來告訴JUnit使用Spring TestRunner 
@RunWith(SpringJUnit4ClassRunner.class) 
public class SpringTestCase extends AbstractJUnit4SpringContextTests {
 
}
package com.luo.service;
 
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
import com.luo.baseTest.SpringTestCase;
 
public class RedisTestServiceTest extends SpringTestCase {
 
 @Autowired 
 private RedisTestService redisTestService;
 
 @Test 
 public void getTimestampTest() throws InterruptedException{ 
  System.out.println("第一次調用:" + redisTestService.getTimestamp("param"));
  Thread.sleep(2000);
  System.out.println("2秒之后調用:" + redisTestService.getTimestamp("param"));
  Thread.sleep(11000);
  System.out.println("再過11秒之后調用:" + redisTestService.getTimestamp("param"));
 } 
}

3.7、運行結果:

四、源碼下載:redis-project(jb51.net).rar

以上就是本文的全部內容,希望對大家的學習有所幫助。

您可能感興趣的文章:
  • 圖文詳解Windows下使用Redis緩存工具的方法
  • window手動操作清理redis緩存的技巧總結

標簽:唐山 林芝 景德鎮 揚州 香港 贛州 澳門 廣東

巨人網絡通訊聲明:本文標題《windows環境下Redis+Spring緩存實例講解》,本文關鍵詞  windows,環境,下,Redis+Spring,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《windows環境下Redis+Spring緩存實例講解》相關的同類信息!
  • 本頁收集關于windows環境下Redis+Spring緩存實例講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一本大道av伊人久久综合| 日本久久一区二区三区| 一本久道中文字幕精品亚洲嫩| 欧美日韩在线亚洲一区蜜芽| 中国色在线观看另类| 日本女优在线视频一区二区| av高清不卡在线| 久久综合色天天久久综合图片| 亚洲已满18点击进入久久| 日本韩国一区二区三区| 2020国产精品自拍| 秋霞午夜av一区二区三区| 91麻豆.com| 国产精品久久久久久久久久久免费看 | 欧美不卡123| 依依成人精品视频| 国产69精品一区二区亚洲孕妇| 欧美一区二区视频观看视频| 一区二区三区在线视频免费| 成人美女在线视频| 欧美精品一区二区久久久| 美国十次综合导航| 91精品福利在线一区二区三区 | 亚洲午夜在线视频| 91美女片黄在线观看| 国产精品家庭影院| 不卡区在线中文字幕| 久久久欧美精品sm网站| 久久不见久久见免费视频7 | 欧美无砖专区一中文字| 亚洲视频免费看| 成人中文字幕电影| 国产精品视频你懂的| 蜜臀av一区二区在线观看| 久久精品免视看| 欧美日韩精品一区二区三区| 亚洲人成伊人成综合网小说| a4yy欧美一区二区三区| 中文字幕一区av| 成人免费av在线| 亚洲女人****多毛耸耸8| 91免费小视频| 午夜不卡av免费| 7777精品伊人久久久大香线蕉经典版下载| 亚洲国产精品久久一线不卡| 欧美人与性动xxxx| 久久97超碰色| 中文字幕在线不卡| 欧美午夜影院一区| 日韩和欧美一区二区三区| 日韩精品中文字幕一区| 福利一区在线观看| 亚洲精品视频在线| 日韩一级二级三级| 成人午夜碰碰视频| 亚洲一区中文日韩| 欧美成人艳星乳罩| a4yy欧美一区二区三区| 日韩电影免费在线观看网站| 日本不卡免费在线视频| 精品久久人人做人人爱| 丰满亚洲少妇av| 午夜欧美大尺度福利影院在线看 | 972aa.com艺术欧美| 亚洲国产另类av| 久久久久久免费网| 在线视频欧美区| 国产一区二区福利视频| 一区二区三区四区五区视频在线观看 | 久久亚洲综合色一区二区三区| 成人丝袜18视频在线观看| 一区二区激情视频| 国产三级三级三级精品8ⅰ区| 91免费国产在线| 国产一区二区美女| 亚洲成人黄色影院| 欧美激情一区二区三区不卡| 欧美日韩国产bt| 粉嫩一区二区三区性色av| 丝袜亚洲另类丝袜在线| 中文字幕中文在线不卡住| 91精品国产一区二区人妖| 99视频一区二区三区| 久久99精品国产麻豆婷婷| 亚洲国产精品麻豆| 亚洲欧美偷拍另类a∨色屁股| 久久亚洲一级片| 91麻豆精品国产91| 91香蕉视频污| 懂色av一区二区三区免费看| 日本不卡高清视频| 五月天视频一区| 亚洲婷婷在线视频| 久久久99精品免费观看不卡| 日韩欧美专区在线| 日韩一区二区三区视频在线 | 国产一区二区三区不卡在线观看| ●精品国产综合乱码久久久久| 欧美性一区二区| 成人精品鲁一区一区二区| 美女精品自拍一二三四| 亚洲国产一二三| 亚洲黄色片在线观看| 中文字幕一区二区三区av| 久久亚洲二区三区| 日韩欧美视频在线| 欧美一级高清片| 欧美一区二区三区四区视频| 欧美三级韩国三级日本三斤| 欧美日韩在线观看一区二区| 欧美日本国产视频| 欧美精品乱码久久久久久| 欧美日韩精品一区二区| 欧美精品xxxxbbbb| 欧美一级在线视频| 精品久久一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 欧美成人精品3d动漫h| 精品国产乱子伦一区| 精品久久99ma| 国产午夜精品一区二区三区四区| 久久久影视传媒| 国产精品久久久久久久久快鸭| 亚洲人妖av一区二区| 亚洲精品欧美综合四区| 亚洲bt欧美bt精品777| 欧美a级一区二区| 国产成人h网站| 91免费看`日韩一区二区| 欧美色网一区二区| 欧美一区二区三区免费视频| 精品伦理精品一区| 国产精品久久久久久久裸模| 亚洲专区一二三| 六月丁香婷婷色狠狠久久| 国产成人精品一区二区三区四区 | 一区二区三区在线观看视频| 午夜精品123| 久久99久久精品| a亚洲天堂av| 91精品国产综合久久久蜜臀图片| 久久日一线二线三线suv| 国产精品美女www爽爽爽| 一区二区三区欧美久久| 久久精工是国产品牌吗| 北条麻妃一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 精品人伦一区二区色婷婷| 国产精品青草久久| 日韩电影在线观看电影| 菠萝蜜视频在线观看一区| 欧美精品精品一区| 久久国产精品99久久人人澡| 在线观看av一区| 成人网在线免费视频| 欧美三级日韩三级| 国产欧美一区二区三区网站| 日韩中文欧美在线| 丁香一区二区三区| 日韩一级成人av| 一区二区三区国产精品| 国产成人无遮挡在线视频| 欧美日本一区二区在线观看| 国产精品免费网站在线观看| 青青青伊人色综合久久| 日本道色综合久久| 国产清纯在线一区二区www| 偷窥国产亚洲免费视频| 91在线视频观看| 中文字幕欧美激情| 奇米色一区二区| 欧美伊人精品成人久久综合97 | 精品1区2区3区| 亚洲人成精品久久久久久| 韩国v欧美v日本v亚洲v| 欧美一区二区三区四区高清| 亚洲综合色网站| 99视频国产精品| 欧美激情一区二区在线| 国内精品第一页| 91久久精品一区二区三区| wwwwxxxxx欧美| 日本不卡一二三| 51精品秘密在线观看| 亚洲一级在线观看| 99精品久久99久久久久| 欧美国产国产综合| 粉嫩aⅴ一区二区三区四区| 久久色在线视频| 精品在线免费视频| 日韩免费视频线观看| 日本美女视频一区二区| 欧美精品少妇一区二区三区| 日韩影院在线观看| 3d成人动漫网站| 人人超碰91尤物精品国产| 日韩欧美一区二区视频| 另类小说综合欧美亚洲| 日韩美女视频一区二区在线观看| 毛片基地黄久久久久久天堂|