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

使用springBoot集成redis的案例

156次閱讀
沒有評論

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

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

丸趣 TV 小編給大家分享一下使用 springBoot 集成 redis 的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

springboot 是什么

springboot 一種全新的編程規(guī)范,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程,SpringBoot 也是一個服務于框架的框架,服務范圍是簡化配置文件。

REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統(tǒng)。

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value 數(shù)據(jù)庫,并提供多種語言的 API。

它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務器,因為值(value)可以是 字符串 (String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets) 等類型。

reids 的優(yōu)點

以下是 Redis 的一些優(yōu)點:

異常快 – Redis 非常快,每秒可執(zhí)行大約 110000 次的設置 (SET) 操作,每秒大約可執(zhí)行 81000 次的讀取 / 獲取 (GET) 操作。

支持豐富的數(shù)據(jù)類型 – Redis 支持開發(fā)人員常用的大多數(shù)數(shù)據(jù)類型,例如列表,集合,排序集和散列等等。這使得 Redis 很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數(shù)據(jù)類型來處理解決。

操作具有原子性 – 所有 Redis 操作都是原子操作,這確保如果兩個客戶端并發(fā)訪問,Redis 服務器能接收更新的值。

多實用工具 – Redis 是一個多實用工具,可用于多種用例,如:緩存,消息隊列(Redis 本地支持發(fā)布 / 訂閱),應用程序中的任何短期數(shù)據(jù),例如,web 應用程序中的會話,網(wǎng)頁命中計數(shù)等。

Redis 安裝

Window 下安裝

下載地址:https://github.com/MSOpenTech/redis/releases。

Redis 支持 32 位和 64 位。這個需要根據(jù)你系統(tǒng)平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip 壓縮包到 C 盤,解壓后,將文件夾重新命名為 redis。

打開一個 cmd 窗口 使用 cd 命令切換目錄到 C:\redis

運行 redis-server.exe redis.windows.conf

如果想方便的話,可以把 redis 的路徑加到系統(tǒng)的環(huán)境變量里,這樣就省得再輸路徑了,后面的那個 redis.windows.conf 可以省略,如果省略,會啟用默認的。輸入之后,會顯示如下界面:

使用 springBoot 集成 redis 的案例

集成 redis

我們還是延用上一章的項目:Springboot 集成 springcloud-config 實現(xiàn) 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=
#連接池最大連接數(shù)(使用負值表示沒有限制)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 不需要實現(xiàn) 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);
 }
 /**
 *  哈希獲取數(shù)據(jù)
 * @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(從緩存獲取的數(shù)據(jù) + object);
 str = object.toString();
 }else{
 // 從數(shù)據(jù)庫中獲取信息
 log.info( 從數(shù)據(jù)庫中獲取數(shù)據(jù) 
 str = testService.test();
 // 數(shù)據(jù)插入緩存(set 中的參數(shù)含義:key 值,user 對象,緩存存在時間 10(long 類型),時間單位) redisUtils.set(id,str,10L,TimeUnit.MINUTES);
 log.info(數(shù)據(jù)插入緩存  + str);
 }
 return str;
 }
}

啟動項目,第一次訪問:http://localhost:8002/hello/111
使用 springBoot 集成 redis 的案例
使用 springBoot 集成 redis 的案例

通過控制臺輸出,我們可以看到是從數(shù)據(jù)庫中獲取的數(shù)據(jù),并且存入了 redis 緩存中。

我們再次刷新瀏覽器

使用 springBoot 集成 redis 的案例
可以看到,第二次是從緩存中讀取的,我們試試不斷刷新瀏覽器

使用 springBoot 集成 redis 的案例
可以看到,之后都是從緩存中獲取的。

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

以上是“使用 springBoot 集成 redis 的案例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計10532字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 垣曲县| 南木林县| 竹北市| 泰顺县| 长子县| 滕州市| 富顺县| 凭祥市| 称多县| 柞水县| 民乐县| 麻城市| 斗六市| 儋州市| 左贡县| 郎溪县| 石家庄市| 青龙| 鸡西市| 清镇市| 河北区| 浦县| 麻阳| 英吉沙县| 呼伦贝尔市| 富源县| 九台市| 达拉特旗| 马边| 扶沟县| 古交市| 广丰县| 乐东| 滁州市| 凤翔县| 青铜峡市| 江永县| 冷水江市| 海南省| 镇江市| 绵阳市|