久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SpringBoot怎樣集成redis

126次閱讀
沒有評論

共計 10474 個字符,預計需要花費 27 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家分享的是有關 SpringBoot 怎樣集成 redis 的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。

定義

REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統。
Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value 數據庫,并提供多種語言的 API。
它通常被稱為數據結構服務器,因為值(value)可以是 字符串 (String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets) 等類型。
reids 的優點

以下是 Redis 的一些優點。

異常快 – Redis 非常快,每秒可執行大約 110000 次的設置 (SET) 操作,每秒大約可執行 81000 次的讀取 / 獲取 (GET) 操作。
支持豐富的數據類型 – Redis 支持開發人員常用的大多數數據類型,例如列表,集合,排序集和散列等等。這使得 Redis 很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數據類型來處理解決。
操作具有原子性 – 所有 Redis 操作都是原子操作,這確保如果兩個客戶端并發訪問,Redis 服務器能接收更新的值。
多實用工具 – Redis 是一個多實用工具,可用于多種用例,如:緩存,消息隊列(Redis 本地支持發布 / 訂閱),應用程序中的任何短期數據,例如,web 應用程序中的會話,網頁命中計數等。

Redis 安裝

Window 下安裝
下載地址:https://github.com/MSOpenTech/redis/releases。
Redis 支持 32 位和 64 位。這個需要根據你系統平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip 壓縮包到 C 盤,解壓后,將文件夾重新命名為 redis。

打開一個 cmd 窗口 使用 cd 命令切換目錄到 C:\redis
運行 redis-server.exe redis.windows.conf
如果想方便的話,可以把 redis 的路徑加到系統的環境變量里,這樣就省得再輸路徑了,后面的那個 redis.windows.conf 可以省略,如果省略,會啟用默認的。輸入之后,會顯示如下界面:
SpringBoot 怎樣集成 redis

集成 redis

我們還是延用上一章的項目:Springboot 集成 springcloud-config 實現 dataSource 熱部署

1、添加依賴

!-- 集成 redis-- 
 dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-redis /artifactId 
  version 1.4.1.RELEASE /version 
 /dependency 
 dependency 
  groupId com.alibaba /groupId 
  artifactId fastjson /artifactId 
  version 1.2.3 /version 
 /dependency 
 dependency 
  groupId com.fasterxml.jackson.core /groupId 
  artifactId jackson-databind /artifactId 
 /dependency

2、在配置中心里添加 redis 配置

spring.redis.host=127.0.0.1
#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=30000

3、配置類 RedisConfig

import java.lang.reflect.Method;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cloud.context.config.annotation.RefreshScope;
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;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import com.fasterxml.jackson.annotation.PropertyAccessor; 
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
@EnableCaching
@RefreshScope
public class RedisConfig extends CachingConfigurerSupport{ @Value( ${spring.redis.host} )
 private String host;
 @Value(${spring.redis.port} )
 private int port;
 @Value(${spring.redis.timeout} )
 private int timeout;
 @Value(${spring.redis.password} )
 private String password;
 @Value(${spring.redis.pool.max-active} )
 private int maxActive;
 @Value(${spring.redis.pool.max-wait} )
 private int maxWait;
 @Value(${spring.redis.pool.max-idle} )
 private int maxIdle;
 @Value(${spring.redis.pool.min-idle} )
 private int minIdle;
 
 @RefreshScope
 @Bean
 public KeyGenerator wiselyKeyGenerator(){ 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();
 }
 };
 }
 
 @RefreshScope
 @Bean
 public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory factory = new JedisConnectionFactory();
 factory.setHostName(host);
 factory.setPort(port);
 factory.setTimeout(timeout); // 設置連接超時時間
 factory.setPassword(password);
 factory.getPoolConfig().setMaxIdle(maxIdle);
 factory.getPoolConfig().setMinIdle(minIdle);
 factory.getPoolConfig().setMaxTotal(maxActive);
 factory.getPoolConfig().setMaxWaitMillis(maxWait);
 return factory;
 }
 
 @RefreshScope
 @Bean
 public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
 // Number of seconds before expiration. Defaults to unlimited (0)
 cacheManager.setDefaultExpiration(10); // 設置 key-value 超時時間
 return cacheManager;
 }
 
 @RefreshScope
 @Bean
 public RedisTemplate String, String  redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory);
 setSerializer(template); // 設置序列化工具,這樣 ReportBean 不需要實現 Serializable 接口
 template.afterPropertiesSet();
 return template;
 }
 
 @RefreshScope
 private void setSerializer(StringRedisTemplate template) { 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);
 }
}

