gpt4 book ai didi

java - 如何使用Redisson Client获取缓存的值

转载 作者:行者123 更新时间:2023-12-03 06:42:35 27 4
gpt4 key购买 nike

我想使用Redisson客户端获取缓存的(@Cachable)值,但是如果我在Redisson客户端中使用任何编解码器(getBucket(“fruit::1”,StringCodec.INSTANCE)),它将返回奇怪的数据,除非我使用编解码器,否则它将引发错误。

我已经使用下面的代码进行缓存

    @Cacheable(value = "fruits", key = "#id")
public Fruit getFruitById(int id) {
// get fruit by id
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Fruit> query = builder.createQuery(Fruit.class);
Root<Fruit> root = query.from(Fruit.class);
query.select(root);
query.where(builder.equal(root.get("id"), id));
TypedQuery<Fruit> fruitQuery = em.createQuery(query);
return fruitQuery.getSingleResult();
}

当我使用编解码器获取缓存的数据时
    RBucket<String> bucket = client.getBucket("fruits::1",
StringCodec.INSTANCE);
String fruit = bucket.get();

它返回以下奇怪的数据

��srcom.home.redis.Fruit��.ܵo*rIidIpriceLnametLjava/lang/String;xp,tpomegrantite



Redis配置
@Bean
public RedisCacheConfiguration cacheConfiguration() {
RedisCacheConfiguration cacheConfig = RedisCacheConfiguration
.defaultCacheConfig().entryTtl(Duration.ofSeconds(600))
.disableCachingNullValues();
return cacheConfig;
}

@Bean
public RedisCacheManager cacheManager() {
RedisCacheManager rcm = RedisCacheManager
.builder(this.getRedissonStoreFactory())
.cacheDefaults(cacheConfiguration()).transactionAware().build();
return rcm;
}

@Bean
@Primary
public RedisProperties redisProperties() {
return new RedisProperties();
}

@Bean
public RedissonConnectionFactory getRedissonStoreFactory() {
return new RedissonConnectionFactory(getConfig());
}

@Bean
public RedissonNode getNode() {
RedissonNodeConfig nodeConfig = new RedissonNodeConfig(getConfig());
nodeConfig.setExecutorServiceWorkers(
Collections.singletonMap("ensimp", 1));
RedissonNode node = RedissonNode.create(nodeConfig);
node.start();
return node;
}

@Bean
public Config getConfig()
{
Config config = new Config();
RedisProperties properties = redisProperties();
config.useSingleServer().setAddress(
"redis://" + properties.getHost() + ":" + properties.getPort());
return config;
}

redisson.json

{
"singleServerConfig":{
"idleConnectionTimeout":500,
"connectTimeout":1000,
"timeout":3000,
"retryAttempts":3,
"retryInterval":1500,
"password":null,
"subscriptionsPerConnection":5,
"clientName":null,
"address": "redis://127.0.0.1:6379",
"subscriptionConnectionMinimumIdleSize":0,
"subscriptionConnectionPoolSize":1,
"connectionMinimumIdleSize":0,
"connectionPoolSize":20,
"database":0,
"dnsMonitoringInterval":5000
},
"threads":16,
"nettyThreads":32,
"codec":{
"class":"org.redisson.codec.FstCodec"
},
"transportMode":"NIO"
}


我也用过fst编解码器,但是得到了相同的奇怪数据。我想要正确解码的数据,如果有人用正确的代码帮助我,那将是很好的。

最佳答案

您需要使用RMapCache数据来获取数据,而不是RBucket。

client.getMapCache("fruits::1", StringCodec.INSTANCE);

关于java - 如何使用Redisson Client获取缓存的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61350470/

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