国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Redis的Spring配置講解

FullStackDeveloper / 1165人閱讀

摘要:否則,這個方法就會被調用,返回值會放到緩存之中表名應該將方法的返回值放到緩存中。

Redis是一種特殊類型的數據庫,他被稱之為key-value存儲

本文覆蓋緩存和存儲兩方面進行說明,使用的是Spring 4.0和Java配置方式

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

存儲 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 redisTemplate(
            RedisConnectionFactory redisCF) {
        RedisTemplate redisTemplate = new RedisTemplate();
        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 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
BoundListOperationscart=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.class));
緩存 配置

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

    /**
     * 緩存管理器
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate 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 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://specialneedsforspecialkids.com/yun/64907.html

相關文章

  • spring boot - 收藏集 - 掘金

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

    rollback 評論0 收藏0
  • [直播視頻] 《Java 微服務實踐 - Spring Boot 系列》限時折扣

    摘要:作為微服務的基礎設施之一,背靠強大的生態社區,支撐技術體系。微服務實踐為系列講座,專題直播節,時長高達小時,包括目前最流行技術,深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業人員拋磚引玉。 簡介 目前業界最流行的微服務架構正在或者已被各種規模的互聯網公司廣泛接受和認可,業已成為互聯網開發人員必備技術。無論是互聯網、云計算還是大數據,Java平臺已成為全棧的生態體系,...

    Enlightenment 評論0 收藏0

發表評論

0條評論

FullStackDeveloper

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<