4、RedisUtils 類

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
@Service
public class RedisUtils {
 @Autowired
 private RedisTemplate redisTemplate;
 /**
 *  寫入緩存
 * @param key
 * @param value
 * @return
 */
 public boolean set(final String key, Object value) {
 boolean result = false;
 try { ValueOperations Serializable, Object  operations = redisTemplate.opsForValue();
 operations.set(key, value);
 result = true;
 } catch (Exception e) { e.printStackTrace();
 }
 return result;
 }
 /**
 *  寫入緩存設置時效時間
 * @param key
 * @param value
 * @return
 */
 public boolean set(final String key, Object value, Long expireTime ,TimeUnit timeUnit) {
 boolean result = false;
 try { ValueOperations Serializable, Object  operations = redisTemplate.opsForValue();
 operations.set(key, value);
 redisTemplate.expire(key, expireTime, timeUnit);
 result = true;
 } catch (Exception e) { e.printStackTrace();
 }
 return result;
 }
 /**
 *  批量刪除對應的 value
 * @param keys
 */
 public void remove(final String... keys) { for (String key : keys) { remove(key);
 }
 }
 /**
 *  批量刪除 key
 * @param pattern
 */
 public void removePattern(final String pattern) { Set Serializable  keys = redisTemplate.keys(pattern);
 if (keys.size()   0){ redisTemplate.delete(keys);
 }
 }
 /**
 *  刪除對應的 value
 * @param key
 */
 public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key);
 }
 }
 /**
 *  判斷緩存中是否有對應的 value
 * @param key
 * @return
 */
 public boolean exists(final String key) { return redisTemplate.hasKey(key);
 }
 /**
 *  讀取緩存
 * @param key
 * @return
 */
 public Object get(final String key) {
 Object result = null;
 ValueOperations Serializable, Object  operations = redisTemplate.opsForValue();
 result = operations.get(key);
 return result;
 }
 /**
 *  哈希   添加
 * @param key
 * @param hashKey
 * @param value
 */
 public void hmSet(String key, Object hashKey, Object value){ HashOperations String, Object, Object  hash = redisTemplate.opsForHash();
 hash.put(key,hashKey,value);
 }
 /**
 *  哈希獲取數據
 * @param key
 * @param hashKey
 * @return
 */
 public Object hmGet(String key, Object hashKey){ HashOperations String, Object, Object  hash = redisTemplate.opsForHash();
 return hash.get(key,hashKey);
 }
 /**
 *  列表添加
 * @param k
 * @param v
 */
 public void lPush(String k,Object v){ ListOperations String, Object  list = redisTemplate.opsForList();
 list.rightPush(k,v);
 }
 /**
 *  列表獲取
 * @param k
 * @param l
 * @param l1
 * @return
 */
 public List Object  lRange(String k, long l, long l1){ ListOperations String, Object  list = redisTemplate.opsForList();
 return list.range(k,l,l1);
 }
 /**
 *  集合添加
 * @param key
 * @param value
 */
 public void add(String key,Object value){ SetOperations String, Object  set = redisTemplate.opsForSet();
 set.add(key,value);
 }
 /**
 *  集合獲取
 * @param key
 * @return
 */
 public Set Object  setMembers(String key){ SetOperations String, Object  set = redisTemplate.opsForSet();
 return set.members(key);
 }
 /**
 *  有序集合添加
 * @param key
 * @param value
 * @param scoure
 */
 public void zAdd(String key,Object value,double scoure){ ZSetOperations String, Object  zset = redisTemplate.opsForZSet();
 zset.add(key,value,scoure);
 }
 /**
 *  有序集合獲取
 * @param key
 * @param scoure
 * @param scoure1
 * @return
 */
 public Set Object  rangeByScore(String key,double scoure,double scoure1){ ZSetOperations String, Object  zset = redisTemplate.opsForZSet();
 return zset.rangeByScore(key, scoure, scoure1);
 }

5、測試,修改 controller

import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.chenqi.springboot.redis.RedisUtils;
import com.chenqi.springboot.service.TestService;
@RestController
public class SpringBootController {
 
 public static final Logger log = LoggerFactory.getLogger(SpringBootController.class);
 
 @Autowired
 TestService testService;
 
 @Autowired
 private RedisUtils redisUtils;
 @RequestMapping(value =  /hello/{id} )
 public String hello(@PathVariable(value =  id) String id){
 // 查詢緩存中是否存在
 boolean hasKey = redisUtils.exists(id);
 String str =  
 if(hasKey){
 // 獲取緩存
 Object object = redisUtils.get(id);
 log.info(從緩存獲取的數據 + object);
 str = object.toString();
 }else{
 // 從數據庫中獲取信息
 log.info( 從數據庫中獲取數據 
 str = testService.test();
 // 數據插入緩存(set 中的參數含義:key 值,user 對象,緩存存在時間 10(long 類型),時間單位) redisUtils.set(id,str,10L,TimeUnit.MINUTES);
 log.info(數據插入緩存  + str);
 }
 return str;
 }
}

啟動項目,第一次訪問:http://localhost:8002/hello/111
SpringBoot 怎樣集成 redis
SpringBoot 怎樣集成 redis
通過控制臺輸出,我們可以看到是從數據庫中獲取的數據,并且存入了 redis 緩存中。

我們再次刷新瀏覽器
SpringBoot 怎樣集成 redis
可以看到,第二次是從緩存中讀取的,我們試試不斷刷新瀏覽器
SpringBoot 怎樣集成 redis
可以看到,之后都是從緩存中獲取的。

到此我們的 redis 就配置好了。

SpringBoot 集成 Redis-demo 下載
急需 demo 的兄弟就自行下載吧,不急可以留言郵箱,一般 48 小時內會發。

感謝各位的閱讀!關于“SpringBoot 怎樣集成 redis”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計10474字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 达州市| 临西县| 大石桥市| 宁都县| 扎赉特旗| 屯昌县| 新泰市| 西和县| 巴青县| 武隆县| 浮山县| 正镶白旗| 新源县| 江永县| 时尚| 英德市| 博客| 平山县| 嘉鱼县| 佛坪县| 巴林左旗| 景德镇市| 陕西省| 白朗县| 祁连县| 大埔区| 喀什市| 尉犁县| 宣威市| 蓬溪县| 呈贡县| 仁寿县| 东乌珠穆沁旗| 南投市| 会东县| 嵊泗县| 新乐市| 乐陵市| 安新县| 宜章县| 大兴区|