欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot(三)之Spring Boot中Redis的使用

 更新時(shí)間:2017年05月08日 11:01:17   作者:純潔的微笑  
這篇文章主要介紹了spring boot(三)之Spring Boot中Redis的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

spring boot對(duì)常用的數(shù)據(jù)庫(kù)支持外,對(duì)nosql 數(shù)據(jù)庫(kù)也進(jìn)行了封裝自動(dòng)化。

redis介紹

Redis是目前業(yè)界使用最廣泛的內(nèi)存數(shù)據(jù)存儲(chǔ)。相比memcached,Redis支持更豐富的數(shù)據(jù)結(jié)構(gòu),例如hashes, lists, sets等,同時(shí)支持?jǐn)?shù)據(jù)持久化。除此之外,Redis還提供一些類數(shù)據(jù)庫(kù)的特性,比如事務(wù),HA,主從庫(kù)。可以說Redis兼具了緩存系統(tǒng)和數(shù)據(jù)庫(kù)的一些特性,因此有著豐富的應(yīng)用場(chǎng)景。本文介紹Redis在Spring Boot中兩個(gè)典型的應(yīng)用場(chǎng)景。

如何使用

1、引入 spring-boot-starter-redis

<dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-redis</artifactId> 
</dependency> 

2、添加配置文件

# REDIS (RedisProperties)
# Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)
spring.redis.database=0 
# Redis服務(wù)器地址
spring.redis.host=192.168.0.58
# Redis服務(wù)器連接端口
spring.redis.port=6379 
# Redis服務(wù)器連接密碼(默認(rèn)為空)
spring.redis.password= 
# 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.pool.max-active=8 
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
spring.redis.pool.max-wait=-1 
# 連接池中的最大空閑連接
spring.redis.pool.max-idle=8 
# 連接池中的最小空閑連接
spring.redis.pool.min-idle=0 
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=0 

3、添加cache的配置類

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object target, Method method, Object... params) {
        StringBuilder sb = new StringBuilder();
        sb.append(target.getClass().getName());
        sb.append(method.getName());
        for (Object obj : params) {
          sb.append(obj.toString());
        }
        return sb.toString();
      }
    };
  }
  @SuppressWarnings("rawtypes")
  @Bean
  public CacheManager cacheManager(RedisTemplate redisTemplate) {
    RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
    //設(shè)置緩存過期時(shí)間
    //rcm.setDefaultExpiration(60);//秒
    return rcm;
  }
  @Bean
  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
    StringRedisTemplate template = new StringRedisTemplate(factory);
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);
    template.setValueSerializer(jackson2JsonRedisSerializer);
    template.afterPropertiesSet();
    return template;
  }
}

3、好了,接下來(lái)就可以直接使用了

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class TestRedis {
  @Autowired
  private StringRedisTemplate stringRedisTemplate;
  @Autowired
  private RedisTemplate redisTemplate;
  @Test
  public void test() throws Exception {
    stringRedisTemplate.opsForValue().set("aaa", "111");
    Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
  }
  @Test
  public void testObj() throws Exception {
    User user=new User("aa@126.com", "aa", "aa123456", "aa","123");
    ValueOperations<String, User> operations=redisTemplate.opsForValue();
    operations.set("com.neox", user);
    operations.set("com.neo.f", user,1,TimeUnit.SECONDS);
    Thread.sleep(1000);
    //redisTemplate.delete("com.neo.f");
    boolean exists=redisTemplate.hasKey("com.neo.f");
    if(exists){
      System.out.println("exists is true");
    }else{
      System.out.println("exists is false");
    }
    // Assert.assertEquals("aa", operations.get("com.neo.f").getUserName());
  }
}

以上都是手動(dòng)使用的方式,如何在查找數(shù)據(jù)庫(kù)的時(shí)候自動(dòng)使用緩存呢,看下面;

4、自動(dòng)根據(jù)方法生成緩存

@RequestMapping("/getUser")
@Cacheable(value="user-key")
public User getUser() {
  User user=userRepository.findByUserName("aa");
  System.out.println("若下面沒出現(xiàn)“無(wú)緩存的時(shí)候調(diào)用”字樣且能打印出數(shù)據(jù)表示測(cè)試成功"); 
  return user;
}

其中value的值就是緩存到redis中的key

共享Session-spring-session-data-redis

分布式系統(tǒng)中,sessiong共享有很多的解決方案,其中托管到緩存中應(yīng)該是最常用的方案之一,

