Python操作Redis(连接方式、通用操作、字符串操作、Hash操作、List操作)

Python操作Redis

普通连接

每次连接都会创建新的连接

import redis

conn = redis.Redis(
    host='127.0.0.1',
    port=6379,
    db=0,	# 数据库编号(Redis支持多数据库)
    password=None,
    decode_responses=True	# 自动解码为Unicode字符串 
)

连接池连接

连接池会维护一组可重用的连接,避免频繁的打开和关闭

import redis

POOL = redis.ConnectionPool(max_connections=10,host='127.0.0.1',port=6379,decode_responses=True)

conn = redis.Redis(connection_pool=POOL)
conn.set('name','123')
res=conn.get('name')
print(res)	# 123
conn.close()
  • max_connections:最大连接数

通用操作

命令描述
delete(*names)删除一个或多个键
exists(name)检查键是否存在
keys(pattern='*')根据模式匹配获取键名列表
expire(name, time)设置键的过期时间(秒)
rename(src, dst)重命名键
move(name, db)将键移动到另一个数据库
randomkey()随机返回一个键名
type(name)获取键的数据类型

字符串操作

命令描述
ex过期时间(秒)
px过期时间(毫秒)
nx如果设置为True,则只有键值不存在时,当前set操作才执行
xx如果设置为True,则只有键值存在时,当前set操作才执行
getset获取值然后再取出值
mset批量添加
mget批量取出
getrange获取字符的起始位置到结束为止,索引
strlen获取字符串长度
incr自增,或增加指定数
incrbyfloat浮点自增
derc自减,和incr相反
  • set和get
# 存入键为key1,值为123
conn.set('key1', '123')
# 取出
conn.get('key1')
  • ex
# 存入键为key2,值为123,十秒后过期
conn.set('key2', '123', ex=10)
# 只是写法不同,功能相同
conn.setex('key3', 10, '123')
  • nx
# 当key4不存在时存入123,否则不存入
conn.set('key4', '123',nx=True)
# 不同写法
conn.setnx('key5', '123')
  • xx
# 当key6存在时将值替换为123,否则不会新建
conn.set('key6', '123',xx=True)
  • getset
conn.set('name','123')
print(conn.get('name'))	# 123
print(conn.getset('name','456')) # 123
print(conn.get('name')) # 456
  • getrange
conn.set('name','123')
print(conn.get('name'))
print(conn.getrange('name',1,2))
  • mset和mget
conn.mset({'name1':'张三','name2':'李四','name3':'陈五'})
names = conn.mget(['name1','name2','name3'])
print(names)
# ['张三', '李四', '陈五']
  • getrange和setrange
conn.set('key1','111')  # key1 = 111
conn.setrange('key1',2,'666')   # key1 = 11666

conn.set('key2','123')  # key2 = 123
print(conn.getrange('key2',1,2))    # key2 = 23
  • strlen
conn.set('key1','111')
print(conn.strlen('key1'))  # 3
  • incr
conn.set('key1','1')
print(conn.incr('key1'))  # key1 = 2
  • incrbyfloat
conn.set('float_key', '1.5') # float_key = 1.5

# 增加3.5
new_value = conn.incrbyfloat('float_key', 3.5)
print(new_value)  # 5.0

Hash操作

命令描述
hset(name, key, value)设置指定字段的值
hget(name, key)获取指定字段的值
hmget(name, keys, *args)获取一个或多个字段的值
hgetall(name)获取所有字段和值
hlen(name)获取字段数量
hkeys(name)获取所有字段
hvals(name)获取所有值
hexists(name, key)检查字段是否存在
hdel(name, *keys)删除一个或多个字段
hincrby(name, key, amount=1)字段值递增指定量
hincrbyfloat(name, key, amount=1.0)字段值递增指定浮点数量
hscan(name, cursor=0, match=None, count=None)迭代哈希表中的键值对,cursor:游标位置 默认0count:最大返回数match:匹配模式
hscan_iter(name, match=None, count=None)迭代哈希表中的键值对(返回迭代器)
  • hset
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
  • hget
conn.hset('A1','name','张三')
print(conn.hmget('A1','name'))
# ['张三']
  • hmget
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hmget('A1',['name','age']))
# ['张三', '18']
  • hgetall
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hgetall('A1'))
# {'name': '张三', 'age': '18'}
  • hlen
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hlen('A1'))
# 2
  • hkeys
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hkeys('A1'))
# ['name', 'age']
  • hvals
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hvals('A1'))
# ['张三', '18']
  • hexists
