成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Redis的Spring配置講解

FullStackDeveloper / 1173人閱讀

摘要:否則,這個(gè)方法就會(huì)被調(diào)用,返回值會(huì)放到緩存之中表名應(yīng)該將方法的返回值放到緩存中。

Redis是一種特殊類型的數(shù)據(jù)庫,他被稱之為key-value存儲(chǔ)

本文覆蓋緩存和存儲(chǔ)兩方面進(jìn)行說明,使用的是Spring 4.0和Java配置方式

代碼地址下載地址:https://github.com/zoeminghong/springmvc-javaconfig

存儲(chǔ) 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");
        // 端口號(hào)
        jedisConnectionFactory.setPort(6379);
        jedisConnectionFactory.afterPropertiesSet();
        return jedisConnectionFactory;
    }

    /**
     * RedisTemplate配置
     * 
     * @param redisCF
     * @return
     */
    @Bean
    public RedisTemplate redisTemplate(
            RedisConnectionFactory redisCF) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisCF);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

Redis連接工廠

JedisConnectionFactory

JredisConnectionFactory

LettuceConnectionFactory

SrpConnectionFactory

建議自行測(cè)試選用合適自己的連接工廠

如果使用的是localhost和默認(rèn)端口,則這兩項(xiàng)的配置可以省略

RedisTemplate

RedisTemplate

StringRedisTemplate

RedisTemplate能夠讓我們持久化各種類型的key和value,并不僅限于字節(jié)數(shù)組

StringRedisTemplate擴(kuò)展了RedisTemplate,只能使用String類型

StringRedisTemplate有一個(gè)接受RedisConnectionFactory的構(gòu)造器,因此沒有必要在構(gòu)建后在調(diào)用setConnectionFactory()

使用RedisTemplateAPI

方法 子API接口 描述
opsForValue() ValueOperations 描述具有簡(jiǎn)單值的條目
opsForList() ListOperations 操作具有l(wèi)ist值的條目
opsForSet() SetOperations 操作具有set值的條目
opsForZSet() ZSetOperations 操作具有ZSet值(排序的set)的條目
opsForHash() HashOperations 操作具有hash值的條目
boundValueOps(K) BoundValueOperations 以綁定指定key的方式,操作具有簡(jiǎn)單值的條目
boundListOps(K) BoundListOperations 以綁定指定key的方式,操作具有l(wèi)ist的條目
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 redisTemplate;
    @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET)
    public String index() {
        redisTemplate.opsForValue().set("gege", 11);
        System.out.print(redisTemplate.opsForValue().get("gege"));
        return "index";
    }
}
//創(chuàng)建List條目,key是cart
BoundListOperationscart=redisTemplate.boundListOps("cart");
//刪除最后的一條數(shù)據(jù)
cart.rightPop();
//在最后,添加一條數(shù)據(jù)
cart.rightPush("我笑了");
Key和Value序列化

如果要使用到JavaBean,需要其實(shí)現(xiàn)Serializable接口,將其序列化

或者使用Spring Data Redis提供的序列化器

GenericToStringSerializer:使用Spring轉(zhuǎn)換服務(wù)進(jìn)行序列化

JacksonJsonRedisSerializer:使用Jackson1,將對(duì)象序列化為JSON

Jackson2JsonRedisSerializer:使用Jackson2,將對(duì)象序列化為JSON

JdkSerializationRedisSerializer:使用Java序列化

OxmSerializer:使用Spring O/X映射的編排器和解排器實(shí)現(xiàn)序列化,用于XML序列化

StringRedisSerializer:序列化String類型的key和value

redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Order.class));
緩存 配置

