前言
在以前的文章中,講解了使用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
查看redis數據庫上的值,以下:session
設置值而且同時設置過時時間
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:若是不存在,則設置。
而且能夠經過重載的方法設置過時時間,這個方法是很重要的,能夠基於該方法實現一個分佈式鎖。
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。
總結
這裏介紹了redis string數據結構的經常使用操做。接下來的會對其它的數據結構作進一步講解。