最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring使用redis操作key-value的示例代碼

 更新時(shí)間:2020年03月06日 10:34:09   作者:WinRT  
這篇文章主要介紹了spring使用redis操作key-value的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

連接到 Redis

Redis 連接工廠(chǎng)會(huì)生成到 Redis 數(shù)據(jù)庫(kù)服務(wù)器的連接。Spring Data Redis 為四種 Redis 客戶(hù)端實(shí)現(xiàn)提供了連接工廠(chǎng):

  • JedisConnectionFactory
  • JredisConnectionFactory
  • LettuceConnectionFactory
  • SrpConnectionFactory

具體選擇哪一個(gè)取決于你。我建議你自行測(cè)試并建立基準(zhǔn),進(jìn)而確定哪一種 Redis 客戶(hù)端和連接工廠(chǎng)最適合你的需求。從 Spring Data Redis 的角度來(lái)看,這些連接工廠(chǎng)在適用性上都是相同的。
在做出決策之后,我們就可以將連接工廠(chǎng)配置為 Spring 中的 bean。例如,如下展示了如何配置 JedisConnectionFactory bean:

package cn.com.sm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;

@Configuration
public class RedisConfig {
  //通過(guò)默認(rèn)構(gòu)造器創(chuàng)建的連接工廠(chǎng)會(huì)向 localhost 上的 6379 端口創(chuàng)建連接,并且沒(méi)有密碼。
  @Bean
  public RedisConnectionFactory redisCF() {
    return new JedisConnectionFactory();
  }

  //如果你所使用的 value 和 key 都是 String 類(lèi)型,那么可以考慮使用 StringRedisTemplate 來(lái)代替 RedisTemplate:
  @Bean
  public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) {
    return new StringRedisTemplate(cf);
  }
}

假如你配置redis服務(wù)器需要用戶(hù)認(rèn)證、運(yùn)行在其他的主機(jī)或端口上:

 @Bean
  public RedisConnectionFactory redisCF() {
    JedisConnectionFactory cf = new JedisConnectionFactory();
    cf.setHostName("redis-server");
    cf.setPort(7379);
    cf.setPassword("foobared");
    return cf;
  }

Spring Data Redis 以模板的形式提供了較高等級(jí)的數(shù)據(jù)訪(fǎng)問(wèn)方案。實(shí)際上,Spring Data Redis 提供了兩個(gè)模板:

  • RedisTemplate
  • StringRedisTemplate

RedisTemplate 可以極大地簡(jiǎn)化 Redis 數(shù)據(jù)訪(fǎng)問(wèn),能夠讓我們持久化各種類(lèi)型的 key 和 value,并不局限于字節(jié)數(shù)組。在認(rèn)識(shí)到 key 和 value 通常是 String 類(lèi)型之后,StringRedisTemplate 擴(kuò)展了 RedisTemplate,只關(guān)注 String 類(lèi)型。

可以按照如下方式來(lái)構(gòu)建StringRedisTemplate:

ApplicationContext ctx = new AnnotationConfigApplicationContext(RedisConfig.class);
RedisConnectionFactory cf = (RedisConnectionFactory) ctx.getBean("redisCF"); 
RedisTemplate redis = new StringRedisTemplate(); 
redis.setConnectionFactory(cf);       

也可以按照如下方式構(gòu)建RedisTemplate:

//我這里創(chuàng)建了一個(gè)Product的java對(duì)象
RedisTemplate<String, Product> redis = new RedisTemplate<String, Product>();
redis.setConnectionFactory(cf);

盡管這并非必須的,但是如果你經(jīng)常使用 RedisTemplate 或 StringRedisTemplate 的話(huà),你可以考慮將其配置為 bean,然后注入到需要的地方。如下就是一個(gè)聲明 RedisTemplate 的簡(jiǎn)單 @Bean 方法:

  @Bean
  public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) {
    return new StringRedisTemplate(cf);
  }

有了 RedisTemplate(或 StringRedisTemplate)之后,我們就可以開(kāi)始保存、獲取以及刪除 key-value 條目了。

使用簡(jiǎn)單的值

//設(shè)置值
redis.opsForValue().set("key1","value1");
//獲取值
redis.opsForValue().get("key1");

使用 List 類(lèi)型的值

例如,我們可以在一個(gè) List 類(lèi)型的條目尾部添加一個(gè)值:

redis.opsForList().rightPush("cart", product);

而 leftPush() 則會(huì)在列表的頭部添加一個(gè)值:

redis.opsForList().leftPush("cart", product);

可以通過(guò) leftPop() 或 rightPop() 方法從列表中彈出一個(gè)元素:

Product first = redis.opsForList().leftPop("cart");
Product last = redis.opsForList().rightPop("cart");

除了從列表中獲取值以外,這兩個(gè)方法還有一個(gè)副作用就是從列表中移除所彈出的元素。如果你只是想獲取值的話(huà)(甚至可能要在列表的中間獲取),那么可以使用 range() 方法:

range() 方法不會(huì)從列表中移除任何元素,但是它會(huì)根據(jù)指定的 key 和索引范圍,獲取范圍內(nèi)的一個(gè)或多個(gè)值。前面的樣例中,會(huì)獲取 11 個(gè)元素,從索引為 2 的元素到索引為 12 的元素(不包含)。如果范圍超出了列表的邊界,那么只會(huì)返回索引在范圍內(nèi)的元素。如果該索引范圍內(nèi)沒(méi)有元素的話(huà),將會(huì)返回一個(gè)空的列表。

List<Product> products = redis.opsForList().range("cart", 2, 12);

在 Set 上執(zhí)行操作

添加一個(gè)元素:

redis.opsForSet().add("cart", product);

綁定到某個(gè) key 上