在配置文件中追加如下代碼

    /**
     * 緩存管理器
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager  cacheManager    =new RedisCacheManager(redisTemplate);
        //設(shè)置過期時(shí)間
        cacheManager.setDefaultExpiration(10);
        return cacheManager;

    }
使用注解進(jìn)行緩存數(shù)據(jù)
注解 描述
@Cacheable 表明Spring在調(diào)用方法之前,首先應(yīng)該在緩存中查找方法的返回值,如果這個(gè)值能夠找到,就會(huì)返回緩存的值。否則,這個(gè)方法就會(huì)被調(diào)用,返回值會(huì)放到緩存之中
@CachePut 表名Spring應(yīng)該將方法的返回值放到緩存中。在方法的調(diào)用前并不會(huì)檢查緩存,方法始終都會(huì)被調(diào)用
@CacheEvict 表明Spring應(yīng)該在緩存中清除一個(gè)或多個(gè)條目
@Caching 這是一個(gè)分組的注解,能夠同時(shí)應(yīng)用多個(gè)其他的緩存注解

@Cacheable與@CachePut的一些共有屬性

屬性 類型 描述
value String[] 要使用的緩存名稱
condition String SpEL表達(dá)式,如果得到的值是false的話,不會(huì)將緩存應(yīng)用到方法調(diào)用上
key String SpEL表達(dá)式,用來計(jì)算自定義的緩存key
unless String SpEL表達(dá)式,如果得到的值是true的話,返回值不會(huì)放到緩存之中
package springmvc.orders.db;

import java.util.List;

import org.springframework.cache.annotation.Cacheable;

import springmvc.bean.Order;

public interface OrderOperations {
    @Cacheable("spittle")
    List findOrdersByType(String t);

}

緩存切面會(huì)攔截調(diào)用并在緩存中查找之前以名spittle存儲(chǔ)的返回值。緩存的key是傳遞到findOrdersByType()方法中的t參數(shù)。如果按照這個(gè)key能夠找到值的話,就會(huì)返回找到的值,方法就不會(huì)被調(diào)用。如果沒有找到值的話,那么就會(huì)調(diào)用這個(gè)方法

當(dāng)在接口方法添加注解后,被注解的方法,在所有的實(shí)現(xiàn)繼承中都會(huì)有相同的緩存規(guī)則

@CacheEvict

@CacheEvict("spittle")
void remove(String Id);

@CacheEvict能夠應(yīng)用在返回值為void的方法上, 而@Cacheable和@CachePut需要非void的返回值,他將會(huì)作為放在緩存中的條目

屬性 類型 描述
value String[] 要使用的緩存名稱
key String SpEL表達(dá)式,用來計(jì)算自定義的緩存key
condition String SpEL表達(dá)式,如果得到的值是false的話,緩存不會(huì)應(yīng)用到方法調(diào)用上
allEntries boolean 如果為true的話,特定緩存的所有條目都會(huì)被移除
beforeInvocation boolean 如果為true的話,在方法調(diào)用之前移除條目,如果為false的話,在方法成功調(diào)用之后在移除條目

更多內(nèi)容可以關(guān)注微信公眾號(hào),或者訪問AppZone網(wǎng)站

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64907.html

相關(guān)文章

  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 評(píng)論0 收藏0
  • [直播視頻] 《Java 微服務(wù)實(shí)踐 - Spring Boot 系列》限時(shí)折扣

    摘要:作為微服務(wù)的基礎(chǔ)設(shè)施之一,背靠強(qiáng)大的生態(tài)社區(qū),支撐技術(shù)體系。微服務(wù)實(shí)踐為系列講座,專題直播節(jié),時(shí)長(zhǎng)高達(dá)小時(shí),包括目前最流行技術(shù),深入源碼分析,授人以漁的方式,幫助初學(xué)者深入淺出地掌握,為高階從業(yè)人員拋磚引玉。 簡(jiǎn)介 目前業(yè)界最流行的微服務(wù)架構(gòu)正在或者已被各種規(guī)模的互聯(lián)網(wǎng)公司廣泛接受和認(rèn)可,業(yè)已成為互聯(lián)網(wǎng)開發(fā)人員必備技術(shù)。無論是互聯(lián)網(wǎng)、云計(jì)算還是大數(shù)據(jù),Java平臺(tái)已成為全棧的生態(tài)體系,...

    Enlightenment 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

FullStackDeveloper

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<