Spring畢竟是Java中的一個主流框架,如何在這個框架中使用Redis呢?
創建項目并引入相關依賴
然后進行創建。
至此就將Redis的相關依賴引入進來了。
編寫Redis配置
將application.properties修改成application.yml
然后編寫如下配置:
spring:redis:host: 127.0.0.1port: 8888
編寫代碼
與Jedis不同的是,在Spring中需要通過StringRedisTemplate這個類來進行操作。
并且在這個類中會發現,沒有與命令行對應的API。
原因如下:
為了對API進行分類,將每個類型的操作進行了封裝,分到了其他類中。
方法 | 功能 |
opsForValue | 封裝了String類型的API |
opsForHash | 封裝了Hash類型的API |
opsForList | 封裝了List類型的API |
opsForSet | 封裝了Set類型的API |
opsForZset | 封裝了Zset類型的API |
@SpringBootTest
class SpringRedisTestApplicationTests {@AutowiredStringRedisTemplate redisTemplate;@Testvoid test01(){redisTemplate.opsForValue().set("key1", "value1");String s = redisTemplate.opsForValue().get("key1");Assertions.assertEquals("value1", s);}
}
如果要想執行flushAll呢?我們會發現根本找不到這樣的API
難不成是出于安全的原因進行的考慮嗎?當然不是,因為來年ping這種命令也沒有封裝。
那該怎么操作呢?當然在設計之初也進行了保留。
通過execute方法執行回調,即可實現原生指令的操作~
在RedisConnection中會發現,這個類繼承一堆的類,這些類中就提供了基本指令的操作。
也可將每個RedisConnection簡單理解為Jedis對象,也表示的是一個連接。
通過觀察源碼,會發現,這個回調函數必須要有返回值,而這個返回值也會作為execute的返回值。
@SpringBootTest
class SpringRedisTestApplicationTests {@AutowiredStringRedisTemplate redisTemplate;@Testvoid test01(){redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForValue().set("key1", "value1");String s = redisTemplate.opsForValue().get("key1");Assertions.assertEquals("value1", s);}
}