RedisObject.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import logging
  2. import redis
  3. from AnsjerPush.config import REDIS_ADDRESS, CONFIG_INFO, CONFIG_US
  4. TIME_LOGGER = logging.getLogger('time')
  5. # 本地调试把注释打开
  6. # REDIS_ADDRESS = '127.0.0.1'
  7. class RedisObject:
  8. def __init__(self, db=0):
  9. if CONFIG_INFO == CONFIG_US:
  10. password = '012bzaKUhleHc2645465'
  11. pool = redis.ConnectionPool(host=REDIS_ADDRESS, password=password, port=6379, db=db)
  12. else:
  13. pool = redis.ConnectionPool(host=REDIS_ADDRESS, port=6379, db=db)
  14. self.CONN = redis.Redis(connection_pool=pool)
  15. def set_data(self, key, val, expire=0):
  16. try:
  17. self.CONN.set(key, val)
  18. if expire > 0:
  19. self.CONN.expire(key, expire)
  20. except Exception as e:
  21. return False
  22. else:
  23. return True
  24. def get_data(self, key):
  25. try:
  26. val = self.CONN.get(key)
  27. except Exception as e:
  28. print(repr(e))
  29. return False
  30. else:
  31. if val:
  32. return val.decode('utf-8')
  33. else:
  34. return False
  35. def del_data(self, key):
  36. try:
  37. val = self.CONN.delete(key)
  38. except Exception as e:
  39. print(repr(e))
  40. return False
  41. else:
  42. return True
  43. def get_size(self):
  44. return self.CONN.dbsize()
  45. # 向列表插入数据
  46. def rpush(self, name, val):
  47. self.CONN.rpush(name, val)
  48. # 获取列表长度
  49. def llen(self, name):
  50. return self.CONN.llen(name=name)
  51. # 获取列表所有数据
  52. def lrange(self, name, start, end):
  53. return self.CONN.lrange(name, start, end)
  54. def get_ttl(self, key):
  55. ttl = self.CONN.ttl(key)
  56. if ttl:
  57. return ttl
  58. else:
  59. return 0
  60. def ltrim(self, name, start, end):
  61. """
  62. 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
  63. @param name: 列表名称
  64. @param start: 区间开始下标, 0:第一个元素
  65. @param end: 区间结束下标, -1:最后一个元素
  66. @return : bool
  67. """
  68. return self.CONN.ltrim(name, start, end)
  69. def lindex(self, name, index=-1):
  70. """
  71. 根据下标查找元素
  72. @param name: 列表名称
  73. @param index: 区间结束下标, -1:最后一个元素
  74. @return : bool
  75. """
  76. return self.CONN.lindex(name, index)
  77. def close(self):
  78. """
  79. 关闭连接
  80. """
  81. return self.CONN.close()
  82. def hset_data(self, key, field, value, expire=0):
  83. """ 新增:存储 Hash 数据 """
  84. try:
  85. self.CONN.hset(key, field, value)
  86. if expire > 0:
  87. self.CONN.expire(key, expire)
  88. return True
  89. except Exception as e:
  90. print(f"Redis hset error: {repr(e)}")
  91. return False
  92. def hget_data(self, key, field):
  93. """ 新增:获取 Hash 数据 """
  94. try:
  95. val = self.CONN.hget(key, field)
  96. return val.decode('utf-8') if val else None
  97. except Exception as e:
  98. print(f"Redis hget error: {repr(e)}")
  99. return None
  100. def incr(self, key, amount=1, ttl=0):
  101. """
  102. 增加计数器的值
  103. :param key: 键名,用于存储计数器的 Redis 键
  104. :param amount: 增加的数量,默认为 1
  105. :param ttl: 键的过期时间(秒)
  106. :return: 更新后的计数值,若发生异常则返回 False
  107. """
  108. try:
  109. # 增加计数器
  110. result = self.CONN.incrby(key, amount)
  111. # 设置过期时间
  112. if ttl > 0:
  113. self.CONN.expire(key, ttl)
  114. return result
  115. except Exception as e:
  116. print(repr(e))
  117. return False
  118. def hash_field_increment(self, key, field, val=1, ttl=0):
  119. """
  120. 哈希表中字段增量
  121. :param key: redis的key
  122. :param field: 哈希表字段
  123. :param val: 增量
  124. :param ttl: 键的过期时间(秒)
  125. :return: 成功返回True 异常返回 False
  126. """
  127. try:
  128. # 增加哈希表中指定字段的值
  129. self.CONN.hincrby(key, field, val)
  130. # 如果 ttl 大于 0,则设置过期时间(单位:秒)
  131. if ttl > 0:
  132. self.CONN.expire(key, ttl)
  133. return True
  134. except Exception as e:
  135. # 发生异常时打印错误信息,便于调试
  136. TIME_LOGGER.error(f"增值或设置过期时间时发生错误: {repr(e)}")
  137. return False