一、单机
1、安装redis模块
sudo pip3 install redis
或
sudo easy_install redis
源码地址:https://github.com/WoLpH/redis-py 、https://github.com/redis/redis-py
2、单机连接
redis模块提供两个类Redis和StrictRedis用于实现大部分官方的命令。
Redis是StrictRedis的子类,用于向后兼用旧版本
redis取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串
import redis # 导入redis模块 if __name__ == '__main__': # StrictRedis r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True) # Redis # r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'yangyongjie') test = r.get('name') print(test)
3、连接池
redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池
import redis # 导入redis 模块 pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.set('name', 'runoob') # 设置 name 对应的值 print(r.get('name')) # 取出键 name 对应的值
4、基本命令
1)String
①:set
set(name, value, ex=None, px=None, nx=False, xx=False)
在 Redis 中设置值,默认,不存在则创建,存在则修改
参数:
ex - 过期时间(秒)
px - 过期时间(毫秒)
nx - 如果设置为True,则只有name不存在时,当前set操作才执行
xx - 如果设置为True,则只有name存在时,当前set操作才执行
②:setnx
setnx(name,value) :设置值,只有name不存在时,执行设置操作(添加)
③:setex(name, time, value):设置值并设置过期时间,单位秒
④:mset(*args, **kwargs):批量设置值
⑤:mget(keys, *args):批量获取
2)hash
①:hset(name, key, value)
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
参数:
name - redis的name
key - name对应的hash中的key
value - name对应的hash中的value
②:hmset(name, mapping)
在name对应的hash中批量设置键值对
参数:
在name对应的hash中批量设置键值对
mapping - 字典,如:{'k1':'v1', 'k2': 'v2'}
③:hgetall(name)
取出所有的键值对
5、管道(pipeline)
redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作
如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作
管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能
import redis pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) # 默认的情况下,管道里执行的命令可以保证执行的原子性,执行pipe = r.pipeline(transaction=False)可以禁用这一特性。 # pipe = r.pipeline(transaction=True) pipe = r.pipeline() # 创建一个管道 pipe.set('name', 'jack') pipe.sadd('faz', 'baz') pipe.incr('num') # 如果num不存在则vaule为1,如果存在,则value自增1 pipe.execute() # 管道的命令可以写在一起 # pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()
二、集群
python的redis库是不支持集群操作的,推荐库:redis-py-cluster
文档地址:https://redis-py-cluster.readthedocs.io/en/master/
1、安装
pip install redis-py-cluster
2、连接
from rediscluster import RedisCluster def redis_cluster(): redis_nodes = [{'host': '127.0.0.1', 'port': 6379}, {'host': '127.0.0.1', 'port': 6379}, {'host': '127.0.0.1', 'port': 6379} ] redis_connect = None try: redis_connect = RedisCluster(startup_nodes=redis_nodes, password='cluster_password', decode_responses=True) except Exception as e: print(e) return redis_connect if __name__ == '__main__': redis = redis_cluster() redis.set('name', 'yangyongjie') print(redis.get('name'))
END.