Python怎么操作Redis所有类型

其他教程   发布日期:2025年03月03日   浏览次数:157

这篇文章主要介绍“Python怎么操作Redis所有类型”,在日常操作中,相信很多人在Python怎么操作Redis所有类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么操作Redis所有类型”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Redis的数据类型

Redis支持五种不同的数据类型,分别是:

  • 字符串(String)

  • 哈希(Hash)

  • 列表(List)

  • 集合(Set)

  • 有序集合(Sorted Set)

下面我们将详细介绍如何在Python中操作这五种数据类型。

字符串(String)

字符串是Redis中最基本的数据类型。在Python中,我们可以使用

  1. redis-py
库来操作字符串。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. # 设置字符串
  4. r.set('name', 'Tom')
  5. # 获取字符串
  6. print(r.get('name'))

输出:

b'Tom'

在Redis中,字符串可以是任何形式的数据,比如数字、布尔值、甚至是序列化后的对象。而在Python中,我们可以使用

  1. pickle
库来序列化对象。
  1. import pickle
  2. class User:
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. user = User('Tom', 18)
  7. r.set('user', pickle.dumps(user))
  8. print(pickle.loads(r.get('user')))

输出:

<__main__.User object at 0x0000025E5C5D5C10>

哈希(Hash)

哈希是Redis中的一种键值对存储结构,可以看做是一张表。在Python中,我们同样可以使用

  1. redis-py
库来操作哈希。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. # 设置哈希
  4. r.hset('user:1', 'name', 'Tom')
  5. r.hset('user:1', 'age', 18)
  6. # 获取哈希
  7. print(r.hgetall('user:1'))

输出:

{b'name': b'Tom', b'age': b'18'}

在Redis中,哈希可以用来存储对象,每个属性对应一个键值对。

  1. import pickle
  2. class User:
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. user = User('Tom', 18)
  7. r.hset('user:1', 'data', pickle.dumps(user))
  8. data = pickle.loads(r.hget('user:1', 'data'))
  9. print(data.name, data.age)

输出:

Tom 18

列表(List)

列表是Redis中的一种有序集合,可以用来存储一组有序的数据。在Python中,我们同样可以使用

  1. redis-py
库来操作列表。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. # 设置列表
  4. r.lpush('mylist', 'a')
  5. r.lpush('mylist', 'b')
  6. r.lpush('mylist', 'c')
  7. # 获取列表
  8. print(r.lrange('mylist', 0, -1))

输出:

[b'c', b'b', b'a']

在Redis中,列表可以用来实现简单的消息队列,比如生产者消费者模式。

  1. import time
  2. import threading
  3. def producer():
  4. for i in range(10):
  5. r.lpush('queue', str(i))
  6. time.sleep(0.1)
  7. def consumer():
  8. while True:
  9. item = r.brpop('queue', timeout=1)
  10. if item:
  11. print(item[1])
  12. t1 = threading.Thread(target=producer)
  13. t2 = threading.Thread(target=consumer)
  14. t1.start()
  15. t2.start()
  16. t1.join()
  17. t2.join()

输出:

b'0'
b'1'
b'2'
b'3'
b'4'
b'5'
b'6'
b'7'
b'8'
b'9'

集合(Set)

集合是Redis中的一种无序集合,可以用来存储一组唯一的数据。在Python中,我们同样可以使用

  1. redis-py
库来操作集合。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. # 设置集合
  4. r.sadd('myset', 'a')
  5. r.sadd('myset', 'b')
  6. r.sadd('myset', 'c')
  7. # 获取集合
  8. print(r.smembers('myset'))

输出:

{b'c', b'b', b'a'}

在Redis中,集合可以用来实现简单的去重操作,也可以用来实现交集、并集、差集等操作。

  1. r.sadd('set1', 1, 2, 3, 4)
  2. r.sadd('set2', 3, 4, 5, 6)
  3. # 求交集
  4. print(r.sinter('set1', 'set2'))
  5. # 求并集
  6. print(r.sunion('set1', 'set2'))
  7. # 求差集
  8. print(r.sdiff('set1', 'set2'))

输出:

{b'3', b'4'}
{b'1', b'2', b'3', b'4', b'5', b'6'}
{b'1', b'2'}

有序集合(Sorted Set)

有序集合是Redis中的一种有序集合,可以用来存储一组有序的数据,并且每个数据都有一个分数。在Python中,我们同样可以使用

  1. redis-py
库来操作有序集合。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. # 设置有序集合
  4. r.zadd('myzset', {'a': 1, 'b': 2, 'c': 3})
  5. # 获取有序集合
  6. print(r.zrange('myzset', 0, -1, withscores=True))

输出:

[(b'a', 1.0), (b'b', 2.0), (b'c', 3.0)]

在Redis中,有序集合可以用来实现排行榜等功能。

  1. r.zadd('rank', {'Tom': 100, 'Jerry': 200, 'Alice': 300})
  2. # 获取排行榜前三名
  3. print(r.zrevrange('rank', 0, 2, withscores=True))

输出:

[(b'Alice', 300.0), (b'Jerry', 200.0), (b'Tom', 100.0)]

Redis的高级用法

除了以上介绍的五种数据类型,Redis还有一些高级用法,比如事务、发布订阅等。下面我们将介绍其中的一些用法。

事务

Redis的事务是通过

  1. MULTI
  1. EXEC
  1. WATCH
等命令实现的。在Python中,我们同样可以使用
  1. redis-py
库来执行事务。
  1. import redis
  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. with r.pipeline() as pipe:
  4. while True:
  5. try:
  6. pipe.watch('balance')
  7. balance = int(pipe.get('balance'))
  8. if balance < 10:
  9. raise Exception('Not enough balance')
  10. pipe.multi()
  11. pipe.decrby('balance', 10)
  12. pipe.incr('income', 10)
  13. pipe.execute()
  14. break
  15. except Exception as e:
  16. print(e)
  17. break

以上代码中,我们使用了一个简单的转账例子来演示事务的使用。在事务中,我们首先使用

  1. WATCH
命令监视了
  1. balance
键,然后获取了其当前的值。如果余额不足,则抛出异常,事务结束。否则,我们使用
  1. MULTI
命令开始事务,执行减少余额和增加收入的操作,最后使用
  1. EXEC
命令提交事务。

发布订阅

Redis的发布订阅是通过

  1. PUBLISH
  1. SUBSCRIBE
  1. UNSUBSCRIBE
等命令实现的。在Python中,我们同样可以使用
  1. redis-py
库来实现发布订阅功能。
  1. import redis
  2. import threading
  3. r = redis.Redis(host='localhost', port=6379, db=0)
  4. def publisher():
  5. for i in range(10):
  6. r.publish('channel', i)
  7. time.sleep(0.1)
  8. def subscriber():
  9. pubsub = r.pubsub()
  10. pubsub.subscribe('channel')
  11. for item in pubsub.listen():
  12. print(item['data'])
  13. t1 = threading.Thread(target=publisher)
  14. t2 = threading.Thread(target=subscriber)
  15. t1.start()
  16. t2.start()
  17. t1.join()
  18. t2.join()

以上代码中,我们使用了一个简单的发布订阅例子来演示发布订阅的使用。在这个例子中,我们使用了两个线程,一个线程用来发布消息,一个线程用来订阅消息。在订阅线程中,我们使用

  1. pubsub
对象来订阅
  1. channel
频道,并通过
  1. listen
方法来获取消息。

以上就是Python怎么操作Redis所有类型的详细内容,更多关于Python怎么操作Redis所有类型的资料请关注九品源码其它相关文章!