RedisObject.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import redis
  2. import rediscluster
  3. from rediscluster import ClusterConnectionPool
  4. from AnsjerPush.config import REDIS_ADDRESS, CONFIG_INFO, CONFIG_US
  5. # 本地调试把注释打开
  6. # REDIS_ADDRESS = '127.0.0.1'
  7. class RedisObject:
  8. def __init__(self, db=0):
  9. if CONFIG_INFO == CONFIG_US:
  10. from AnsjerPush.config import STARTUP_NODES, REDIS_PASSWORD
  11. pool = ClusterConnectionPool(startup_nodes=STARTUP_NODES, password=REDIS_PASSWORD, max_connections=100)
  12. self.CONN = rediscluster.RedisCluster(connection_pool=pool)
  13. else:
  14. pool = redis.ConnectionPool(host=REDIS_ADDRESS, port=6379, db=db)
  15. self.CONN = redis.Redis(connection_pool=pool)
  16. def set_data(self, key, val, expire=0):
  17. self.CONN.set(key, val)
  18. if expire > 0:
  19. self.CONN.expire(key, expire)
  20. def get_data(self, key):
  21. val = self.CONN.get(key)
  22. if val:
  23. return val.decode('utf-8')
  24. def del_data(self, key):
  25. try:
  26. val = self.CONN.delete(key)
  27. except Exception as e:
  28. print(repr(e))
  29. return False
  30. else:
  31. return True
  32. def get_size(self):
  33. return self.CONN.dbsize()
  34. # 向列表插入数据
  35. def rpush(self, name, val):
  36. self.CONN.rpush(name, val)
  37. # 获取列表长度
  38. def llen(self, name):
  39. return self.CONN.llen(name=name)
  40. # 获取列表所有数据
  41. def lrange(self, name, start, end):
  42. return self.CONN.lrange(name, start, end)
  43. def get_ttl(self, key):
  44. ttl = self.CONN.ttl(key)
  45. if ttl:
  46. return ttl
  47. else:
  48. return 0
  49. def ltrim(self, name, start, end):
  50. """
  51. 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
  52. @param name: 列表名称
  53. @param start: 区间开始下标, 0:第一个元素
  54. @param end: 区间结束下标, -1:最后一个元素
  55. @return : bool
  56. """
  57. return self.CONN.ltrim(name, start, end)
  58. def lindex(self, name, index=-1):
  59. """
  60. 根据下标查找元素
  61. @param name: 列表名称
  62. @param index: 区间结束下标, -1:最后一个元素
  63. @return : bool
  64. """
  65. return self.CONN.lindex(name, index)
  66. def close(self):
  67. """
  68. 关闭连接
  69. """
  70. return self.CONN.close()