通过python操作redis(windows)

注意在连接之前要确保 redis 服务已经安装。

更多的安装信息请查看:https://blog.csdn.net/sinat_20471177/article/details/132042779?spm=1001.2014.3001.5501

redis 模块

Python 要使用 redis,需要先安装 redis 模块。如果要做数据导入/导出操作的话,还需要安装RedisDump。

Redis 和 StrictRedis

RedisPy库提供两个类RedisStrictRedis来实现Redis的命令操作。

StrictRedis实现了绝大部分官方的命令,参数也一一对应,比如set()方法就对应Redis命令的set方法。而RedisStrictRedis的子类,它的主要功能是用于向后兼容旧版本库里的几个方法。为了做兼容,它将方法做了改写,比如lrem()方法就将valuenum参数的位置互换,这和Redis命令行的命令参数不一致。

官方推荐使用StrictRedis,所以我们也用StrictRedis类的相关方法作演示。

连接Redis

from redis import StrictRedisredis = StrictRedis(host='localhost', port=6379, db=0,password=None)#创建连接
redis.set('name','test')
print(redis.get('name'))

这里我们传入了Redis的地址、运行端口、使用的数据库和密码信息。在默认不传的情况下,这4个参数分别为localhost63790None。首先声明了一个StrictRedis对象,接下来调用set()方法,设置一个键值对,然后将其获取并打印。

运行结果如下:

或者使用一下语句,也能返回同样的结果。

redis.get('name')

这说明我们连接成功,并可以执行set()get()操作了。

ConnectionPool 连接池

还可以使用ConnectionPool来连接,示例如下:

from redis import StrictRedis, ConnectionPoolpool = ConnectionPool(host='localhost', port=6379, db=0, password=None)
redis = StrictRedis(connection_pool=pool)

这样的连接效果是一样的。StrictRedis内其实就是用hostport等参数又构造了一个ConnectionPool,所以直接将ConnectionPool当作参数传给StrictRedis也一样。

另外,ConnectionPool还支持通过URL来构建。URL的格式支持有如下3种:

redis://[:password]@host:port/db
rediss://[:password]@host:port/db
unix://[:password]@/path/to/socket.sock?db=db

键操作

基本命令 string字符串

下表总结了键的一些字符串判断和操作方法。

方法

作用

参数说明

示例

示例说明

示例结果

set(name, value)

给数据库中键为name的string赋予值value

name: 键名;value: 值

redis.set('name', 'Bob')

给name这个键的value赋值为Bob

True

get(name)

返回数据库中键为name的string的value

name:键名

redis.get('name')

返回name这个键的value

b'Bob'

getset(name, value)

给数据库中键为name的string赋予值value并返回上次的value

name:键名;value:新值

redis.getset('name', 'Mike')

赋值name为Mike并得到上次的value

b'Bob'

mget(keys, *args)

返回多个键对应的value

keys:键的列表

redis.mget(['name', 'nickname'])

返回name和nickname的value

[b'Mike', b'Miker']

setnx(name, value)

如果不存在这个键值对,则更新value,否则不变

name:键名

redis.setnx('newname', 'James')

如果newname这个键不存在,则设置值为James

第一次运行结果是True,第二次运行结果是False

setex(name, time, value)

设置可以对应的值为string类型的value,并指定此键值对应的有效期

name: 键名;time: 有效期; value:值

redis.setex('name', 1, 'James')

将name这个键的值设为James,有效期为1秒

True

setrange(name, offset, value)

设置指定键的value值的子字符串

name:键名;offset:偏移量;value:值

redis.set('name', 'Hello') redis.setrange('name', 6, 'World')

设置name为Hello字符串,并在index为6的位置补World

11,修改后的字符串长度

mset(mapping)

批量赋值

mapping:字典

redis.mset({'name1': 'Durant', 'name2': 'James'})

将name1设为Durant,name2设为James

True

msetnx(mapping)

键均不存在时才批量赋值

mapping:字典

redis.msetnx({'name3': 'Smith', 'name4': 'Curry'})

在name3和name4均不存在的情况下才设置二者值

True

incr(name, amount=1)

