1. 程式人生 > >Redis的Spring配置講解

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網站

http://7xp64w.com1.z0.glb.clouddn.com/qrcode_for_gh_3e33976a25c9_258.jpg

相關推薦

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