Как получить кэшированное значение с помощью клиента redisson - PullRequest
1 голос
/ 21 апреля 2020

Я хотел получить кэшированное (@Cachable) значение, используя клиент redisson, но он возвращает странные данные, если я использую любой код c в клиенте redisson (getBucket ("fruit :: 1", StringCode c .INSTANCE)) и он выдает ошибку, если я не использую код c.

, я использовал приведенный ниже код для кэширования

    @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();
}

Когда я использую код c для получения этих кэшированных данных

    RBucket<String> bucket = client.getBucket("fruits::1",
            StringCodec.INSTANCE);
    String fruit = bucket.get();

Возвращает следующие странные данные

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

RedisConfiguration

@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 код c, но получил те же странные данные. я хочу правильно декодированные данные, было бы здорово, если бы кто-нибудь помог мне с правильным кодом.

...