键为name的value增值操作,默认为1,键不存在则被创建并设为amount

name:键名;amount:增长的值

redis.incr('age', 1)

age对应的值增1,若不存在,则会创建并设置为1

1,即修改后的值

decr(name, amount=1)

键为name的value减值操作,默认为1,键不存在则被创建并将value设置为-amount

name:键名; amount:减少的值

redis.decr('age', 1)

age对应的值减1,若不存在,则会创建并设置为-1

-1,即修改后的值

append(key, value)

键为name的string的值附加value

key:键名

redis.append('nickname', 'OK')

向键为nickname的值后追加OK

13,即修改后的字符串长度

substr(name, start, end=-1)

返回键为name的string的子串

name:键名;start:起始索引;end:终止索引,默认为-1,表示截取到末尾

redis.substr('name', 1, 4)

返回键为name的值的字符串,截取索引为1~4的字符

b'ello'

getrange(key, start, end)

获取键的value值从start到end的子字符串

key:键名;start:起始索引;end:终止索引

redis.getrange('name', 1, 4)

返回键为name的值的字符串,截取索引为1~4的字符

b'ello'

应用示例

假定我们对CSDN博文需要记录点击次数。例如每个文章都要记录点击次数,而点击次数比评论的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了。

当redis服务器启动时,可以从关系数据库读入点击数的初始值(某篇文章被访问了10000次)

redis.set("visit:blog.csdn.net/sinat_20471177/article:totals", 10000)
redis.get("visit:blog.csdn.net/sinat_20471177/article:totals")

每当有一个页面点击,则使用INCR增加点击数即可。

redis.incr("visit:blog.csdn.net/sinat_20471177/article:totals")
redis.incr("visit:blog.csdn.net/sinat_20471177/article:totals")

访问两次后:

基本命令 hash散列

方法

作用

参数说明

示例

示例说明

示例结果

hset(name, key, value)

向键为name的散列表中添加映射

name:键名;key:映射键名;value:映射键值

hset('price', 'cake', 5)

向键为price的散列表中添加映射关系,cake的值为5

1,即添加的映射个数

hsetnx(name, key, value)

如果映射键名不存在,则向键为name的散列表中添加映射

name:键名;key:映射键名;value:映射键值

hsetnx('price', 'book', 6)

向键为price的散列表中添加映射关系,book的值为6

1,即添加的映射个数

hget(name, key)

返回键为name的散列表中key对应的值

name:键名;key:映射键名

redis.hget('price', 'cake')

获取键为price的散列表中键名为cake的值

5

hmget(name, keys, *args)

返回键为name的散列表中各个键对应的值

name:键名;keys:映射键名列表

redis.hmget('price', ['apple', 'orange'])

获取键为price的散列表中apple和orange的值

[b'3', b'7']

hmset(name, mapping)

向键为name的散列表中批量添加映射

name:键名;mapping:映射字典

redis.hmset('price', {'banana': 2, 'pear': 6})

向键为price的散列表中批量添加映射

True

hincrby(name, key, amount=1)

将键为name的散列表中映射的值增加amount

name:键名;key:映射键名;amount:增长量

redis.hincrby('price', 'apple', 3)

key为price的散列表中apple的值增加3

6,修改后的值

hexists(name, key)

键为name的散列表中是否存在键名为键的映射

name:键名;key:映射键名

redis.hexists('price', 'banana')

键为price的散列表中banana的值是否存在

True

hdel(name, *keys)

在键为name的散列表中,删除键名为键的映射

name:键名;keys:映射键名

redis.hdel('price', 'banana')

从键为price的散列表中删除键名为banana的映射

True

hlen(name)

从键为name的散列表中获取映射个数

name: 键名

redis.hlen('price')

从键为price的散列表中获取映射个数

6

hkeys(name)

从键为name的散列表中获取所有映射键名

name:键名

redis.hkeys('price')

从键为price的散列表中获取所有映射键名

[b'cake', b'book', b'banana', b'pear']

hvals(name)

从键为name的散列表中获取所有映射键值

name:键名

redis.hvals('price')

从键为price的散列表中获取所有映射键值

