Redis的Spring配置講解
Redis是一種特殊型別的資料庫,他被稱之為key-value儲存
本文覆蓋快取和儲存兩方面進行說明,使用的是Spring 4.0和Java配置方式
儲存
Redis的配置
package springmvc.rootconfig;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
@Configuration
@EnableCaching
public class CachingConfig {
/**
* 連線Redis
*
* @return
*/
@Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
// host地址
jedisConnectionFactory.setHostName("10.10.13.12" );
// 埠號
jedisConnectionFactory.setPort(6379);
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
/**
* RedisTemplate配置
*
* @param redisCF
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(
RedisConnectionFactory redisCF) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisCF);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
Redis連線工廠
- JedisConnectionFactory
- JredisConnectionFactory
- LettuceConnectionFactory
- SrpConnectionFactory
建議自行測試選用合適自己的連線工廠
如果使用的是localhost和預設埠,則這兩項的配置可以省略
RedisTemplate
- RedisTemplate
- StringRedisTemplate
RedisTemplate能夠讓我們持久化各種型別的key和value,並不僅限於位元組陣列
StringRedisTemplate擴充套件了RedisTemplate,只能使用String型別
StringRedisTemplate有一個接受RedisConnectionFactory的構造器,因此沒有必要在構建後在呼叫setConnectionFactory()
使用RedisTemplateAPI
方法 | 子API介面 | 描述 |
---|---|---|
opsForValue() | ValueOperations | 描述具有簡單值的條目 |
opsForList() | ListOperations | 操作具有list值的條目 |
opsForSet() | SetOperations | 操作具有set值的條目 |
opsForZSet() | ZSetOperations | 操作具有ZSet值(排序的set)的條目 |
opsForHash() | HashOperations | 操作具有hash值的條目 |
boundValueOps(K) | BoundValueOperations | 以繫結指定key的方式,操作具有簡單值的條目 |
boundListOps(K) | BoundListOperations | 以繫結指定key的方式,操作具有list的條目 |
boundSetOps(K) | BoundSetOperations | 以繫結指定key的方式,操作具有set的條目 |
boundZSet(K) | BoundZSetOperations | 以繫結指定key的方式,操作具有ZSet(排序的set)的條目 |
boundHashOps(K) | BoundHashOperations | 以繫結指定key的方式,操作具有hash值的條目 |
操作
package springmvc.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
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.RequestMethod;
import springmvc.bean.Order;
import springmvc.orders.db.OrderRepository;
@Controller
public class HomeController {
@Autowired
RedisTemplate<String, Object> redisTemplate;
@RequestMapping(value = { "/", "index" }, method = RequestMethod.GET)
public String index() {
redisTemplate.opsForValue().set("gege", 11);
System.out.print(redisTemplate.opsForValue().get("gege"));
return "index";
}
}
//建立List條目,key是cart
BoundListOperations<String, Object>cart=redisTemplate.boundListOps("cart");
//刪除最後的一條資料
cart.rightPop();
//在最後,新增一條資料
cart.rightPush("我笑了");
Key和Value序列化
如果要使用到JavaBean,需要其實現Serializable介面,將其序列化
或者使用Spring Data Redis提供的序列化器
- GenericToStringSerializer:使用Spring轉換服務進行序列化
- JacksonJsonRedisSerializer:使用Jackson1,將物件序列化為JSON
- Jackson2JsonRedisSerializer:使用Jackson2,將物件序列化為JSON
- JdkSerializationRedisSerializer:使用Java序列化
- OxmSerializer:使用Spring O/X對映的編排器和解排器實現序列化,用於XML序列化
- StringRedisSerializer:序列化String型別的key和value
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Order>(Order.class));
快取
配置
在配置檔案中追加如下程式碼
/**
* 快取管理器
* @param redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
RedisCacheManager cacheManager =new RedisCacheManager(redisTemplate);
//設定過期時間
cacheManager.setDefaultExpiration(10);
return cacheManager;
}
使用註解進行快取資料
註解 | 描述 |
---|---|
@Cacheable | 表明Spring在呼叫方法之前,首先應該在快取中查詢方法的返回值,如果這個值能夠找到,就會返回快取的值。否則,這個方法就會被呼叫,返回值會放到快取之中 |
@CachePut | 表名Spring應該將方法的返回值放到快取中。在方法的呼叫前並不會檢查快取,方法始終都會被呼叫 |
@CacheEvict | 表明Spring應該在快取中清除一個或多個條目 |
@Caching | 這是一個分組的註解,能夠同時應用多個其他的快取註解 |
@Cacheable與@CachePut的一些共有屬性
屬性 | 型別 | 描述 |
---|---|---|
value | String[] | 要使用的快取名稱 |
condition | String | SpEL表示式,如果得到的值是false的話,不會將快取應用到方法呼叫上 |
key | String | SpEL表示式,用來計算自定義的快取key |
unless | String | SpEL表示式,如果得到的值是true的話,返回值不會放到快取之中 |
package springmvc.orders.db;
import java.util.List;
import org.springframework.cache.annotation.Cacheable;
import springmvc.bean.Order;
public interface OrderOperations {
@Cacheable("spittle")
List<Order> findOrdersByType(String t);
}
快取切面會攔截呼叫並在快取中查詢之前以名spittle儲存的返回值。快取的key是傳遞到findOrdersByType()方法中的t引數。如果按照這個key能夠找到值的話,就會返回找到的值,方法就不會被呼叫。如果沒有找到值的話,那麼就會呼叫這個方法
當在介面方法添加註解後,被註解的方法,在所有的實現繼承中都會有相同的快取規則
@CacheEvict
@CacheEvict("spittle")
void remove(String Id);
@CacheEvict能夠應用在返回值為void的方法上, 而@Cacheable和@CachePut需要非void的返回值,他將會作為放在快取中的條目
屬性 | 型別 | 描述 |
---|---|---|
value | String[] | 要使用的快取名稱 |
key | String | SpEL表示式,用來計算自定義的快取key |
condition | String | SpEL表示式,如果得到的值是false的話,快取不會應用到方法呼叫上 |
allEntries | boolean | 如果為true的話,特定快取的所有條目都會被移除 |
beforeInvocation | boolean | 如果為true的話,在方法呼叫之前移除條目,如果為false的話,在方法成功呼叫之後在移除條目 |
更多內容可以關注微信公眾號,或者訪問AppZone網站
相關推薦
Heka配置講解
heka 配置基於Heka,ElasticSearch和Kibana的分布式後端日誌架構目前主流的後端日誌都采用的標準的elk模式(Elasticsearch,Logstash,Kinaba),分別負責日誌存儲,收集和日誌可視化。不過介於我們的日誌文件多樣,分布在各個不同的服務器,各種不同的日誌,為了日後方便
Tomcat的server.xml配置講解(一)
路徑配置 xml文件 local 訪問 進行 oot pre 新的 地址 一、Tomcat虛擬目錄的配置 1、服務器配置 默認端口號為8080,如果要想修改端口號,則可以在Tomcat目錄中的conf/server.xml文件,找到如下代碼,將端口號改為:80;保存serv
虛擬IP之輔助IP概念實戰配置講解
-- sha dcb shadow proc 輔助ip color 輔助 alt adsfip --helpip addr help ip addr add 10.0.2.1/24 dev eth0 (24位源碼) 回車 添加別名輔助ip 用ipconfig 查看的
Nginx服務器抵禦CC攻擊的相關配置講解
完全 超過 原因 是否 cookie n) 配置文件 nginx服務 uri CC攻擊利用代理服務器向網站發送大量需要較長計算時間的URL請求,如數據庫查詢等,導致服務器進行大量計算而很快達到自身的處理能力而形成DOS。而攻擊者一旦發送請求給代理後就主動斷開連接,因??代理
JEPLUS平臺首頁規劃之統計圖版塊的配置講解
cto image not 設置 vpd sel 個性 nag platform JEPLUS平臺首頁規劃之統計圖版塊的配置講解一、效果展示二、配置過程1、打開首頁規劃的規劃界面打開規劃界面之後設計首頁展示的框架,效果如圖:2、在設置的框
JEPLUS平臺首頁規劃之報表版塊的配置講解——JEPLUS軟件快速開發平臺
ack spa mic tor 快速 back ffffff htm 效果 JEPLUS平臺首頁規劃之報表版塊的配置講解一、效果展示二、配置過程1、打開首頁規劃的規劃界面,設計首頁規劃的框架,在框架的選擇裏選擇報表版塊拖入框架裏。如圖:三、
JPA使用指南 javax.persistence的註解配置講解
super set 集合 兩個 false class fresh ger 建立 轉自http://67566894.iteye.com/blog/659829 示例 @SuppressWarnings("serial") @Entity @Table(name=
【mysql學習二】——從架構到基本配置講解
前言 雖然不是DBA,但是瞭解mysql的一些基本知識對於我們提高自身水平和提高書寫sql語句效能有幫助! 內容 1.配置檔案: 檔名稱 作用 二進位制日誌log-bin 用於主
Nginx+Tomcat叢集配置講解
目的:實現高效能負載均衡的Tomcat叢集 在linux上安裝好niginx後進入conf資料夾下編輯nginx.conf檔案,檔案配置講解如下 <!--nginx程序數,建議設定為等於CPU總核心數--> worker_processes 8; <
【從0開始 獨立完成企業級Java電商網站開發】開發環境安裝與配置講解、實操
1. 作業系統 虛擬機器: parallels或者vmware fusion 下載地址:https://pan.baidu.com/s/1JxVDhY0Ei9T2suDeLNmFug Linux : centos6.8 64bit 下載地址: http://a
Nginx反向代理和配置詳解(正向代理、反向代理、負載均衡原理、Nginx反向代理原理和配置講解)
nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實現。 Nginx是一款開原始碼的高效能HT
Oracle監聽配置講解
本文作者:賀聖軍,叩丁狼高階講師。原創文章,轉載請註明出處。 很多使用Oracle的朋友遇到最多的問題就是Oracle資料庫已經安裝完成, 但是在使用Oracle客戶端pl/sql等工具卻怎麼都連線不上去, 如果遇到這種問題, 請好好看下這篇文章,必有收穫. 在這裡我們簡單說明
Log4j.xml配置講解
<?xml version="1.0" encoding="UTF-8"?> <!-- 標頭檔案 --> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <
Spring的異常重試框架Spring Retry簡單配置講解
/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may no
Nginx詳解(正向代理、反向代理、負載均衡原理、ginx反向代理原理和配置講解
nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實現。 這裡主要通過三
Springboot2(2)屬性配置講解和自定義屬性配置
[原始碼地址](https://gitee.com/cowboy2016/springboot2-open) springboot2系列教程 在使用spring boot過程中,可以發現專案中只需要極少的配置就能完成相應的功能,這歸功於spring boot中的模組化配置,在
redis問題及常見配置講解
本文使用的是spring-data-redis 首先說下redis最簡單得使用,除去配置。 需要在你要使用得快取得地方,例如mybatis在mapper.xml中加入: <cache eviction="LRU" type="cn.jbit.cache.RedisCache"/&g
sudo 命令與許可權配置講解
sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設定了可執行sudo指令的使用者。若其未經授權的使用者企圖使用sudo,則會發出警告的郵件給管理員。使用者使用sudo時,必須先輸入密碼,之後有5分鐘的有效期限,超過期限則必
微信小程式框架製作-第08課-App.json-window和(子)頁面配置講解
pages 用於指定小程式由哪些頁面組成,每一項都對應一個頁面的 路徑+檔名 資訊。檔名不需要寫檔案字尾,框架會自動去尋找對於位置的 .json, .js, .wxml, .wxss 四個檔案進行處理。 陣列的第一項代表小程式的初始頁面(首頁)。小程式中新增/減少頁
Redis的Spring配置講解
Redis是一種特殊型別的資料庫,他被稱之為key-value儲存 本文覆蓋快取和儲存兩方面進行說明,使用的是Spring 4.0和Java配置方式 儲存 Redis的配置 package springmvc.rootconfig; i