在以前的文章中,講解了使用redis解決集羣環境session共享的問題【快學springboot】11.整合redis實現session共享,這裏已經引入了redis相關的依賴,而且經過springboot的配置,實現了session共享。下面,咱們就經過springboot提供的RedisTemplate來操做redis。java
@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數據庫上的值,以下:bash
opsForValue().set方法還支持同時設置鍵對應的過時時間session
@Test
public void testSetWithExpireTime() {
redisTemplate.opsForValue().set("name2", "happyjava2", 10, TimeUnit.SECONDS);
String name2 = redisTemplate.opsForValue().get("name2");
System.out.println(name2);
}
複製代碼
執行結果:數據結構
happyjava2
複製代碼
咱們能夠經過redisTemplate.getExpire方法得到鍵的過時時間app
@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);
}
複製代碼
執行結果以下:分佈式
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
複製代碼
咱們能夠經過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
複製代碼
經過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數據結構的經常使用操做。接下來的會對其它的數據結構作進一步講解。