BoundListOperations<String, Product> cart = redis.boundListOps("cart"); 
Product popped = cart.rightPop(); 
Product product1 = null; 
cart.rightPush(product1); 
Product product2 = null; 
cart.rightPush(product2); 
Product product3 = null; 
cart.rightPush(product3);

我們只在一個(gè)地方使用了條目的 key,也就是調(diào)用 boundListOps() 的時(shí)候。對(duì)返回的 BoundListOperations 執(zhí)行的所有操作都會(huì)應(yīng)用到這個(gè) key 上。

使用 key 和 value 的序列化器

當(dāng)某個(gè)條目保存到 Redis key-value 存儲(chǔ)的時(shí)候,key 和 value 都會(huì)使用 Redis 的序列化器(serializer)進(jìn)行序列化。Spring Data Redis 提供了多個(gè)這樣的序列化器,包括:

  • GenericToStringSerializer:使用 Spring 轉(zhuǎn)換服務(wù)進(jìn)行序列化;
  • JacksonJsonRedisSerializer:使用 Jackson 1,將對(duì)象序列化為 JSON;
  • Jackson2JsonRedisSerializer:使用 Jackson 2,將對(duì)象序列化為JSON;
  • JdkSerializationRedisSerializer:使用 Java 序列化;
  • OxmSerializer:使用 Spring O/X 映射的編排器和解排器 (marshaler 和 unmarshaler)實(shí)現(xiàn)序列化,用于 XML 序列化;
  • StringRedisSerializer:序列化 String 類(lèi)型的 key 和 value。

這些序列化器都實(shí)現(xiàn)了 RedisSerializer 接口,如果其中沒(méi)有符合需求的序列化器,那么你還可以自行創(chuàng)建。

例如,假設(shè)當(dāng)使用 RedisTemplate 的時(shí)候,我們希望將 Product 類(lèi)型的 value 序列化為 JSON,而 key 是 String 類(lèi)型。RedisTemplate 的 setKeySerializer() 和 setValueSerializer() 方法就需要如下所示:

@Bean
public RedisTemplate<String, Product> redisTemplate(RedisConnectionFactory cf) {
 RedisTemplate<String, Product> redis = new RedisTemplate<String, Product>();
 redis.setConnectionFactory(cf);
 redis.setKeySerializer(new StringRedisSerializer());
 redis.setValueSerializer(new Jackson2JsonRedisSerializer<Product>(Product.class));
 return redis;
}

到此這篇關(guān)于spring使用redis操作key-value的示例代碼的文章就介紹到這了,更多相關(guān)spring redis操作key-value 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用maven war包打包去除jar包瘦身

    使用maven war包打包去除jar包瘦身

    這篇文章主要介紹了使用maven war包打包去除jar包瘦身操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用jackson實(shí)現(xiàn)對(duì)象json之間的相互轉(zhuǎn)換(spring boot)

    使用jackson實(shí)現(xiàn)對(duì)象json之間的相互轉(zhuǎn)換(spring boot)

    這篇文章主要介紹了使用jackson實(shí)現(xiàn)對(duì)象json之間的相互轉(zhuǎn)換(spring boot),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實(shí)體類(lèi)之間的相互轉(zhuǎn)換方式

    Java實(shí)體類(lèi)之間的相互轉(zhuǎn)換方式

    這篇文章主要介紹了Java實(shí)體類(lèi)之間的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • springboot利用aspose預(yù)覽office文件的實(shí)現(xiàn)過(guò)程

    springboot利用aspose預(yù)覽office文件的實(shí)現(xiàn)過(guò)程

    這篇文章主要給大家介紹了關(guān)于springboot利用aspose預(yù)覽office文件的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友可以參考下
    2021-06-06
  • SpringBoot如何訪(fǎng)問(wèn)jsp頁(yè)面

    SpringBoot如何訪(fǎng)問(wèn)jsp頁(yè)面

    本文介紹了如何在Spring Boot項(xiàng)目中進(jìn)行Web開(kāi)發(fā),包括創(chuàng)建項(xiàng)目、配置文件、添加依賴(lài)、控制層修改、測(cè)試效果以及在IDEA中進(jìn)行配置的詳細(xì)步驟
    2025-01-01
  • Spring Data JPA踩坑記錄(@id @GeneratedValue)

    Spring Data JPA踩坑記錄(@id @GeneratedValue)

    這篇文章主要介紹了Spring Data JPA踩坑記錄(@id @GeneratedValue),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • lombok注解介紹小結(jié)

    lombok注解介紹小結(jié)

    lombok是一個(gè)可以幫助我們簡(jiǎn)化java代碼編寫(xiě)的工具類(lèi),這篇文章主要介紹了lombok注解介紹小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的方法

    Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的方法

    這篇文章主要給大家介紹了關(guān)于Java網(wǎng)絡(luò)編程教程之設(shè)置請(qǐng)求超時(shí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Java編寫(xiě)時(shí)間工具類(lèi)ZTDateTimeUtil的示例代碼

    Java編寫(xiě)時(shí)間工具類(lèi)ZTDateTimeUtil的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java編寫(xiě)時(shí)間工具類(lèi)ZTDateTimeUtil,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評(píng)論

南丹县| 德惠市| 冀州市| 堆龙德庆县| 金乡县| 乐山市| 碌曲县| 绿春县| 德阳市| 尖扎县| 黑水县| 师宗县| 大名县| 襄垣县| 河津市| 宁海县| 化州市| 长治县| 广宗县| 新巴尔虎右旗| 怀柔区| 阳城县| 清河县| 武威市| 宁晋县| 朔州市| 淳化县| 株洲县| 建宁县| 白河县| 滦南县| 大姚县| 上林县| 安化县| 莆田市| 西宁市| 红原县| 灵武市| 鄄城县| 宜章县| 和顺县|