RedisClient.py 3.0 KB

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