pip install redis
redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。
redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。
import redis host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 r = redis.StrictRedis(host=host,port=port,db=0) key = r.keys() print(key) r = redis.StrictRedis(host=host,port=port,db=0,decode_responses=True) key = r.keys() print(key)
redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。
import redis host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis key = r.keys() print(key)
在 Redis 中设置值,默认,不存在则创建,存在则修改。
参数:
ex - 过期时间(秒) 这里过期时间是3秒,3秒后,键 test 的值就变成None
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis r.set('test','123456',ex=3) # 设置键 test的值为123456,过期时间为3秒 print("test的值为:{}".format(r.get('test'))) time.sleep(3) print("3秒后test的值为:{}".format(r.get('test')))
px - 过期时间(豪秒) 这里过期时间是3豪秒,3毫秒后,键foo的值就变成None
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis r.set('test','1234',px=3) # 设置键 test 的值为1234,过期时间为3毫秒 print("test的值为:{}".format(r.get('test'))) time.sleep(0.003) print("3毫秒后test的值为:{}".format(r.get('test')))
nx - 如果设置为True,则只有name不存在时,当前set操作才执行 (新建)
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("若test键不存在,则设置test的值为:123456,否则不执行") r.set('test','123456',nx=True) # 当test键不存在时,设置键 test 的值为123456 print("test的值为:{}".format(r.get('test')))
xx - 如果设置为True,则只有name存在时,当前set操作才执行 (修改)
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("若test键存在,则修改test的值为:123456,否则不执行") r.set('test','123456',xx=True) # 当test键存在时,修改键 test 的值为123456 print("test的值为:{}".format(r.get('test')))
设置值,只有name不存在时,执行设置操作(添加)
设置值,time - 过期时间(数字秒 或 timedelta对象)
设置值,time_ms - 过期时间(数字毫秒 或 timedelta对象)
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("设置键 k1和k2的值,分别为v1和v2") r.mset({'k1': 'v1', 'k2': 'v2'}) print("获取键k1和k2的值") print(r.mget("k1", "k2")) # 一次取出多个键对应的值
设置新值并获取原来的值
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("获取键test的值为:{}".format(r.get('test'))) result = r.getset('test','12345') # 设置键test的新值为12345,并返回原test的值1234 print("键test的原值为:{}".format(result)) print("获取键test的当前的值为:{}".format(r.get('test')))
获取子序列(根据索引、字节获取)一个汉字占3个字节
参数:
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("获取键test的值为:{}".format(r.get('test'))) result = r.getrange('test',0,1) # 获取索引0到1的子序列 print("键test的0到1的子序列为:{}".format(result)) result = r.getrange('test',1,4) # 获取索引1到4的子序列 print("键test的1到4的子序列为:{}".format(result))
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("获取键name的值为:{}".format(r.get('name'))) result = r.getrange('name',0,2) # 获取索引0到2的子序列 print("键name的0到2的子序列为:{}".format(result)) result = r.getrange('name',3,20) # 获取索引3到20的子序列 print("键name的3到20的子序列为:{}".format(result))
注意:中文一个汉字占3个字节,如果取0到1的子序列,则会报错(不到一个汉字)
修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
参数:
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("当前数据库中存在的键有:{}".format(r.keys())) print("获取键name的值为:{}".format(r.get('name'))) print('将name的第一个字节开始的值改为“我”,占3个字节') r.setrange('name',0,'我') # print("键name的值修改为:{}".format(r.get('name')))
返回name对应值的字节长度(一个汉字3个字节)
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("获取键test的值为:{}".format(r.get('test'))) result = r.strlen('test') print("键test的字节长度为:{}".format(result)) print("获取键name的值为:{}".format(r.get('name'))) result = r.strlen('name') print("键name的字节长度为:{}".format(result))
自增 key对应的值,当 key不存在时,则创建 key=amount,否则,则自增。
参数:amount - 自增数(必须是整数)
import redis import time host = '192.168.149.153' # redis服务地址 port = 6379 # redis服务端口 pool = redis.ConnectionPool(host=host,port=port,db=0,decode_responses=True) r = redis.Redis(connection_pool=pool) # 或者用redis.StrictRedis print("获取键num的值为:{}".format(r.get('num'))) print("获取键num1的值为:{}".format(r.get('num1'))) print("将键num的值增1") r.incr('num',amount=1) print("获取键num当前的值为:{}".format(r.get('num'))) r.incr('num1',amount=10) print("获取键num1当前的值为:{}".format(r.get('num1')))
自减 key对应的值,当 key不存在时,则创建 name=amount,否则,则自减。
参数:amount - 自减数(整数)
在key对应的值后面追加内容
参数:value - 要追加的字符串