1. 程式人生 > >redis學習系列(二)--spring boot整合Redis叢集

redis學習系列(二)--spring boot整合Redis叢集

spring boot整合Redis叢集

開發

新增依賴,載入Jedis

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

新增redis配置

springboot配置檔案中新增叢集的資訊

# Redis伺服器地址
#spring.redis.host=10.100.50.23
# Redis伺服器連線埠
#spring.redis.port=6379
# Redis伺服器連線密碼(預設為空)
spring.redis.password=
# 連線池最大連線數(使用負值表示沒有限制)
spring.redis.pool.max-active=8
# 連線池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連線池中的最大空閒連線
spring.redis.pool.max-idle=8
# 連線池中的最小空閒連線
spring.redis.pool.min-idle=0
# 連線超時時間(毫秒)
spring.redis.timeout=0
spring.redis.commandTimeout=5000

# redis.cluster
spring.redis.cluster.nodes=10.100.50.23:6380,10.100.50.23:6381,10.100.50.23:6382,10.100.50.23:6383,10.100.50.23:6384,10.100.50.23:6385

專案入口類加入註解@EnableCaching,新增到快取

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@MapperScan("com.example.dao")
@EnableCaching
public class DemoApplication {

   public static voidmain(String[] args) {
      SpringApplication.run(DemoApplication.class,args);
   }

}

自定義redis配置,加入叢集

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;

/**
 * @authorzhenhai.zheng
 * @describe
 *@date 2018/1/23
 **/
@Configuration
@ConditionalOnClass({JedisCluster.class})
public class RedisConfig {
    @Value("${spring.redis.cluster.nodes}")
    privateString clusterNodes;
    @Value("${spring.redis.timeout}")
    private inttimeout;
    @Value("${spring.redis.pool.max-idle}")
    private intmaxIdle;
    @Value("${spring.redis.pool.max-wait}")
    private longmaxWaitMillis;
    @Value("${spring.redis.commandTimeout}")
    private intcommandTimeout;
    @Bean
    publicJedisCluster getJedisCluster() {
        String[] cNodes = clusterNodes.split(",");
        Set<HostAndPort> nodes =new HashSet<>();
        //分割出叢集節點
        for(String node : cNodes) {
            String[] hp = node.split(":");
            nodes.add(newHostAndPort(hp[0],Integer.parseInt(hp[1])));
        }
        JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        //建立叢集物件
//      JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout);
        return newJedisCluster(nodes,commandTimeout,jedisPoolConfig);
    }

    /**
     * 設定資料存入redis 的序列化方式
     *</br>redisTemplate序列化預設使用的jdkSerializeable,儲存二進位制位元組碼,導致key會出現亂碼,所以自定義
     *序列化類
     *
     * @paramredisConnectionFactory
     */
    @Bean
    publicRedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {
        RedisTemplate<Object,Object> redisTemplate = newRedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper =new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(newStringRedisSerializer());

        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }

}

Service實現類中,自動注入jedisCluster

@Autowired
private JedisCluster jedisCluster;

並寫入一個測試方法

public String findRedis() {
    jedisCluster.set("userName", "hello wenqy");
    return jedisCluster.get("userName");
}

在控制層加入呼叫剛才的service方法

@RequestMapping("/redis")
public String findRedis() {
    return userService.findRedis();
}

測試

findRedis方法中打斷點,第一次訪問時建立快取,第二次訪問發現沒有進入該函式。但返回的結果是一樣的。

最後訪問


spring boot整合redis進行資料快取功能

        @Cacheable 表明Spring在呼叫方法之前,首先應該在快取中查詢方法的返回值。如果這個值能夠找到,就會返回快取的值。否則的話,這個方法就會被呼叫,返回值會放到快取之中

        @cacheput 表明Spring應該將方法的返回值放到快取中。在方法的呼叫前並不會 檢查快取,方法始終都會被呼叫

        @cacheevict 表明Spring應該在快取中清除一個或多個條目

        @caching 這是一個分組的註解,能夠同時應用多個其他的快取註解

        @cacheconfig 可以在類層級配置一些共用的快取配置

將相關注解新增到介面方法上即可

/**
 * 指定id的資料
 * @param id
 * @return
 */
@Cacheable(value = "user_",key = "#root.caches[0].name+#id")
@RequestMapping("get/{id}")
public User get(@PathVariable("id") String id){
    User user = userService.getUser(id);
    return user;
}
/**
 *
 * @param user
 */
@RequestMapping("/updateUser")
@CachePut(value = "user_",key = "#root.caches[0].name+#user.id")
public void updateUser(User user){
    userService.updateByPrimaryKey(user);
}
/**
 *
 * @param id
 */
@RequestMapping("/delete/{id}")
@CacheEvict(value = "user_",key = "#root.caches[0].name+#id")
public void delete(@PathVariable("id") String id){
    userService.deleteByPrimaryKey(id);
}

相關推薦

redis學習系列()--spring boot整合Redis叢集

spring boot整合Redis叢集 開發 新增依賴,載入Jedis <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

Spring Boot2 系列教程(十六)Spring Boot 整合 Redis

