文章目录
安装和使用
安装
安装redis模块
pip3 install redis
普通连接
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py
import redis
conn = redis.Redis(host='127.0.0.1', port=6379)
# 可以使用url方式连接到数据库
# conn = Redis.from_url('redis://@localhost:6379/1')
conn.set('name', 'LinWOW')
print(conn.get('name'))
连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池
连接池:redis_pool.py
from redis import ConnectionPool
POOL=ConnectionPool(host='127.0.0.1',port=6379,max_connections=100)
使用连接池:test_redis.py
import redis
from redis_pool import POOl
conn = redis.Redis(connection_pool=POOl)
conn.set('name', 'LinWOW')
print(conn.get('name'))
构造url方式连接到数据库,有以下三种模式:
redis://[:password]@host:port/db # TCP连接
rediss://[:password]@host:port/db # Redis TCP+SSL 连接
unix://[:password]@/path/to/socket.sock?db=db # Redis Unix Socket 连接
Python操作Redis
String操作
方法 | 作用 | 示例 | 示例结果 |
---|---|---|---|
set(name, value, ex=None, px=None, nx=False, xx=False) | ex,过期时间(s);px,过期时间(ms);nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果;xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值 | 效果和setex,setnx一致 | |
set(name, value) | 给name赋值为value | redis.set(‘name’, ‘Bob’) | True |
get(name) | 返回数据库中key为name的string的value | redis.get(‘name’) | b’Bob’ |
getset(name, value) | 给数据库中key为name的string赋予值value并返回上次的value | redis.getset(‘name’, ‘Mike’) | b’Bob’ |
mget(keys, *args) | 返回多个key对应的value | redis.mget([‘name’, ‘nickname’]) | [b’Mike’, b’Miker’] |
setnx(name, value) | 如果key不存在才设置value | redis.setnx(‘newname’, ‘James’) | 第一次运行True,第二次False |
setex(name, time, value) | 设置可以对应的值为string类型的value,并指定此键值对应的有效期 | redis.setex(‘name’, 1, ‘James’) | True |
setrange(name, offset, value) | 设置指定key的value值的子字符串 | redis.set(‘name’, ‘Hello’) redis.setrange(‘name’, 6, ‘World’) | 11,修改后的字符串长度 |
mset(mapping) | 批量赋值 | redis.mset({‘name1’: ‘Durant’, ‘name2’: ‘James’}) | True |
msetnx(mapping) | key均不存在时才批量赋值 | redis.msetn |