加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Redis 多方式实现计数器功能

发布时间:2019-10-17 07:31:47 所属栏目:编程 来源:yanglbme
导读:计数器在很多网站中都进行了广泛的应用,比如文章的点赞数、页面的浏览数、网站的访客数、视频的播放数等等。在这篇文章里,我会使用 Redis 的三种数据类型,来分别实现计数器的功能。 请跟随我一起来看看吧。 使用字符串键 下面代码演示了如何利用 Redis

在上面两个例子中,当动作被执行时,程序可以调用一次 incr() 累加计数的方法。某些场景下,我们可能需要对特定的动作,仅仅计数一次。什么叫“仅仅计数一次”?就是说,同一个用户/IP,多次访问某个页面,计数器只会将计数值增加 1。来看看以下代码:

  1. from redis import Redis 
  2.  
  3. class Counter: 
  4.     def __init__(self, client: Redis, key: str): 
  5.         self.client = client 
  6.         self.key = key 
  7.  
  8.     def add(self, item: str) -> bool: 
  9.         """计数累加,若计数之前item已存在,放回False;否则返回True""" 
  10.         return self.client.sadd(self.key, item) == 1 
  11.  
  12.     def get_cnt(self): 
  13.         """获取当前计数的值""" 
  14.         return self.client.scard(self.key) 
  15.  
  16.  
  17. if __name__ == '__main__': 
  18.     client = Redis(decode_responses=True) 
  19.     counter = Counter(client, 'uv') 
  20.     counter.add('user1') 
  21.     counter.add('user2') 
  22.     counter.add('user1')  # 重复放入 
  23.     print(counter.get_cnt())  # 2 

在实际应用中,以上代码需要稍作改动,但基本的思路不变。怎么样,你学会了吗?

【编辑推荐】

  1. 什么?Redis的QPS是MySQL的100倍?
  2. 记一次找因Redis使用不当导致应用卡死Bug的过程
  3. Redis内存满了怎么办……
  4. Redis缓存击穿、缓存穿透、缓存雪崩
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读