1、redis连接
redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。
安装redis
pip install redis
使用连接池连接redis,避免每次建立、释放连接的开销:
import redis
pool = redis.ConnectionPool(host=host, port=port, db=db, password=password)
r = redis.StrictRedis(connection_pool=pool)
2.string
方法 | 作用 | 示例 | 示例结果 |
---|---|---|---|
set(name, value) | 给name赋值为value | redis.set(‘name‘, ‘price‘) | True |
get(name) | 返回数据库中key为name的string的value | redis.get(‘name‘) | b‘price‘ |
getset(name, value) | 给数据库中key为name的string赋予值value并返回上次的value | redis.getset(‘name‘, ‘new‘) | b‘price‘ |
mget(keys, *args) | 返回多个key对应的value | redis.mget([‘name‘, ‘newname‘]) | [b‘price‘, b‘new‘] |
setnx(name, value) | 如果key不存在才设置value | redis.setnx(‘noname‘, ‘zz‘) | 第一次运行True,第二次False |
setex(name, time, value) | 设置可以对应的值为string类型的value,并指定此键值对应的有效期 | redis.setex(‘name‘, 2, ‘cat‘) | True |
setrange(name, offset, value) | 设置指定key的value值的子字符串 | redis.set(‘name‘, ‘Hello‘) redis.setrange(‘name‘, 6, ‘World‘) | 11,修改后的字符串长度 |
mset(mapping) | 批量赋值 | redis.mset({‘name1‘: ‘snake‘, ‘name2‘: ‘dog‘}) | True |
msetnx(mapping) | key均不存在时才批量赋值 | redis.msetnx({‘name3‘: ‘pig‘, ‘name4‘: ‘drang‘}) | True |
incr(name, amount=1) | key为name的value增值操作,默认1,key不存在则被创建并设为amount | redis.incr(‘age‘, 1) | 1,即修改后的值 |
decr(name, amount=1) | key为name的value减值操作,默认1,key不存在则被创建并设置为-amount | redis.decr(‘age‘, 1) | -1,即修改后的值 |
append(key, value) | key为name的string的值附加value | redis.append(‘nickname‘, ‘OK‘) | 13,即修改后的字符串长度 |
substr(name, start, end=-1) | 返回key为name的string的value的子串 | redis.substr(‘name‘, 1, 4) | b‘ello‘ |
getrange(key, start, end) | 获取key的value值从start到end的子字符串 | redis.getrange(‘name‘, 1, 4) | b‘ello‘ |
3.hash操作
方法 | 作用 | 示例 | 示例结果 |
---|---|---|---|
hset(name, key, value) | 向key为name的hash中添加映射 | hset(‘price‘, ‘cake‘, 5) | 1,即添加的映射个数 |
hsetnx(name, key, value) | 向key为name的hash中添加映射,如果映射键名不存在 | hsetnx(‘price‘, ‘book‘, 6) | 1,即添加的映射个数 |
hget(name, key) | 返回key为name的hash中field对应的value | redis.hget(‘price‘, ‘cake‘) | 5 |
hmget(name, keys, *args) | 返回key为name的hash中各个键对应的value | redis.hmget(‘price‘, [‘apple‘, ‘orange‘]) | [b‘3‘, b‘7‘] |
hmset(name, mapping) | 向key为name的hash中批量添加映射 | redis.hmset(‘price‘, {‘banana‘: 2, ‘pear‘: 6}) | True |
hincrby(name, key, amount=1) | 将key为name的hash中映射的value增加amount | redis.hincrby(‘price‘, ‘apple‘, 3) | 6,修改后的值 |
hexists(name, key) | key为namehash中是否存在键名为key的映射 | redis.hexists(‘price‘, ‘banana‘) | True |
hdel(name, *keys) | key为namehash中删除键名为key的映射 | redis.hdel(‘price‘, ‘banana‘) | True |
hlen(name) | 从key为name的hash中获取映射个数 | redis.hlen(‘price‘) | 6 |
hkeys(name) | 从key为name的hash中获取所有映射键名 | redis.hkeys(‘price‘) | [b‘cake‘, b‘book‘, b‘banana‘, b‘pear‘] |
hvals(name) | 从key为name的hash中获取所有映射键值 | redis.hvals(‘price‘) | [b‘5‘, b‘6‘, b‘2‘, b‘6‘] |
hgetall(name) | 从key为name的hash中获取所有映射键值对 | redis.hgetall(‘price‘) | {b‘cake‘: b‘5‘, b‘book‘: b‘6‘, b‘orange‘: b‘7‘, b‘pear‘: b‘6‘} |