[b'5', b'6', b'2', b'6']

hgetall(name)

从键为name的散列表中获取所有映射键值对

name:键名

redis.hgetall('price')

从键为price的散列表中获取所有映射键值对

{b'cake': b'5', b'book': b'6', b'orange': b'7', b'pear': b'6'}

hset单个增加\修改

hset(name, key, value)

向键为name的散列表中添加映射(key:value)(不存在,则创建;否则,修改)

例如

#redis是前面创建的链接
redis.hset("hash1", "k1", "v1")
redis.hset("hash1", "k2", "v2")
print(redis.hkeys("hash1")) # 取hash中所有的key
print(redis.hget("hash1", "k1"))    # 单个取hash的key对应的值
print(redis.hmget("hash1", "k1", "k2")) # 多个取hash的key对应的值

返回的结果为:

hsetnx(name, key, value) 当name对应的hash中不存在当前key时则创建(相当于添加)

例如:

redis.hsetnx("hash1", "k2", "v3") #前面存在k2是没办法修改的, 只能新建
print(redis.hget("hash1", "k2"))

返回的结果为: 

 更多的操作请参考官方文档,或查看博文:https://blog.csdn.net/sinat_20471177/article/details/132043998?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/sinat_20471177/article/details/132043998?spm=1001.2014.3001.5501

 参考:

1.Python redis 使用介绍 | 菜鸟教程 (runoob.com)

2.Python操作Redis,你要的都在这了! - John-Python - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

34、matlab输入命令汇总

1、ans:最近计算的答案 代码示例1 12ans 3 代码示例2 Brand(7)B 列 1 至 60.7060 0.3171 0.1869 0.6797 0.5853 0.95930.0318 0.9502 0.4898 0.6551 0.2238 0.54720.2769 0.0344 0.4456 0.1626 0.7513 0.13860.0462 0.4387…

[Vue3:组件通信)子组件props接收和watch监听,emit发送父组件 (添加修改设置成绩,添加、删除选课记录)

文章目录 一:系统功能:设置成绩(添加或修改)交互逻辑:涉及页面 Page02.vue,ModalEdit.vue主页面Page.vue注入子页面,使用子页面标签属性主页面对子页面做通信,子页面ModalEdit接收参…

【安装笔记-20240610-Linux-免费域名服务之eu.org】

安装笔记-系列文章目录 安装笔记-20240610-Linux-免费域名服务之eu.org 文章目录 安装笔记-系列文章目录安装笔记-20240610-Linux-免费域名服务之eu.org 前言一、软件介绍名称:eu.org主页官方介绍 二、安装步骤测试版本:openwrt-23.05.3-x86-64注册填写…

基于机器学习和深度学习的NASA涡扇发动机剩余使用寿命预测(C-MAPSS数据集,Python代码,ipynb 文件)

以美国航空航天局提供的航空涡扇发动机退化数据集为研究对象,该数据集包含多台发动机从启动到失效期间多个运行周期的多源传感器时序状态监测数据,它们共同表征了发动机的性能退化情况。为减小计算成本,需要对原始多源传感器监测数据进行数据…

Java——方法详细介绍