在 Redis 出現之前,我們的快取框架各種各樣,有了 Redis ,快取方案基本上都統一了,關於 Redis,鬆哥之前有一個系列教程,尚不瞭解 Redis 的小夥伴可以參考這個教程: Redis 教程合集 使用 Java 操作 Redis 的方案很多,Jedis 是目前較為流行的一種方案,除了 Jedi

Spring Boot2 系列教程(十九)Spring Boot 整合 Redis

經過 Spring Boot 的整合封裝與自動化配置,在 Spring Boot 中整合Redis 已經變得非常容易了,開發者只需要引入 Spring Data Redis 依賴,然後簡單配下 redis 的基本資訊,系統就會提供一個 RedisTemplate 供開發者使用,但是今天鬆哥想和大夥聊的不是這種

Spring Boot學習總結】14.Spring Boot整合Redis-與傳統方式對比

前面我們講解了如何使用Spring Boot來控制事務,下面我們來講解一下如何使用Spring Boot來整合Redis 為了對比傳統工程與Spring Boot整合的不同,以及彰顯Spring Boot整合的優勢,我們會逐一剖析傳統整合方式與Spring Boot整合方式。 一、傳統方式整

Spring Boot開發系列(Redis)(三)--Spring boot 整合redis完成簡單的get,set操作

Spring Boot開發系列(Redis)(三)–Spring boot 整合redis完成簡單的get,set操作 【1】匯入reids相關依賴 <dependency> <groupId>redis.clients</g

SpringBoot入門系列(七)Spring Boot整合Redis快取

前面介紹了Spring Boot 中的整合Mybatis並實現增刪改查,。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。 今天主要講解Springboot整合Redis。Redis是目前使用最多的快取,包

Spring Boot-整合redis(六)

lec access IV 使用 tty factor cat 訪問 spa redis安裝 參考:https://www.cnblogs.com/LQBlog/p/9214517.html 單機版 1.添加pom依賴 <!-- Spring Boot R

spring boot 整合redis 以一個熱門房產為例子

1.新增redis依賴 就是jedis redis.clients jedis 2.9.0 2.每次點選房屋詳情熱度加一 呼叫此方法 recommandService.increase(id);//每次點選房屋熱度加1 3.recommandService如何寫主要

Spring Boot整合Redis實戰操作

最近在使用Spring Boot,發現其功能真是強大,可以快速的整合很多的元件功能,非常方便: 今天就來介紹下,如何整合Redis。 定義 Redis 是一個高效能的key-value資料庫。它支援儲存的value型別很多,包括string(字串)、list(連結串列)、set(集合)、zset

Spring boot整合Redis(2)—RedisTemplate的使用來儲存Map集合

前言:上一篇文章我們用的是StringRedisTemplate,但是它存在一點問題,也迫使我重新寫了程式碼,問題是:在我們往快取中存入數字形式的String型別時,我們在利用Spring could將獲取到的資料傳送到另一服務時,我們發現數據已經被強轉為Integer型別了,因為我們可能傳輸的資料龐大,型別

Spring Boot整合Redis及RedisTemplate常用操作

Spring Boot整合Redis maven依賴 <!-- redis 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <

spring boot整合redis實戰

1.spring boot整合redis,此次專案有進行maven的相關配置工作,整個程式碼結構目錄如下: 其中pom檔案繫結相關的redis的引數步驟如下: 其中<dependency>依賴當中進新配置了相關的redis依賴,也就是spring-boot-start

Spring boot整合Redis

1.依賴 (注意版本問題) <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>

spring boot 整合redis+shiro在自定義Realm不能使用@Autowired註解

剛開始spring boot 整合shiro快取使用的是ehcache,自動注入userService如下,沒有問題 @Autowired @Lazy private SysUserService userService; 當將快取換成了redis後,該註解

第五篇:Spring Boot整合Redis

Redis 是一個高效能的key-value資料庫,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。使用redis作為快取技術方案,主要是因為Redis快取技

使用Spring Boot整合Redis操作快取

下來操作SpringBoot整合Redis 首先Redis是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫,快取和訊息中介軟體 1)使用docker安裝redis 如果沒有安裝Redis, 請使用以下命令安裝: [[email 

spring boot 整合 redis

1.匯入所需要的依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-

Spring Boot 整合 Redis 實現快取操作

package org.spring.springboot.service.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spring.springboot.dao.CityDao; impor

Redis學習系列之.Net開發環境搭建及基礎資料結構String字串

一、簡介 Redis有5種基本資料結構,分別是string、list(列表)、hash(字典)、set(集合)、zset(有序集合),這是必須掌握的5種基本資料結構.注意Redis作為一個鍵值對快取系統,其所有的資料結構,都以唯一的key(字串)作為名稱,然後通過key來獲取對應的資料.  

spring boot整合redis實現shiro的分散式session共享

我們知道,shiro是通過SessionManager來管理Session的,而對於Session的操作則是通過SessionDao來實現的,預設的情況下,shiro實現了兩種SessionDao,分別為CachingSessionDAO和MemorySessionDAO,