亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:69日期:2023-09-18 13:59:09

連接到 Redis

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

JedisConnectionFactory JredisConnectionFactory LettuceConnectionFactory SrpConnectionFactory

具體選擇哪一個取決于你。我建議你自行測試并建立基準(zhǔn),進(jìn)而確定哪一種 Redis 客戶端和連接工廠最適合你的需求。從 Spring Data Redis 的角度來看,這些連接工廠在適用性上都是相同的。在做出決策之后,我們就可以將連接工廠配置為 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;@Configurationpublic class RedisConfig { //通過默認(rèn)構(gòu)造器創(chuàng)建的連接工廠會向 localhost 上的 6379 端口創(chuàng)建連接,并且沒有密碼。 @Bean public RedisConnectionFactory redisCF() { return new JedisConnectionFactory(); } //如果你所使用的 value 和 key 都是 String 類型,那么可以考慮使用 StringRedisTemplate 來代替 RedisTemplate: @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) { return new StringRedisTemplate(cf); }}

假如你配置redis服務(wù)器需要用戶認(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 以模板的形式提供了較高等級的數(shù)據(jù)訪問方案。實(shí)際上,Spring Data Redis 提供了兩個模板:

RedisTemplate StringRedisTemplate

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

可以按照如下方式來構(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)建了一個Product的java對象RedisTemplate<String, Product> redis = new RedisTemplate<String, Product>();redis.setConnectionFactory(cf);

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

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

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

使用簡單的值

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

使用 List 類型的值

例如,我們可以在一個 List 類型的條目尾部添加一個值:

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

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

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

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

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

除了從列表中獲取值以外,這兩個方法還有一個副作用就是從列表中移除所彈出的元素。如果你只是想獲取值的話(甚至可能要在列表的中間獲?。敲纯梢允褂?range() 方法:

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

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

在 Set 上執(zhí)行操作

添加一個元素:

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

綁定到某個 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);

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

使用 key 和 value 的序列化器

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

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

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

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

@Beanpublic 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)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 午夜激情婷婷 | 黄色网页在线免费观看 | 国产在线精品成人一区二区三区 | 人与动物xxxxx| 国产一区二区三区不卡观 | 国产成人精选免费视频 | 国产精品久久久久久福利漫画 | 国内外精品免费视频 | 一级特黄高清完整大片 | 一级特级片 | 精品国产品香蕉在线观看75 | 亚洲欧美手机在线观看 | 在线免费一区 | 亚洲国产精品久久精品成人 | 国产一区视频在线免费观看 | 日韩视频网 | 97视频在线免费播放 | 特黄特色大片免费视频大全 | 欧美日韩综合网在线观看 | 一级毛片a| 欧美片免费观看网址 | 妞干网免费观看视频 | 久久成人18免费 | 亚洲欧美日韩国产一区二区精品 | 国产高清在线精品一区免费97 | 国产乱偷国产偷高清 | 91欧美一区二区三区综合在线 | 亚洲美女在线播放 | 一区二区国产在线观看 | 亚洲成熟中国女人毛茸茸 | 黄色高清在线观看 | 337q日本大胆欧美人术艺术 | 欧美日韩精品一区二区三区不卡 | 女人被狂躁视频免费网站 | 亚洲欧美日韩中文综合在线不卡 | 欧美aaaaaaaaaa | 美女二区 | 国产精品乱码一区二区三区 | 久久香蕉精品成人 | www视频在线免费观看 | 91福利免费体验区观看区 |