脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python访问Redis的详细操作

Python访问Redis的详细操作

2021-12-09 00:16傍ྂ离ྂ Python

redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本,接下来通过本文给大家分享Python访问Redis的详细操作,需要的朋友参考下吧

1.连接

测试连接是否成功:

?
1
2
3
4
5
import redis
r = redis.Redis(host='192.168.136.102', port=6379, db=0,decode_responses=True)
r.set('foo', 'bar')
print(r.get('foo'))
del r

redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。

redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。

?
1
2
3
4
5
6
7
import redis   # 导入redis 模块
r = redis.Redis(host='192.168.136.102', port=6379, decode_responses=True)
r.set('name', 'runoob'# 设置 name 对应的值
print(r['name'])
print(r.get('name'))  # 取出键 name 对应的值
print(type(r.get('name')))  # 查看类型
del r

连接池

redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。

?
1
2
3
4
5
import redis    # 导入redis 模块
pool = redis.ConnectionPool(host='192.168.136.102', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
r.set('name', 'runoob'# 设置 name 对应的值
print(r.get('name'))  # 取出键 name 对应的值

对比

Python访问Redis的详细操作

2.String字符串

String使用场景:
1、用redis当缓存层来加速读写性能降低后端的压力
2、计数器
3、时间内限制请求次数

1.String set 设置单个键值
set(name, value, ex=None, px=None, nx=False, xx=False)
ex:过期时间(秒),时间到了后redis会自动删除
px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,当前set操作才执行

?
1
2
3
r.set('name', 'zhangsan',ex=3
r.set('name', 'lisi',nx=True#如果设置为True,则只有name不存在时,当前set操作才执行
r.set('name', 'wangwu',xx=True#如果设置为True,则只有name存在时,当前set操作才执行

2.String get 获取单个值

?
1
2
v = r.get('name')
print(v)

3.String mset 设置多个键值
mset(*args, **kwargs)

?
1
2
3
4
5
name_dict = {
    'name_1' : 'zhangsan',
    'name_2' : 'lisi'
}
r.mset(name_dict)

4.String mget 获取多个值

?
1
2
mget(keys, *args)
r.mget('name_1', 'name_2')

5.String setrange 根据索引修改某个键的value值
setrange(name, offset, value)
返回值为:修改后的字符串长度
name:键,所给不存在时自动添加
offset:偏移量,以0开始
value:修改的字符或字符串,字符串时以offset向后顺延

?
1
2
length = r.setrange('name_2', 1, 'zhihu')
print(length)

6.String getrange 根据索引获取某个键的部分value值
若所给的键不存在时,返回空值 b''
getrange(key, start, end)

?
1
v = r.getrange('name_1', 0, 2)

7.String strlen 获取value的长度
strlen(name)
所给的键不存在时,返回值为0

?
1
length = r.strlen('name_2')

8.String append value后面追加
append(key, value)
若所给的键不存在,则设置新值,返回值为修改后的字符串的长度

?
1
length = r.append('name_1', '666')

3.列表

1.lpush(key , value) 将一个或多个值 value 插入到列表 key 的表头

?
1
r.lpush('list', 'a', 'b', 'c', 'd')

2.rpush(key , value) 将一个或多个值 value 插入到列表 key 的表尾

?
1
r.rpush('rlist', 'a', 'b', 'c', 'd')

3.llen key 返回列表 key 的长度

?
1
r.llen('list')

4.lrem key count value 根据参数 count 的值,移除列表中与参数 value 相等的元素

?
1
r.lrem('list',2, 'b')

4.集合

1.sadd(name,values) 向对应的集合中添加元素

?
1
r.sadd("set1", 33, 44, 55, 66)

2.scard(name)
获取name对应的集合中元素个数

?
1
r.scard('set1')

3.srandmember key [count] 返回集合中的 1 或 count 个随机元素

?
1
r.srandmember("set1")

4.spop key 移除并返回集合中的一个随机元素获取name对应的集合中元素个数

?
1
r.spop('set1')

5.smove source destination member 将 member 元素从 source 集合移动到 destination 集合

?
1
r.smove('set1', 'set2', 66)

5.哈希

1.hmset key field value [field value …]同时将多个 field-value (域-值)对设置到哈希表 key 中

?
1
r.hmset('zhangsan',{'name':'zhangsan','age':20,'tel':123456})

2.Hash hmget 获取哈希中多个键值对

?
1
hmget(name, keys, *args)

返回值:值的列表 list 形如: [‘1', ‘123'] <class ‘list'>

?
1
r.hmget('zhangsan', ['sex', 'tel'])

3.Hash hget 获取指定key的值
hget(name, key)

?
1
r.hget('zhangsan', 'tel')

4.Hash hgetall 获取哈希中所有的键值对
hgetall(name)
返回值:dict类型

?
1
r.hgetall('zhangsan')

6.有序集合

1.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素时需指定元素的分数
返回值:返回添加的个数

?
1
2
r.zadd('myzset', {'a': 3, 'b': 4,'c':5})
r.zadd('myzset', 'a', 3, 'b', 4,'c',5})  #不同版本

2.Zset zcard 返回有序集合中元素个数
zcard(name)

?
1
v = r.zcard('myzset')

3.Zset zscore 返回有序集合中指定某个值的分数
zscore(name, value)
返回值:float 类型的分数;形如: -5.0 <class ‘float'>

?
1
v = r.zscore('myzset', ‘a')

4.Zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;

?
1
v = r.zincrby('myzset',1,'a')

5.Zset zrevrange 返回有序集合分数排序的一段数据
zrevrange(name, start, end, withscores=False, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分数)
end:有序集合索引结束位置(非分数)
withscores:是否获取元素的分数,默认只获取元素的值
score_cast_func:对分数进行数据转换的函数
返回值:list类型

?
1
2
3
4
5
r.zadd('myzset1', {'a': 4, 'b': 2,'c':3,'d':6,'e':1,'f':9})
def double(num):
    return float(num)*float(num)
print(r.zrevrange('myzset1',0,3,withscores=True))
print(r.zrevrange('myzset1',0,3,withscores=True,score_cast_func=double))

以上就是Python访问Redis的详细内容,更多关于Python访问Redis的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/BangLiSang/article/details/118220904

延伸 · 阅读

精彩推荐