Python访问Redis的详细操作
作者:傍ྂ离ྂ 发布时间:2022-03-13 13:22:25
1.连接
测试连接是否成功:
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 的子类,用于向后兼用旧版本。
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 实例共享一个连接池。
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 对应的值
对比
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操作才执行
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 获取单个值
v = r.get('name')
print(v)
3.String mset 设置多个键值
mset(*args, **kwargs)
name_dict = {
'name_1' : 'zhangsan',
'name_2' : 'lisi'
}
r.mset(name_dict)
4.String mget 获取多个值
mget(keys, *args)
r.mget('name_1', 'name_2')
5.String setrange 根据索引修改某个键的value值
setrange(name, offset, value)
返回值为:修改后的字符串长度
name:键,所给不存在时自动添加
offset:偏移量,以0开始
value:修改的字符或字符串,字符串时以offset向后顺延
length = r.setrange('name_2', 1, 'zhihu')
print(length)
6.String getrange 根据索引获取某个键的部分value值
若所给的键不存在时,返回空值 b''
getrange(key, start, end)
v = r.getrange('name_1', 0, 2)
7.String strlen 获取value的长度
strlen(name)
所给的键不存在时,返回值为0
length = r.strlen('name_2')
8.String append value后面追加
append(key, value)
若所给的键不存在,则设置新值,返回值为修改后的字符串的长度
length = r.append('name_1', '666')
3.列表
1.lpush(key , value) 将一个或多个值 value 插入到列表 key 的表头
r.lpush('list', 'a', 'b', 'c', 'd')
2.rpush(key , value) 将一个或多个值 value 插入到列表 key 的表尾
r.rpush('rlist', 'a', 'b', 'c', 'd')
3.llen key 返回列表 key 的长度
r.llen('list')
4.lrem key count value 根据参数 count 的值,移除列表中与参数 value 相等的元素
r.lrem('list',2, 'b')
4.集合
1.sadd(name,values) 向对应的集合中添加元素
r.sadd("set1", 33, 44, 55, 66)
2.scard(name)
获取name对应的集合中元素个数
r.scard('set1')
3.srandmember key [count] 返回集合中的 1 或 count 个随机元素
r.srandmember("set1")
4.spop key 移除并返回集合中的一个随机元素获取name对应的集合中元素个数
r.spop('set1')
5.smove source destination member 将 member 元素从 source 集合移动到 destination 集合
r.smove('set1', 'set2', 66)
5.哈希
1.hmset key field value [field value …]同时将多个 field-value (域-值)对设置到哈希表 key 中
r.hmset('zhangsan',{'name':'zhangsan','age':20,'tel':123456})
2.Hash hmget 获取哈希中多个键值对
hmget(name, keys, *args)
返回值:值的列表 list 形如: [‘1', ‘123'] <class ‘list'>
r.hmget('zhangsan', ['sex', 'tel'])
3.Hash hget 获取指定key的值
hget(name, key)
r.hget('zhangsan', 'tel')
4.Hash hgetall 获取哈希中所有的键值对
hgetall(name)
返回值:dict类型
r.hgetall('zhangsan')
6.有序集合
1.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素时需指定元素的分数
返回值:返回添加的个数
r.zadd('myzset', {'a': 3, 'b': 4,'c':5})
r.zadd('myzset', 'a', 3, 'b', 4,'c',5}) #不同版本
2.Zset zcard 返回有序集合中元素个数
zcard(name)
v = r.zcard('myzset')
3.Zset zscore 返回有序集合中指定某个值的分数
zscore(name, value)
返回值:float 类型的分数;形如: -5.0 <class ‘float'>
v = r.zscore('myzset', ‘a')
4.Zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;
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类型
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))
来源:https://blog.csdn.net/BangLiSang/article/details/118220904
猜你喜欢
- 相关介绍Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动
- 上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫
- 阿里云 视频直播 配置 及 PHP-SDK 接入教程个人感觉,阿里的文档比微信的要坑很多…微信最多是有些比较重要的东西放到比较不起眼、比较难
- 在利用python进行flask等开发过程中经常需要配置虚拟环境以方便针对不同的项目需求配置不同的生产环境。在python3.3之前,需要利
- import pdbdef pdb_test(arg): for i in range(arg):&nb
- 1.字符串处理将字符串中的数字替换成其两倍的值,例如:修改前:"AS7G123m (d)F77k"修改后:"A
- 作为一个非设计出生的研究思路偏向的设计师,带着少了设计师自恋和自怜的眼光,我记下最近一年来感受到的交互设计师的尴尬。交互设计师就是出界面的,
- 我们以MNIST手写数字识别为例import numpy as npfrom keras.datasets import mnistfrom
- 程序一:负责从字典中随机提取数据,写入一个新文件。(1.php) <?php /* 从字典文件中提取随机值 */
- 我设了两个SESSION:SESSION(A1),SESSION(A2),然后我现在想结束其中一个SESSION(如:ESEEION(A1)
- 换脸!这段时间,deepfakes搞得火热,比方说把《射雕英雄传》里的朱茵换成了杨幂,看下面的图!毫无违和感!其实早在之前,基于AI换脸的技
- 在进行接口自动化测试时,有好多接口都基于登陆接口的响应值来关联进行操作的,在次之前试了很多方法,都没有成功,其实很简单用session来做。
- openpyxl模块离线安装背景:公司的防火墙限制,无法使用pip在线安装,开墙的审批流程较为繁琐,故采取离线安装的方式。步骤如下:1、官网
- 本文实现了用Python和OpenCV配合,调用本地摄像头采集视频,基本上函数的话看opencv的官方文档就Ok了(The OpenCV R
- 看代码吧~import numpy as npa = np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print
- 至于对好广告的评判,不同的人有不同的标准,一些人认为那些打动人、有新意、有共鸣的广告是好广告,另一些人的观点则是:观众喜欢与否,不是广告好与
- 写任何编程代码,不同的开发者都会有不同的见解。但参考一下总是好的,下面是来自 Javascript Toolbox 发布的 14条最佳JS代
- 在最近的一次调试中,出现如下错误~·错误类型:ADODB.Recordset (0x800A0E7D)连接无法用于执行此操作。在此上下文中它
- 在处理数据的时候,因为没有及时的去重,所以需要重新对生成txt进行去重。可是一个文件夹下有很多txt,总不可能一个一个去操作,这样效率太低了
- 介绍我们可以通过for循环来迭代list、tuple、dict、set、字符串,dict比较特殊dict的存储不是连续的,所以迭代(遍历)出