一、方法调用机制 1、方法调用机制详细介绍 下面对方法调用在内存中的情况进行分析,以下面的代码为例: public class Test {public static void main(String[] args) {Person person new Person();person.name "张三";person.age 18;int…

【Linux文件篇】优化文件读写,加速数据处理策略——缓冲区

W...Y的主页 😊 代码仓库分享 💕 前言:我们已经复习了C语言中的接口,并且学习了许多文件系统调用,了解了文件描述符以及重定向。今天我们继续学习文件缓冲区的相关内容。 缓冲区 在学习C语言时,我们经常…

LabVIEW电池测试系统

1. 背景 随着电动汽车、可再生能源等领域的迅速发展,电池作为能源储存和释放的核心组件,其性能评估变得尤为重要。电池的充放电性能、容量、循环寿命等参数直接影响着设备的工作性能和使用寿命。因此,设计一套全面、准确的电池测试系统对于提…

技术前沿 |【大模型BLIP-2的多模态训练】

大模型BLIP-2的多模态训练 一、引言二、BLIP-2模型概述三、多模态训练成本问题四、冻结预训练好的视觉语言模型参数的优势五、冻结预训练好的视觉语言模型参数的方法 一、引言 随着人工智能技术的飞速发展,大型多模态模型如BLIP-2在多个领域取得了显著的成果。然而…

学生信息管理(C语言)

学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能&am…

[图解]建模相关的基础知识-07

1 00:00:04,710 --> 00:00:08,900 这是划分,下一个是有序对的概念 2 00:00:11,720 --> 00:00:13,800 我们知道集合是不分顺序的 3 00:00:15,090 --> 00:00:18,200 我们花括号来代表集合的话 4 00:00:18,210 --> 00:00:21,000 AB花括号等于BA花括号 …

2_1 Linux基础操作

2_1 Linux基础操作 文章目录 2_1 Linux基础操作0. 参考1. 装机后的一些小命令查看系统的信息2. 基础命令2.1 初识基本命令2.2 日期和时间 3. 帮助命令4. 关机、重启5. 设置主机名6. rm删除7. 软件包的管理RPM、 YUM8. IP知识9. 查看一些linux的信息10. 命令行快捷键11. 光盘挂载…

数据可视化——pyecharts库绘图

目录 官方文档 使用说明: 点击基本图表 可以点击你想要的图表 安装: 一些例图: 柱状图: 效果: 折线图: 效果: 环形图: 效果: 南丁格尔图(玫瑰图&am…

贪心算法06(leetcode738,968)

参考资料&#xff1a; https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 738. 单调递增的数字 题目描述&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。…

CTF-PWN-kernel-UAF

文章目录 参考slub 分配器kmem_cache_cpukmem_cache_node[ ]冻结和解冻分配释放 fork绑核Kmalloc flag和slub隔离CISCN - 2017 - babydriver检查babtdriver_initstruct cdevalloc_chrdev_regioncdev_initownercdev_add_class_createdevice_create babyopenbabyreleasebabyreadb…

【C++】STL中list的使用

前言&#xff1a;在前面学习的 过程中我们学习了STL中的string,vector&#xff0c;今天我们来进一步的学习STL中的list的使用方法。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23;学习 &#x1f448; &#x1f4af;代…

全志D1s软件入门之Tina Linux烧写教程

烧写 Tina Linux 烧写&#xff0c;即将编译打包好的固件下载到设备 烧写方式简介 全志平台为开发者提供了多种多样的烧写方式和烧写工具&#xff1a; &#xff08;1&#xff09; PhoenixSuit&#xff1a;基于Windows的系统的烧写工具&#xff0c;是最常用的烧写工具&#x…

树莓派4b安装宝塔面板

1、打开命令窗口&#xff0c;执行如下命令 #更新 sudo apt-get update sudo apt-get upgrade #切换root权限 sudo su root #安装宝塔面板 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh安装过程有点久&#xff0c;会持…

01——生产监控平台——WPF

生产监控平台—— 一、介绍 VS2022 .net core(net6版本&#xff09; 1、文件夹&#xff1a;MVVM /静态资源&#xff08;图片、字体等&#xff09; 、用户空间、资源字典等。 2、图片资源库&#xff1a; https://www.iconfont.cn/ ; 1.资源字典Dictionary 1、…

C++系统编程篇——linux编译器 gcc/g++(链接动静态库)

linux编译器-gcc/g &#xff08;1&#xff09;g安装&#xff08;gcc一般自带&#xff0c;g需要下载&#xff09; sudo yum install -y gcc-c g --version gcc用于编译C语言代码&#xff0c;g用于编译C代码 &#xff08;2&#xff09;程序翻译过程 选项“-o”是指目标文件…

Python的return和yield,哪个是你的菜?

目录 1、return基础介绍 &#x1f4da; 1.1 return用途&#xff1a;数据返回 1.2 return执行&#xff1a;函数终止 1.3 return深入&#xff1a;无返回值情况 2、yield核心概念 &#x1f347; 2.1 yield与迭代器 2.2 生成器函数构建 2.3 yield的暂停与续行特性 3、retur…