gpt4 book ai didi

redis - 带有缓存管理器的 spring-data-redis

转载 作者:可可西里 更新时间:2023-11-01 11:32:10 24 4
gpt4 key购买 nike

我在使用spring-data-redis的时候,遇到了两个问题。

第一个问题是当我使用缓存annation将数据加载到redis时,但是我无法通过redisTemplate获取值,代码如下:

@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}

@Bean
public RedisConnectionFactory jedisConnectionFactory() {

JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName("localhost");
factory.setPort(6379);
factory.setUsePool(true);

return factory;
}

@Bean
CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate());
cacheManager.setDefaultExpiration(86400);
return cacheManager;
}

作为流的用户服务:

@Cacheable("allUsers")
public List<UserModel> getAllUsers() {
logger.info("execute getAllUsers!");
return Arrays.asList(new UserModel("jason"), new UserModel("david"));
}

我的测试代码是:

@Test
public void testCache() {
redisTemplate.delete("allUsers");

userService.getAllUsers(); // load user data
List<Object> users = redisTemplate.opsForList().range("allUsers", 0, -1); // get allUsers from redis

logger.info("get from template");
for(Object user : users) {
logger.info(((UserModel)user).getUsername());
}

logger.info("get from service");
for(UserModel user : userService.getAllUsers()) {
logger.info(user.getUsername());
}

而且,我发现redis中的缓存“allUsers”是allUsers~keys,但是我也无法通过这个key获取值,我如何通过redisTemplate获取值以及为什么redis中的key是allUsers~keys。

第二个问题是我通过commond设置了一个键调用“mykey”,并设置了值“mykey”,我也无法通过java代码获取空值,我可以通过commond获取值。那个怎么样?如果这两个问题是同一个问题呢?有人知道这些吗?谢谢你提前 ^.^ .

更新我的代码版本是: Spring 4.1.6,
spring-data-redis 1.7.0,
绝地武士 2.8.1
redis 3.2.3

最佳答案

在没有 RedisSerializer 的情况下初始化 RedisTemplate 会默认模板使用 JdkSerializationRedisSerializer。因此生成的 key 将不是普通的 String 值,而是类似 \xac\xed\x00\x05t\x00\x0bcache-key-1 的值。

您可以将 StringRedisSerializer 用作 keySerializer 以获得纯 String 键。

RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setKeySerializer(new StringRedisSerializer());

关于redis - 带有缓存管理器的 spring-data-redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com