redis分布式缓存(六)一一 文章的阅读量PV解决方案(String)
文章的阅读量实现原理
对一并发量不大的网站,我们可能把点赞数据持久化到数据库,但是并发量上来了,我们不可能采用数据库来做计数器.
对于一线互联网公司,如此大的并发量,通常都是用redis中间件实现的。
redis中使用
incr
命令来实现。incr命令,它的全称是increment,用途就是计数器。每执行一次incr命令,都将key的value自动加1。如果key不存在,那么key的值初始化为0,然后再执行INCR操作。
例如:微信文章id=100,做阅读计算如:
127.0.0.1:6379> incr article:100 (integer) 1 127.0.0.1:6379> incr article:100 (integer) 2 127.0.0.1:6379> incr article:100 (integer) 3 127.0.0.1:6379> incr article:100 (integer) 4 127.0.0.1:6379> get article:100 "4" 复制代码
编码实现文章的阅读量
@RestController @Slf4j public class ViewController { @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping(value = "/isView") public void isView(Integer id) { //redis key String key="article:"+id; //调用redis的increment计数器命令 long n=this.stringRedisTemplate.opsForValue().increment(key); log.info("key={},阅读量为{}",key, n); } } 复制代码
思考
需要
频繁
的修改redis,耗费CPU,高并发修改redis会导致 redis 的CPU和网络资源耗尽,如何优化
例如一篇文章500阅读量,有1000篇文章,那么需要请求redis服务500*1000=500000次,如果是高并发的商品等页面请求,需要网络连接redis次数会更加多。
采用
双缓存模式
减少redis请求。
redis数据如何同步到数据库
采用
定时任务
读取redis数据持久化到数据库
作者:小伙子vae
链接:https://juejin.cn/post/7025861865678831647