文章目錄
- 基礎設置
- 依賴
- StringRedisTemplate
- 庫的封裝
- 運行
- String
- List
- 刪庫
- Set
- Hash
- Zset
基礎設置
依賴
- 需要選擇這個依賴
StringRedisTemplate
// 后續 redis 測試的各種方法,都通過這個 Controller 提供的 http 接口來觸發
@RestController
public class MyController { private StringRedisTemplate redisTemplate;
}
前面使用 Jedis
,是通過 Jedis
對象里的各種方法來操作 Redis
的。此處 Spring
中則是通過 StringRedisTemplate
來操作 Redis
的
- 最原始提供的類是
RedisTemplate
類,StringRedisTemplate
是其子類,專門用來處理文本數據 - 這個類提供的方法,相比與
Jedis
中的各種方法,還是存在較大差異
庫的封裝
此處 RedisTemplate
是把這些 redis
的方法,分成了幾個類別,分門別類的來組織的
- 做了進一步封裝
- 比如
opsForList
就是得到了一個專門來操作List
的對象 - 比如
opsForSet
就是得到了一個專門來操作Set
的對象
- 比如
- 后續該類型涉及到的相關操作,都是以這個對象來組織的
此處提供的一些接口風格,和原生的
Redis
命令就有一定的差異了
- 初心是希望,通過上述的重新封裝,讓接口用起來更簡單
運行
String
// 后續 redis 測試的各種方法,都通過這個 Controller 提供的 http 接口來觸發
@RestController
public class MyController { @Autowired private StringRedisTemplate redisTemplate; @GetMapping("/testString") @ResponseBody public String testString(){ redisTemplate.opsForValue().set("key1", "111"); redisTemplate.opsForValue().set("key2", "222"); redisTemplate.opsForValue().set("key3", "3"); String value = redisTemplate.opsForValue().get("key1"); System.out.println("value: " + value); return "OK"; }
}
啟動服務器之后,在瀏覽器上輸入對應的路徑
隨后觀察日志:
List
刪庫
RedisTemplate
留了一個后手,讓我們隨時能夠執行到 Redis
的原生命令—— execute
方法
- 相當于函數式接口,也就是回調函數。就在回調里,寫我們要執行的
Redis
命令,這個回調就會被RedisTemplate
執行 - 這里的
RedisConnection
就代表了Redis
連接,對標Jedis
對象
@GetMapping("/testList")
@ResponseBody
public String testList() { // 清楚之前的數據 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForList().leftPush("key1", "111"); redisTemplate.opsForList().leftPush("key2", "222"); redisTemplate.opsForList().leftPush("key3", "333"); System.out.println(redisTemplate.opsForList().leftPop("key1")); System.out.println(redisTemplate.opsForList().leftPop("key2")); System.out.println(redisTemplate.opsForList().leftPop("key3")); return "OK";
}
connection.
里面都是我們熟悉的原生命令
Set
@ResponseBody
@GetMapping("/testSet")
public String testSet() { redisTemplate.execute((RedisConnection connetion) -> { connetion.flushAll(); return null; }); redisTemplate.opsForSet().add("key", "111", "222", "333"); Set<String> result = redisTemplate.opsForSet().members("key"); System.out.println(result); Boolean exists = redisTemplate.opsForSet().isMember("key", "111"); System.out.println("exists:" + exists); Long count = redisTemplate.opsForSet().size("key"); System.out.println("count: " + count); redisTemplate.opsForSet().remove("key", "111", "222"); result = redisTemplate.opsForSet().members("key"); System.out.println("result: " + result); return "OK";
}
Hash
@ResponseBody
@GetMapping("/testHash")
public String testHash() { redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForHash().put("key1", "field1", "111"); redisTemplate.opsForHash().put("key2", "field2", "222"); redisTemplate.opsForHash().put("key3", "field3", "333"); String value = (String) redisTemplate.opsForHash().get("key1", "field1"); System.out.println("value: " + value); Boolean exists = redisTemplate.opsForHash().hasKey("key1", "field1"); System.out.println("exists:" + exists); redisTemplate.opsForHash().delete("key1", "dield1", "field2"); Long size = redisTemplate.opsForHash().size("key"); System.out.println("size: " + size); return "OK";
}
Zset
@GetMapping("/testZset")
@ResponseBody
public String testZset(){ redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForZSet().add("key1", "111", 100); redisTemplate.opsForZSet().add("key2", "222", 98); redisTemplate.opsForZSet().add("key3", "333", 95); Set<String> members = redisTemplate.opsForZSet().range("key1", 0, -1); System.out.println("members: " + members); Set<ZSetOperations.TypedTuple<String>> membersWithSocres = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1); System.out.println("membersWithScores: " + membersWithSocres); Double score = redisTemplate.opsForZSet().score("key1", "111"); System.out.println("score: " + score); Long size = redisTemplate.opsForZSet().size("key1"); System.out.println("size: " + size); Long rank = redisTemplate.opsForZSet().rank("key1", "111"); System.out.println("rank: " + rank); return "OK";
}