Spring Session官方說明

Spring Session provides an API and implementations for managing a user’s session information.

如何使用

1、引入依賴

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>

2、Session配置:

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

maxInactiveIntervalInSeconds: 設(shè)置Session失效時(shí)間,使用Redis Session之后,原Boot的server.session.timeout屬性不再生效

好了,這樣就配置好了,我們來(lái)測(cè)試一下

3、測(cè)試

添加測(cè)試方法獲取sessionid

@RequestMapping("/uid")
  String uid(HttpSession session) {
    UUID uid = (UUID) session.getAttribute("uid");
    if (uid == null) {
      uid = UUID.randomUUID();
    }
    session.setAttribute("uid", uid);
    return session.getId();
  }

登錄redis 輸入 keys '*sessions*'

t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4
t(spring:session:expirations:1472976480000

其中 1472976480000為失效時(shí)間,意思是這個(gè)時(shí)間后session失效,db031986-8ecc-48d6-b471-b137a3ed6bc4 為sessionId,登錄http://localhost:8080/uid 發(fā)現(xiàn)會(huì)一致,就說明session 已經(jīng)在redis里面進(jìn)行有效的管理了。

如何在兩臺(tái)或者多臺(tái)共享session

其實(shí)就是按照上面的步驟在另一個(gè)項(xiàng)目中再次配置一次,啟動(dòng)后自動(dòng)就進(jìn)行了session共享。

示例代碼地址

以上所述是小編給大家介紹的spring boot(三)之Spring Boot中Redis的使用,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java實(shí)現(xiàn)布隆過濾器的幾種方式總結(jié)

    Java實(shí)現(xiàn)布隆過濾器的幾種方式總結(jié)

    這篇文章給大家總結(jié)了幾種Java實(shí)現(xiàn)布隆過濾器的方式,手動(dòng)硬編碼實(shí)現(xiàn),引入Guava實(shí)現(xiàn),引入hutool實(shí)現(xiàn),通過redis實(shí)現(xiàn)等幾種方式,文中有詳細(xì)的代碼和圖解,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合Mybatis-plus案例及用法實(shí)例

    SpringBoot整合Mybatis-plus案例及用法實(shí)例

    mybatis-plus是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • SpringBoot學(xué)習(xí)篇之@Valid與@Validated的區(qū)別

    SpringBoot學(xué)習(xí)篇之@Valid與@Validated的區(qū)別

    @Valid是使用Hibernate?validation的時(shí)候使用,@Validated是只用Spring?Validator校驗(yàn)機(jī)制使用,下面這篇文章主要給大家介紹了關(guān)于SpringBoot學(xué)習(xí)篇之@Valid與@Validated區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Java中的觀察者模式實(shí)例講解

    Java中的觀察者模式實(shí)例講解

    這篇文章主要介紹了Java中的觀察者模式實(shí)例講解,本文先是講解了觀察者模式的概念,然后以實(shí)例講解觀察者模式的實(shí)現(xiàn),以及給出了UML圖,需要的朋友可以參考下
    2014-12-12
  • Java靜態(tài)方法不具有多態(tài)性詳解

    Java靜態(tài)方法不具有多態(tài)性詳解

    下面小編就為大家?guī)?lái)一篇Java靜態(tài)方法不具有多態(tài)性詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-06-06
  • Java解決同時(shí)出庫(kù)入庫(kù)訂單號(hào)自動(dòng)獲取問題解決

    Java解決同時(shí)出庫(kù)入庫(kù)訂單號(hào)自動(dòng)獲取問題解決

    在Java中,處理多線程環(huán)境下的訂單號(hào)生成問題可以采用多種策略,如使用AtomicLong保證線程安全,通過定義訂單號(hào)生成器并利用線程模擬出庫(kù)和入庫(kù)操作,每個(gè)線程從訂單號(hào)生成器中獲取唯一訂單號(hào),感興趣的朋友一起看看吧
    2024-09-09
  • 關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題

    關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題

    這篇文章主要介紹了關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-10-10
  • java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    這篇文章主要為大家詳細(xì)介紹了java微信開發(fā)API第二步,微信獲取以及保存接口調(diào)用憑證,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 抽象類使用Jackson序列化問題

    抽象類使用Jackson序列化問題

    這篇文章主要介紹了抽象類使用Jackson序列化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java如何正確的使用wait-notify方法你知道嗎

    Java如何正確的使用wait-notify方法你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java如何正確的使用wait-notify方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論