Python访问Redis的详细操作


Posted in Python onJune 26, 2021

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 对应的值

对比

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操作才执行

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))

以上就是Python访问Redis的详细内容,更多关于Python访问Redis的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
用Python输出一个杨辉三角的例子
Jun 13 Python
Django中使用group_by的方法
May 26 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
Python做简单的字符串匹配详解
Mar 21 Python
详解django中自定义标签和过滤器
Jul 03 Python
python和opencv实现抠图
Jul 18 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
WxPython实现无边框界面
Nov 18 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
一文搞懂python异常处理、模块与包
Python实战之OpenCV实现猫脸检测
Python爬虫基础之简单说一下scrapy的框架结构
Python爬虫基础之初次使用scrapy爬虫实例
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
You might like
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
短信提示使用 特效
2007/01/19 Javascript
List Installed Hot Fixes
2007/06/12 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
p5.js入门教程之键盘交互
2018/03/19 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python中的colorlog库使用详解
2019/07/05 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python 制作简单的音乐播放器
2020/11/25 Python
python代码实现图书管理系统
2020/11/30 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
开工仪式策划方案
2014/05/23 职场文书
群众路线专项整治方案
2014/10/27 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
python计算列表元素与乘积详情
2022/08/05 Python