二者的關係是StringRedisTemplate繼承RedisTemplate。java
二者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate裏面的數據,RedisTemplate只能管理RedisTemplate中的數據。redis
RedisTemplate使用的是JdkSerializationRedisSerializer 存入數據會將數據先序列化成字節數組而後在存入Redis數據庫。 spring
StringRedisTemplate使用的是StringRedisSerializer數據庫
redisTemplate 中存取數據都是字節數組。當redis中存入的數據是可讀形式而非字節數組時,使用redisTemplate取值的時候會沒法獲取導出數據,得到的值爲null。能夠使用 StringRedisTemplate 試試。數組
|
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis裏存入數據和設置緩存時間 stringRedisTemplate.boundValueOps("test").increment(-1);//val作-1操做 stringRedisTemplate.opsForValue().get("test")//根據key獲取緩存中的val stringRedisTemplate.boundValueOps("test").increment(1);//val +1 stringRedisTemplate.getExpire("test")//根據key獲取過時時間 stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根據key獲取過時時間並換算成指定單位 stringRedisTemplate.delete("test");//根據key刪除緩存 stringRedisTemplate.hasKey("546545");//檢查key是否存在,返回boolean值 stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合 stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//設置過時時間 stringRedisTemplate.opsForSet().isMember("red_123", "1")//根據key查看集合中是否存在指定數據 stringRedisTemplate.opsForSet().members("red_123");//根據key獲取set集合
springboot中使用註解@Autowired 便可緩存
1
2
|
@Autowired
public
StringRedisTemplate stringRedisTemplate;
|
1
|
<span style=
"font-size: 16px;"
><strong>使用樣例:</strong></span>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@RestController
@RequestMapping
(
"/user"
)
public
class
UserResource {
private
static
final
Logger log = LoggerFactory.getLogger(UserResource.
class
);
@Autowired
private
UserService userService;
@Autowired
public
StringRedisTemplate stringRedisTemplate;
@RequestMapping
(
"/num"
)
public
String countNum() {
String userNum = stringRedisTemplate.opsForValue().get(
"userNum"
);
if
(StringUtils.isNull(userNum)){
stringRedisTemplate.opsForValue().set(
"userNum"
, userService.countNum().toString());
}
return
userNum;
}
}
|