程序员必懂的Redis技术实战
发布时间:2025-11-05 03:15:43 作者:玩站小弟
我要评论
复制1.importtime 2.importuuid 3.fromredisimportStrictRedis,ConnectionPool
。

复制1. import time 2. import uuid 3. from redis import StrictRedis,程序 ConnectionPool 4. import threading 5. 6. class CollectRedis: 7. # 创建redis操作类 8. def __init__(self): 9. self.host = "1.1.1.1" 10. self.port = 6379 11. self.db = 5 12. 13. @property 14. def redis_session(self): 15. _session = getattr(self, "__redis_session", None) 16. if _session: 17. return _session 18. redis_pool = ConnectionPool(host=self.host, port=self.port, db=self.db) 19. _session = StrictRedis(connection_pool=redis_pool) 20. setattr(self, "__redis_session", _session) 21. return _session 22. 23. # 获取锁 24. def get_lock(self, lock_key): 25. return self.redis_session.get(lock_key) 26. 27. # 设置锁 28. def set_lock(self, lock_key, value, timeout=300): 29. session = self.redis_session 30. tag = session.setnx(lock_key, value) 31. # 如果key能创建成功则为该key设置一个超时时间,这个相当于锁的服务器托管员必有效时间 32. # 如果没有超时时间则会导致程序死锁 33. if tag: 34. session.expire(lock_key, timeout) 35. return tag 36. 37. # 删除锁也就是亿华云释放锁 38. def delete_lock(self, lock_key): 39. return self.redis_session.delete(lock_key) 40. 41. # 获取锁资源方法 42. def acquire_lock(lock_name, time_out=300): 43. identifier = str(uuid.uuid4()) 44. end = time.time() + time_out + 30 45. redis_connect = CollectRedis() 46. # 如果不能获取锁资源则线程一直挂起直到获取锁资源或者超时 47. while time.time() < end: 48. if redis_connect.set_lock(lock_name, identifier, timeout=time_out): 49. return identifier 50. time.sleep(0.01) 51. returnFalse 52. 53. # 释放锁资源 54. def release_lock(lock_name, identifier): 55. redis_connect = CollectRedis() 56. value = redis_connect.get_lock(lock_name) 57. if not value: 58. returnTrue 59. if value == identifier: 60. redis_connect.delete_lock(lock_name) 61. returnTrue 62. returnFalse 63. 64. 65. def resource_lock(lock_name, timeout=10): 66. """ 67. 并发锁装饰器函数 68. :param lock_name: 69. :param timeout: 70. :return: 71. """ 72. def _outfunc(func): 73. def inner_func(*args, **kwargs): 74. identifier = acquire_lock(lock_name, time_out=timeout) 75. if not identifier: 76. raise Exception("获取({})锁资源失败".format(lock_name)) 77. try: 78. result = func(*args, **kwargs) 79. release_lock(lock_name, identifier) 80. except Exception as e: 81. # 程序出现异常时主动释放锁资源 82. release_lock(lock_name, identifier) 83. raise Exception(e.args) 84. return result 85. return inner_func 86. return _outfunc 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.高防服务器
相关文章
电脑开机不出密码错误的原因与解决方法(探究密码错误问题及有效解决方案)
摘要:在日常使用电脑的过程中,我们经常会遇到电脑开机后输入密码却提示密码错误的问题。这不仅给我们的使用带来困扰,也可能导致无法正常登录系统。本文将针对这一问题展开讨论,分析可能的原因,并...2025-11-05
来源:JAVA日知录在日常开发中有很多这样的场景:有一些业务系统的配置信息,数据量不大,修改频率不高,但是访问很频繁。如果每次程序都从数据库或集中式缓存中获取,受限于硬盘 I/O性能、远程网络访问限制2025-11-05
如何查看域名到期时间?域名到期时间查询方法?要了解您的域名何时过期,您可以登录域名服务提供商网站的会员中心。很多人认为域名到期没什么事情,从而导致域名忘记续费被他人买走;下面聚名网就带大家看看如何查看2025-11-05
揭露 FileSystem 引起的线上 JVM 内存溢出问题
作者:来自 vivo 互联网大数据团队-Ye Jidong本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。内存泄漏定义memory leak):一个不再被2025-11-05解决galgame电脑运行错误的方法(探索电脑运行错误的原因与解决方案)
摘要:随着galgame游戏的流行,许多玩家在电脑运行过程中可能会遇到一些错误和问题。本文将探讨常见的galgame电脑运行错误及其解决方案,帮助玩家顺利地享受这种娱乐方式。...2025-11-05
一、传统监控系统的盲区,如何打造业务状态监控。 在系统架构设计中非常重要的一环是要做数据监控和数据最终一致性,关于一致性的补偿,已经由算法部的大佬总结过就不在赘述。这里主要讲如何去补偿?补偿的方案哪些2025-11-05

最新评论