java - 使用spring boot从redis读取字符串

标签 java spring redis jedis

我已经使用 redis-as below 在 redis 中设置了一个键

redis 127.0.0.1:6379> set 100.vo.t1 '{"foo": "bar", "ans": 42}'
OK

redis 127.0.0.1:6379> get 100.vo.t1
"{\"foo\": \"bar\", \"ans\": 42}"

但现在我正在尝试读取相同的 usin Spring boot 和 Jedis,但值是 null

存储库

@Repository
public class TemplateRepositoryImpl implements TemplateRepository {

    private ValueOperations<String, Object> valueOperations;
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    public TemplateRepositoryImpl(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @PostConstruct
    private void init() {
        valueOperations = redisTemplate.opsForValue();
    }

    @Override
    public String getTemplateSequenceinString(String key) {
        System.out.println("the key recieved is " + key);
        return (String) valueOperations.get(key);
    }

}

Controller

@Controller
@RequestMapping("/ts")
public class MainController {

    @Autowired
    private TemplateRepository tmpl;

    @GetMapping("/initiate/{templateName}")
    public String getTemplate(Model model, @PathVariable("templateName") String templateName) throws IOException {
        String key = "100.vo.t1" ; 

        System.out.println("The answer is "+tmpl.getTemplateSequenceinString(key));

        return templateName;
    }
}

Redis配置

@Configuration
@ComponentScan("com.ts.templateService")
public class RedisConfig_1 {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConFactory
            = new JedisConnectionFactory();
        jedisConFactory.setHostName("localhost");
        jedisConFactory.setPort(6379);
        return jedisConFactory;
    }

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

最佳答案

这里的关键是SerializerRedisTemplate默认的序列化器是JdkSerializationRedisSerializer,你应该使用StringRedisSerializer .

@Bean
public RedisTemplate<String, Object> redisTemplate() {

    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setDefaultSerializer(new StringRedisSerializer()); // set here
    template.setConnectionFactory(jedisConnectionFactory());
    return template;
}

关于java - 使用spring boot从redis读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017497/

相关文章:

java.lang.NoSuchMethodError : com. mongodb.MongoClient.<init>(Ljava/util/List;Lcom/mongodb/MongoCredential;Lcom/mongodb/MongoClientOptions;)V]

java - Jackson JSON - 反序列化时从日历对象中剥离时区

Java实体java.sql.SQLException : Field 'id' doesn't have a default value

不支持 Spring/Postman 内容类型 'application/octet-stream'

redis - Redis失败了。 Ubuntu 18.04

java - 在哪里启用断言

java - 通过 Java 中的反射访问私有(private)继承字段

node.js - 在 node.js 中监听 channel redis

c++ - 无法设置 key ,因为 'redisClusterCommand()' 正在返回空指针

java - 神经网络: Backpropagation not working (Java)