RedisClient.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. def __init__(self, name, host, port):
  20. """
  21. init
  22. :param name:
  23. :param host:
  24. :param port:
  25. :return:
  26. """
  27. self.name = name
  28. self.__conn = redis.Redis(host=host, port=port, db=0)
  29. def get(self):
  30. """
  31. get random result
  32. :return:
  33. """
  34. key = self.__conn.hgetall(name=self.name)
  35. # return random.choice(key.keys()) if key else None
  36. # key.keys()在python3中返回dict_keys,不支持index,不能直接使用random.choice
  37. # 另:python3中,redis返回为bytes,需要解码
  38. rkey = random.choice(list(key.keys())) if key else None
  39. if isinstance(rkey, bytes):
  40. return rkey.decode('utf-8')
  41. else:
  42. return rkey
  43. # return self.__conn.srandmember(name=self.name)
  44. def put(self, key):
  45. """
  46. put an item
  47. :param value:
  48. :return:
  49. """
  50. key = json.dumps(key) if isinstance(key, (dict, list)) else key
  51. return self.__conn.hincrby(self.name, key, 1)
  52. # return self.__conn.sadd(self.name, value)
  53. def getvalue(self, key):
  54. value = self.__conn.hget(self.name, key)
  55. return value if value else None
  56. def pop(self):
  57. """
  58. pop an item
  59. :return:
  60. """
  61. key = self.get()
  62. if key:
  63. self.__conn.hdel(self.name, key)
  64. return key
  65. # return self.__conn.spop(self.name)
  66. def delete(self, key):
  67. """
  68. delete an item
  69. :param key:
  70. :return:
  71. """
  72. self.__conn.hdel(self.name, key)
  73. # self.__conn.srem(self.name, value)
  74. def inckey(self, key, value):
  75. self.__conn.hincrby(self.name, key, value)
  76. def getAll(self):
  77. # return self.__conn.hgetall(self.name).keys()
  78. # python3 redis返回bytes类型,需要解码
  79. if sys.version_info.major == 3:
  80. return [key.decode('utf-8') for key in self.__conn.hgetall(self.name).keys()]
  81. else:
  82. return self.__conn.hgetall(self.name).keys()
  83. # return self.__conn.smembers(self.name)
  84. def get_status(self):
  85. return self.__conn.hlen(self.name)
  86. # return self.__conn.scard(self.name)
  87. def changeTable(self, name):
  88. self.name = name
  89. if __name__ == '__main__':
  90. redis_con = RedisClient('proxy', 'localhost', 6379)
  91. # redis_con.put('abc')
  92. # redis_con.put('123')
  93. # redis_con.put('123.115.235.221:8800')
  94. # redis_con.put(['123', '115', '235.221:8800'])
  95. # print(redis_con.getAll())
  96. # redis_con.delete('abc')
  97. # print(redis_con.getAll())
  98. # print(redis_con.getAll())
  99. redis_con.changeTable('raw_proxy')
  100. redis_con.pop()
  101. # redis_con.put('132.112.43.221:8888')
  102. # redis_con.changeTable('proxy')
  103. print(redis_con.get_status())
  104. print(redis_con.getAll())