简介
redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现select命令
安装Redis
- 安装
$docker run --name redis -d -p 6379:6379 redis
- 安装依赖库
$pip install redis
连接Redis
连接redis,默认存储为byte类型。decode_responses=True参数使得存储类型为string,但性能不如byte。
import redis # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库
r = redis.Redis(host='localhost', port=6379)
r.set('key', 'value')
print(r['key'])
print(r.get('key')) # 取出键name对应的值
print(type(r.get('key')))
连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。
可以直接建立一个连接池,然后作为参数传递给Redis方法,这样就可以实现多个Redis实例共享一个连接池。
redis模块为我们实现了释放连接回连接池,因此我们不需要手动释放。
import redis
pool = redis.ConnectionPool(host='localhost', port=6379, max_connections=32)
r = redis.Redis(connection_pool=pool)
r.set('gender', 'male') # key是"gender" value是"male" 将键值对存入redis缓存
print(r.get('gender')) # gender 取出键male对应的值
Api
String
set(name, value, ex=None, px=None, nx=False, xx=False)
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,当前set操作才执行
get key
List
lpush key value # 头部添加
rpush key value # 尾部添加
llen key # 查看列表长度
lrange start end # 查看一段列表 lrange key 0 -1 返回所有数据
lpop key # 从左侧删除元素
rpop key # 从右侧删除元素
Set
sadd key member # 添加元素
srem key member # 删除元素
spop key # 删除并返回元素
sismember key member # 判断member是否在set中,返回1表示存在
sinter key1 key2 key3 # 返回给定集合的交集
sunion key1 key2 key3 # 返回给定集合的并集
sdiff key1 key2 key3 # 返回给定集合的差集
smembers key # 返回集合所有元素
scard key # 返回集合元素个数
Sorted Set
zadd key score member # 添加元素
zrem key member # 删除元素
zrange key start end # 返回有序结果,升序
zcard key # 返回集合中元素个数
zscore key element # 返回给定元素对应的score
Hash
hset key field value # 设置hash值
hget key field # 获取hash值
hexists key field # 测试指定field 是否存在
hdel key field # 删除指定的hash field
hlen key # 获取域的数量
hkeys key # 获取所有的域名
hgetall # 获取所有域名和值
其他
keys * #查看所有key
exists key #判断指定key是否存在,存在返回True,反之False.
ttl key #查看有效时间以秒为单位
type key #查看键的类型
del key #删除该键