RedisClient.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. '''
  4. self.name为Redis中的一个key
  5. 2017/4/17 修改pop
  6. '''
  7. # ############################
  8. # 已弃用,
  9. # SsdbClient.py 支持redis
  10. ##############################
  11. import json
  12. import random
  13. import redis
  14. import sys
  15. class RedisClient(object):
  16. """
  17. Reids client
  18. """
  19. # 为了保持DbClient的标准
  20. # 在RedisClient里面接受username参数, 但不进行使用.
  21. # 因为不能将username通过kwargs传进redis.Redis里面, 会报错:
  22. # TypeError: __init__() got an unexpected keyword argument 'username'
  23. def __init__(self, name, host, port, username, **kwargs):
  24. """
  25. init
  26. :param name:
  27. :param host:
  28. :param port:
  29. :return:
  30. """
  31. self.name = name
  32. self.__conn = redis.Redis(host=host, port=port, db=0, **kwargs)
  33. def get(self):
  34. """
  35. get random result
  36. :return:
  37. """
  38. key = self.__conn.hgetall(name=self.name)
  39. # return random.choice(key.keys()) if key else None
  40. # key.keys()在python3中返回dict_keys,不支持index,不能直接使用random.choice
  41. # 另:python3中,redis返回为bytes,需要解码
  42. rkey = random.choice(list(key.keys())) if key else None
  43. if isinstance(rkey, bytes):
  44. return rkey.decode('utf-8')
  45. else:
  46. return rkey
  47. # return self.__conn.srandmember(name=self.name)
  48. def put(self, key):
  49. """
  50. put an item
  51. :param value:
  52. :return:
  53. """
  54. key = json.dumps(key) if isinstance(key, (dict, list)) else key
  55. return self.__conn.hincrby(self.name, key, 1)
  56. # return self.__conn.sadd(self.name, value)
  57. def getvalue(self, key):
  58. value = self.__conn.hget(self.name, key)
  59. return value if value else None
  60. def pop(self):
  61. """
  62. pop an item
  63. :return:
  64. """
  65. key = self.get()
  66. if key:
  67. self.__conn.hdel(self.name, key)
  68. return key
  69. # return self.__conn.spop(self.name)
  70. def delete(self, key):
  71. """
  72. delete an item
  73. :param key:
  74. :return:
  75. """
  76. self.__conn.hdel(self.name, key)
  77. # self.__conn.srem(self.name, value)
  78. def inckey(self, key, value):
  79. self.__conn.hincrby(self.name, key, value)
  80. def getAll(self):
  81. # return self.__conn.hgetall(self.name).keys()
  82. # python3 redis返回bytes类型,需要解码
  83. if sys.version_info.major == 3:
  84. return [key.decode('utf-8') for key in self.__conn.hgetall(self.name).keys()]
  85. else:
  86. return self.__conn.hgetall(self.name).keys()
  87. # return self.__conn.smembers(self.name)
  88. def get_status(self):
  89. return self.__conn.hlen(self.name)
  90. # return self.__conn.scard(self.name)
  91. def changeTable(self, name):
  92. self.name = name
  93. if __name__ == '__main__':
  94. redis_con = RedisClient('proxy', 'localhost', 6379)
  95. # redis_con.put('abc')
  96. # redis_con.put('123')
  97. # redis_con.put('123.115.235.221:8800')
  98. # redis_con.put(['123', '115', '235.221:8800'])
  99. # print(redis_con.getAll())
  100. # redis_con.delete('abc')
  101. # print(redis_con.getAll())
  102. # print(redis_con.getAll())
  103. redis_con.changeTable('raw_proxy')
  104. redis_con.pop()
  105. # redis_con.put('132.112.43.221:8888')
  106. # redis_con.changeTable('proxy')
  107. print(redis_con.get_status())
  108. print(redis_con.getAll())