要在Python程序中操作Redis数据库,必须使用Redis的Python客户端库。目前最流行的Redis Python客户端库是redis-py,它提供了完整的Redis命令封装,并支持连接池、高级数据类型等功能。
以下是操作Redis数据库的完整攻略:
1. 安装redis-py
redis-py可以通过pip安装:
pip install redis
2. 连接Redis服务器
使用redis-py连接Redis服务器需要指定主机和端口号。默认情况下,Redis服务器监听端口为6379。
import redis
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
3. 设置键值对
使用Redis的set命令设置键值对,可以通过redis-py的set方法实现。
r.set('name', 'Alice')
set方法可以设置字符串类型的键值对,还可以设置过期时间、nx参数(表示只有当键不存在时才设置)以及xx参数(表示只有当键存在时才设置)。
除了字符串类型,Redis还支持其他几种数据类型,包括列表、哈希、集合和有序集合。redis-py提供了与这四种数据类型对应的类:Redis List、Redis Hash、Redis Set、Redis ZSet。操作方式和字符串类似,例如:
r.lpush('mylist', 'a', 'b', 'c') # 向列表增加数据
r.hset('myhash', 'name', 'Bob') # 设置哈希的值
r.sadd('myset', 'elem1', 'elem2') # 向集合增加元素
r.zadd('myzset', {'elem1': 1, 'elem2': 2}) # 向有序集合增加元素
4. 获取键值对
使用Redis的get命令获取键值对,可以通过redis-py的get方法实现。
name_value = r.get('name')
如果键不存在,get方法会返回None。
获取其他数据类型的方法:
mylist = r.lrange('mylist', 0, -1) # 获取列表的所有元素
myhash = r.hgetall('myhash') # 获取哈希的所有键值对
myset = r.smembers('myset') # 获取集合的所有元素
myzset = r.zrange('myzset', 0, -1, withscores=True) # 获取有序集合的所有元素和分数
5. 删除键值对
使用Redis的del命令删除键值对,可以通过redis-py的delete方法实现。
r.delete('name')
删除其他数据类型的方法:
r.delete('mylist')
r.delete('myhash')
r.delete('myset')
r.delete('myzset')
示例说明
示例1:使用Redis实现简单的计数器
import redis
r = redis.Redis()
def increase_counter():
r.incr('counter')
def get_counter():
return int(r.get('counter') or 0)
以上代码定义了两个函数,其中increase_counter函数会将名为'counter'的键增加1,而get_counter函数会获取counter键的值。可以在多个Python进程中共享'counter'键,从而实现简单的计数器。
示例2:使用Redis实现缓存
import time
import redis
r = redis.Redis()
def cached(timeout=30):
def wrapper(func):
def inner(*args, **kwargs):
key = func.__name__ + str(args) + str(kwargs)
value = r.get(key)
if value is not None:
return value.decode('utf-8')
else:
result = func(*args, **kwargs)
r.setex(key, timeout, result)
return result
return inner
return wrapper
@cached()
def slow_func(x, y):
time.sleep(5)
return str(x + y)
以上代码定义了cached装饰器函数,它可以让函数结果被缓存到Redis中,并在timeout秒后失效。其中slow_func是一个“耗时”的函数,调用它需要等待5秒。但是通过@cached装饰器的使用,如果输入的参数和之前调用过的相同,那么就直接从Redis中获取结果,不需要再次调用slow_func。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 实现 redis 数据库的操作 - Python技术站