缓存 使用注意事项 淘汰策略
2016-10-19 11:19
344 查看
Could not get a resource from the pool 3 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 解决办法: 可能是连接数不够用了,在高并发的情况下,测试会不会出现这个问题。 如果会出现,那就只能 增加连接数了。 缓存使用的注意点: 错误场景: 获取订单信息的时候:set 一个缓存。 取消订单的 时候, 服务是一个事务(在内部 我先 更新的订单的状态,然后删除了订单的缓存) 问题 出现的点: 在调用 取消订单的时候,他是一个事务,事务还没完成,但是缓存已经删除的时候,另外一个线程调用获取订单信息, 获取到的是 一个锁定状态的订单,因为刚才的线程事务没结束,所以 取消状态没有入库。 这样问题 就出现了,缓存里是一个 锁定 状态,库里 却是 取消状态,而且,因为 这个订单不会再有其他操作,所以一直会是错的。 如何 解决问题? 1 在最后取消订单的时候,不去删除缓存,而是 更新缓存为 取消状态,这样应该就可以解决问题。 2 在最开始的时候,用add 方法添加缓存,其他改变订单状态的地方都用 set ,这样就不会有问题了。 另外一个问题? 缓存不做删除,而是做更新,如果事务失败了,怎么办? 那缓存的数据和 库里的数据 也是不一致。 思路错误: 更新缓存的操作放在最后一句,如果事务失败,就不会 操作缓存。所以不会出现缓存数据和库里数据不一直现象。 关于redis内关于redis内存淘汰策略 存淘汰策略 当redis使用的内存数大于可使用的内存数时,进行内存淘汰。 相对于Memcached来说(只有LRU淘汰算法),redis的淘汰算法比较丰富,主要有3种: 1.随机淘汰算法:从数据库中随机删除一个key 2.LRU淘汰算法:从数据库中删除一个最近最少访问的key 3.TTL淘汰算法:从数据库中删除一个最快过期的key 通过maxmemory-policy配置项指定使用的淘汰算法,至于使用哪种淘汰算法,应根据自己的需求设定。 redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
相关文章推荐
- SuperMap IS.NET是否使用SuperMap Deskpro出的地图预缓存及使用了预缓存后速度没有明显提高问题注意事项
- mybatis select语句缓存使用注意事项
- 缓存使用的一些注意事项
- 缓存使用中的注意事项
- 缓存使用中的注意事项
- 缓存使用的一些注意事项
- Phalcon ORM查询结果集强制使用缓存的方法及注意事项
- 决策树、逻辑回归、线性回归使用时注意事项以及模型过拟合策略
- hibernate缓存使用注意事项
- mybatis select语句缓存使用注意事项
- ASP.net里不让浏览器缓存代码和Session使用注意事项
- 缓存淘汰算法--LRU算法【最近最少使用算法LRU置换策略适用于热点数据比较多的场景】
- Azure Redis 缓存使用注意事项与排查问题文档整理
- 缓存使用中的注意事项
- 使用SQLServer2008R2进行缓存依赖通知需要注意事项
- 缓存使用的一些注意事项
- 缓存使用的一些注意事项
- MySQL缓存使用注意事项
- 关于MySQL密码生成策略使用的注意事项(定期更新)
- hibernate缓存使用注意事项