conn.hset('A1','name','张三')
print(conn.hexists('A1','name')) # True
print(conn.hexists('A1','age'))  # False
  • hdel
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
conn.hdel('A1','name')
print(conn.hgetall('A1'))
# {'age': '18'}
  • hincrby
conn.hset('A1','age','18')
print(conn.hincrby('A1','age'))
# 19
  • hincrbyfloat
conn.hset('A1','age','18.1')
print(conn.hincrbyfloat('A1','age',0.2))
# 18.3
  • hscan
for i in range(10):
    conn.hset('鸡蛋盒',i,f'鸡蛋{i}')
print(conn.hscan('鸡蛋盒'))
# (0, {'0': '鸡蛋0', '1': '鸡蛋1', '2': '鸡蛋2', '3': '鸡蛋3', '4': '鸡蛋4', '5': '鸡蛋5', '6': '鸡蛋6', '7': '鸡蛋7', '8': '鸡蛋8', '9': '鸡蛋9'})
  • hscan_iter
for item in conn.hscan_iter('鸡蛋盒',count=10):
    print(item) # ('0', '鸡蛋0').......

List操作

命令描述
lpush(name, values)从列表左侧(头部)插入值
rpush(name, values)从列表右侧(尾部)插入值
lpop(name)从列表左侧(头部)移除并返回元素
rpop(name)从列表右侧(尾部)移除并返回元素
lpushx(name, value)仅当列表存在时,在列表左侧插入值
rpushx(name, value)仅当列表存在时,在列表右侧插入值
llen(name)获取列表长度
linsert(name, where, refvalue, value)在指定值前或后插入新值
lset(name, index, value)设置指定索引位置的值
lrem(name, value, num)移除列表中与给定值相等的元素
lindex(name, index)获取指定索引位置的元素值
lrange(name, start, end)获取指定范围内的元素值列表
ltrim(name, start, end)保留指定范围内的元素,移除其他元素
rpoplpush(src, dst)从一个列表右侧弹出元素并插入另一个列表左侧
blpop(keys, timeout)从多个列表的左侧弹出元素(阻塞式)timeout:阻塞超时时间
brpop(keys, timeout)从多个列表的右侧弹出元素(阻塞式)
brpoplpush(src, dst, timeout=0)从一个列表右侧弹出元素并插入另一个列表左侧(阻塞式)
  • lpush和rpush
conn.lpush('names','张三')
conn.lpush('names','李四')
# 李四 张三

conn.rpush('names','张三')
conn.rpush('names','李四')
# 张三 李四
  • lpop和rpop
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lpop('names'))   # 李四

conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.rpop('names'))   # 张三
  • lpushx和rpushx
conn.lpush('names','张三')
conn.lpushx('names','李四')
print(conn.lpop('names'))   # 李四

conn.lpushx('names','李四') # names为空,不会存入李四
conn.lpush('names','张三')
print(conn.rpop('names'))   # 张三
  • llen
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.llen('names'))   # 2
  • linsert
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.linsert('names','before','张三','陈五'))

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 李四 陈五 张三

conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.linsert('names','after','张三','陈五'))

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 李四 张三 陈五
  • lset
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lset('names','0','陈五')

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 陈五 张三
  • lrem
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lrem('names','0','李四')

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 张三
  • lindex
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lindex('names','0'))
# 李四
  • lrange
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lrange('names','0','100'))
# 超过索引不取,因此输出:['李四', '张三']
  • ltrim
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
print(conn.ltrim('names','0','1'))

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 陈五 李四
  • rpoplpush
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.rpoplpush('names','names2')

for i in range(conn.llen('names2')):
    print(conn.lpop('names2')) # 张三
# 此时张三在列表names2中
print('---------')
for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 陈五 李四
  • blpop和brpop
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.blpop('names')
conn.brpop('names')

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 李四
  • brpoplpush
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.brpoplpush('names','names2')

for i in range(conn.llen('names')):
    print(conn.lpop('names'))
# 陈五 李四
print('-----------')
for i in range(conn.llen('names2')):
    print(conn.lpop('names2'))
# 张三
  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值