springboot中redis用法

springboot:学习redis

1.基本配置

此处是springboot 2.1.3.RELEASE版本,mysql数据库,redis内存数据库,xml方式的mybatis,cache方式。

2.学习心得

1.首先要保证在没有用redis的情况下能够正常使用。
2.其次选择好是用jedis方式还是redis template方式,在这个过程中我选择了好几个案例但是方式都不太相同,导致我学习一直没什么进展,最后我看到jedis是redis官方的推荐方式,也同时根据丁雪丰老师也用的此种方式,就开始了这个的研究。在开始之前,了解好框架,完成方式,选择一个好的案例或者教程很重要,再沿着前人的路走下去。
3.对于jedis,大致思路,先在配置文件中配置好相关参数,再把这些参数移植到JedisPoolConfig,此处这个config可以自己新建一个类,也可以用redis.clients.jedis下面的,这就涉及到方式的不同。
4.接下来是JedisPool,用刚才的config的参数,构造JedisPool。
5.最后Jedis就是JedisPool的getResource方式。
我是分别写了config和pool的两个类,最后在controller中调用pool。
6.利用cache来尝试缓存,感谢这位大神[cache教程](https://blog.csdn.net/wangb_java/article/details/80212594)
但是其中Cacheable和CachePut有些说可以一起用,这个点以后再进行尝试。
大神就是直接,部分代码如下,就完成了。

   @Autowired
    private JedisPool jedisPool;
    @Autowired
    private JedisPoolConfig jedisPoolConfig;*/
    @Bean
    @ConfigurationProperties("redis")
    public JedisPoolConfig jedisPoolConfig() {
        return new JedisPoolConfig();
    }
    @Bean(destroyMethod = "close")
    public JedisPool jedisPool(@Value("${redis.host}") String host) {
        return new JedisPool(jedisPoolConfig(), "localhost");
    }
    @Override
	public void run(ApplicationArguments args) throws Exception {
		log.info(jedisPoolConfig.toString());

		try (Jedis jedis = jedisPool.getResource()) {
			coffeeService.findAllCoffee().forEach(c -> {
				jedis.hset("springbucks-menu",
						c.getName(),
						Long.toString(c.getPrice().getAmountMinorLong()));
			});

			Map<String, String> menu = jedis.hgetAll("springbucks-menu");
			log.info("Menu: - {}", menu);

			String price = jedis.hget("springbucks-menu", "espresso");
			log.info("espresso - {}",
					Money.ofMinor(CurrencyUnit.of("CNY"), Long.parseLong(price)));
		}

最后拉上我的代码:
https://github.com/yui123456/demo

3.记录出现的问题

1.出现Unexpected end of stream报错
与jedisPoolConfig中配置有关系,我这里没有将配置文件的redis配置搬进连接池中。
2.参考的例子是application.properties,用的直接是@ConfigurationProperties(“redis”)
我这里用的是yml格式,注意value中用的是spring.redis,点号。

@Data
@Component
@PropertySource("classpath:application.yml")
public class RedisConfig extends redis.clients.jedis.JedisPoolConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;//秒
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int poolMaxTotal;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int poolMaxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int poolMinIdle;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private int poolMaxWait;//秒
}

3.ERR Client sent AUTH, but no password is set这个错误
构造函数中只能选择没有password参数的方式,但是没有password就没办法选择哪个db。还暂时不知道怎么解决。
4.利用cache方式缓存之后,数据是16进制。
无论是对象还是long数字都是显示16进制,仍未解决。

4.总结

感谢网络各种大神,算是自己尝试一下,希望日后再来完善此篇文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值