【快學springboot】13.操做redis之String數據結構

前言

在以前的文章中,講解了使用redis解決集羣環境session共享的問題【快學springboot】11.整合redis實現session共享,這裏已經引入了redis相關的依賴,而且經過springboot的配置,實現了session共享。下面,咱們就經過springboot提供的RedisTemplate來操做redis。java

注入RedisTemplate

@Autowired
private StringRedisTemplate redisTemplate;

這裏我注入了一個StringRedisTemplate,其等價於RedisTemplate<String,String>,咱們也能夠自定義一個RedisTemplate,以下:redis

@Configuration
public class RedisTemplateConfig {
​
 @Bean
 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
 RedisTemplate<String, Object> template = new RedisTemplate<>();
 // 配置鏈接工廠
 template.setConnectionFactory(factory);
 return template;
 }
​
}

本人以爲,徹底沒有必要自定義一個RedisTemplate,除非說有一些序列化上的需求。本文的講解都是基於默認的StringRedisTemplate的。spring

設置/獲取值

咱們能夠經過opsForValue().set(k,v)方法設置一個值opsForValue().get(k)方法獲取值數據庫

@Test
public void testsetAndGetString() {
 redisTemplate.opsForValue().set("name", "happyjava");
 String name = redisTemplate.opsForValue().get("name");
 System.out.println(name);
}

執行結果:springboot

【快學springboot】13.操做redis之String數據結構

查看redis數據庫上的值,以下:session

【快學springboot】13.操做redis之String數據結構

設置值而且同時設置過時時間

opsForValue().set方法還支持同時設置鍵對應的過時時間數據結構

@Test
public void testSetWithExpireTime() {
 redisTemplate.opsForValue().set("name2", "happyjava2", 10, TimeUnit.SECONDS);
 String name2 = redisTemplate.opsForValue().get("name2");
 System.out.println(name2);
}

執行結果:app

happyjava2

獲取鍵的過時時間

咱們能夠經過redisTemplate.getExpire方法得到鍵的過時時間分佈式

@Test
public void testSetWithExpireTime() {
 redisTemplate.opsForValue().set("name2", "happyjava2", 10, TimeUnit.SECONDS);
 String name2 = redisTemplate.opsForValue().get("name2");
 System.out.println(name2);
 Long expire = redisTemplate.getExpire("name2", TimeUnit.SECONDS);
 System.out.println(expire);
}

執行結果以下:spa

happyjava2
9

設置鍵的過時時間

咱們能夠經過redisTemplate.expire方法設置鍵的過時時間

@Test
public void testSetExpire() {
 redisTemplate.expire("name",120,TimeUnit.SECONDS);
 Long expire = redisTemplate.getExpire("name", TimeUnit.SECONDS);
 System.out.println(expire);
}

以前設置了name是非過時的,這裏給它設置個過時時間。執行結果以下:

119

getAndSet

咱們能夠經過opsForValue().getAndSet方法獲取此時的值,而後設置一個新的值。

@Test
public void test() {
 redisTemplate.opsForValue().set("name", "123456");
 String name = redisTemplate.opsForValue().getAndSet("name", "happyjava3");
 System.out.println(name);
 name = redisTemplate.opsForValue().get("name");
 System.out.println(name);
}

輸出結果以下:

123456
happyjava3

append追加

經過redisTemplate.opsForValue().append方法能夠追加內容。

@Test
 public void test() {
 redisTemplate.opsForValue().append("name","append");
 String name = redisTemplate.opsForValue().get("name");
 System.out.println(name);
 }

這裏向以前的name鍵追加了一個字符串「append」,輸出結果以下:

happyjava3append

自增

自增是redis裏很是經常使用的方法,經常用該方法來實現計數器。咱們能夠經過redisTemplate.opsForValue().increment方法實現自增

@Test
 public void test() {
 Long count = redisTemplate.opsForValue().increment("count");
 System.out.println(count);
 Long count1 = redisTemplate.opsForValue().increment("count", 11);
 System.out.println(count1);
 }

若是鍵不存在,則會默認從0開始自增,咱們也能夠設置自增的值的大小。

自減

咱們能夠經過redisTemplate.opsForValue().decrement方法來實現自減

@Test
 public void test() {
 Long count = redisTemplate.opsForValue().decrement("count");
 System.out.println(count);
 Long count1 = redisTemplate.opsForValue().decrement("count", 10);
 System.out.println(count1);
 }

若是存在則設置/若是不存在則設置

setIfAbsent:若是不存在,則設置。

【快學springboot】13.操做redis之String數據結構

而且能夠經過重載的方法設置過時時間,這個方法是很重要的,能夠基於該方法實現一個分佈式鎖。

setIfPresent:若是存在,則設置。

@Test
 public void test() {
 Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("name", "happy");
 System.out.println(aBoolean);
 Boolean aBoolean1 = redisTemplate.opsForValue().setIfPresent("name", "happy2");
 System.out.println(aBoolean1);
 }
​

由於以前已經存在name的值,該代碼的預期輸出結果是false true。

【快學springboot】13.操做redis之String數據結構

總結

這裏介紹了redis string數據結構的經常使用操做。接下來的會對其它的數據結構作進一步講解。

相關文章
相關標籤/搜索