zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库

7f7a7c4e1f5bc72184b6ac8826861846.png
想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送
同时发布《【Redis数据结构 1序】1使用redis-py操作Redis数据库》

本文依旧会对学习内容进行拆分,建议阅读时间基本保持10分钟内,想学习之前章节内容点击《你不了解的Redis》阅读所有章节内容。Redis数据结构系列是对Redis常用的String、List、Set、Sorted Set、Hashe和Stream6种数据结构进行介绍,并使用redis-py进行实践操作。

Redis一个高性能的key-value数据库

Redis的出现,很大程度补偿了Memcached这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。

Redis和Memcached类似,它支持存储的value类型相对更多,Values常用的数据结构有String、List、Set、Sorted Set、Hashe、Stream 6种,当然不同类型有不同的特性,操作命令是不尽相同的。

redis-py是Python中操作Redis数据库的常用模块,模块中命令函数基本上是与原命令命名一致,子命令都是作为命令的参数使用。

例如: SET命令

语法格式 :

SET key value [EX seconds] [PX milliseconds] [NX|XX]

对应的函数是:

set(self, name, value, ex=None, px=None, nx=False, xx=False, keepttl=False)注:keepttl 为Redis 6.0 的特性,可以暂不考虑注:模块的execute_command是实际调用原命令的函数我们会结合python的redis模块对这6种数据结构的操作进行讲解,方便加深记忆。

Redis命令命名有以下特点:

  • 命令以S开头的为集合操作命令
  • 命令以Z开头的为有序集合操作命令
  • 命令以H开头的为哈希集操作命令
  • 命令以X开头的为流操作命令

例如:

  • INCRBY是字符串类型原子递增的操作命令
  • ZINCRBY是有序集合类型的分数(权值)原子递增的操作命令
  • HINCRBY是哈希集类型指定字段的数值的原子递增的操作命令

1 Redis Server

Windows 下载 Redis-x64-3.0.501.zip 解压,管理员权限使用cmd切换到解压后的目录下:

  • 手动指定配置文件启动:redis-server.exe redis.windows.conf
  • 也可以直接双击redis-server.exe启动
  • 安装服务:redis-server.exe --service-install redis.windows.conf
  • 卸载服务:redis-server --service-uninstall
  • 开启服务:redis-server --service-start
  • 停止服务:redis-server --service-stop

配置文件 redis.windows.conf

  • databases 可以设置db的数量,是大于0的任意整数,默认16
  • port 可以设置端口,默认6379
  • maxclients 设置最大连接数,默认10000
  • requirepass 设置连接密码

启动后是这样的:

3f3b4bf9e16850937e92aa82b400320f.png

注:建议安装RedisDesktopManager帮助学习

2 Python环境

redis-py 2.X 和 redis-py 3.0的部分区别??

1、数据库连接方式不同

在redis-py 2.X 中StrictRedis用于实现大部分官方的命令,Redis用于向后兼用旧版本,官方建议使用StrictRedis。

在redis-py 3.0 中StrictRedis只是Redis的一个别名,建议使用Redis。

2、数值类型不同

redis-py 2.X 可以接收任何类型的输入并强制转换为字符串类型。

redis-py 3.0 仅接受用户数据作为字节、字符串、数字(int,long和float), 其他类型将引发DataError异常。

在2.x中,当用户输入bool值或者None值是结果就不是预期的了,会强制转换为“True”、“False”和“None”的字符串,这会导致各种隐藏错误类型。

3、参数不同

SETEX、LREM、TTL和PTTL命令的参数顺序发生变化。

MSET、MSETNX和ZADD命令的参数结构发生变化。

注:后文中的所有redis-py都指代redis-py3.0

pip install redis==3.5.1

redis-py 两种连接方式

redis.Redisredis.StrictRedis

正如上面提到的 StrictRedis只是Redis的一个别名,建议使用Redis。

redis-py 连接池

redis.ConnectionPool

redis-py 使用连接池来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。

redis-py 管道

redis.Pipelines

redis-py 使用管道在单个请求中将多个命令缓冲到服务器,可以理解为数据库事务。

可以通过减少客户机和服务器之间来回传输的TCP数据包的数量来提高性能。

也可以减少因为客户端宕机,导致的一个连续操作没有完成而产生的异常。

pipe = r.pipeline()
pipe.x 
...
pipe.execute()

Hello World

我们创建分别创建user:1000:message、user:1001:message、user_1002_message三个key,都保存字符串 Hello World 并读取它们。

# coding=gbk
# 导入redis 模块
import redisredis_pool = redis.ConnectionPool(host='127.0.0.1',port=6379,db=0,password='cbs123',decode_responses=True
)r = redis.Redis(connection_pool=redis_pool)
sr = redis.StrictRedis(connection_pool=redis_pool)# 将键key设定为指定的"字符串"值
r.set("user:1000:message", "Hello World", ex=100)
sr.set("user:1001:message", "Hello World")
sr.set("user:1004:message", "Hello World", px=10000)
sr.set("user_1002_message", "Hello World")# 获取key对应的数值
r.get("user:1000:message")
r.get("user:1001:message")
r.get("user_1002_message")
"""
> True
> True
> True
> Hello World
> Hello World
> Hello World
"""

我们可以看到key在RedisDesktopManager使用冒号分隔的key是做了层次划分的。

493991aea02a97be236edf9e95ee9f6f.png

当我们要使用的redis做数据表的重要数据缓存时,user:1000:message 可以表示为 user表的id为1000的记录中message的数据。

存储的key不多的话还比较好维护,有上万个key在同一级命名空间中维护起来还是比较痛苦的。

key的定义规则是见名知意,格式统一即可。当然你也可以做其他格式的定义,你可以理解就好。

Redis通用命令

见源代码

> 表示返回结果

# 导入redis 模块
import redisredis_pool = redis.ConnectionPool(host='127.0.0.1',port=6379,db=0,password='cbs123',decode_responses=True
)r = redis.Redis(connection_pool=redis_pool)# 通用操作 不区分 数据类型的
# EXISTS key 检查key值是否存在,成功返回1,不成功返回0(key对应的值不存在)
r.exists("user:1000:message")
r.exists("user:1002:message")
"""
> 1
> 0
"""# TYPE key 返回key对应的值的类型,成功返回类型,不成功返回none(key对应的值不存在)
r.type("user:1000:message")
r.type("user:1002:message")
"""
> string
> none
"""# TTL key 返回key对应的剩余存活时间,成功返回时长单位秒,不成功返回-1 key值不存在返回-2
r.ttl("user:1000:message")
r.ttl("user:1001:message")
r.ttl("user:1004:message")
r.ttl("user:1002:message")
"""
> 100
> -1
> 10
> -2
"""# 设置超时时间,当时间到达后会被删除
# EXPIRE key seconds 超时时间,当时间到达后会被删除,单位秒
# PEXPIRE key milliseconds 超时时间,当时间到达后会被删除,单位毫秒
r.expire("user:1000:message", 10)
r.pexpire("user:1001:message", 10)
"""
> True
> False
> False
"""# PERSIST key 删除key对应的超时时间,成功返回True,不成功返回False(key对应的值不存在)
r.persist("user:1000:message")
r.persist("user:1001:message")
r.persist("user:1002:message")
"""
> True
> False
> False
"""# DEL key 删除key对应的值,成功返回1,不成功返回0(key对应的值不存在)
r.delete("user:1000:message")
r.delete("user:1002:message")
"""
> 1
> 0
"""

推荐阅读:

  • 让运维更简单的7种定时任务实现方式
  • 细品28岁程序员退休创业背后的可怕故事
  • Python行业就业现状
  • 基于Redis实现消息队列(上)
  • 基于Redis实现消息队列(中)
  • 基于Redis实现消息队列(下)

http://weixin.qq.com/r/Zy0TC5PE886Mrddo93h1 (二维码自动识别)

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

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

相关文章

Android studio的UI组件

1.文本框组件 掌管文字大小&#xff0c;文字来源&#xff0c;文字是否以行的形式显示&#xff0c;对齐方式居中 9patch图片拉伸不变形&#xff0c;需要放在drawable中 <TextViewandroid:layout_width"wrap_content"android:layout_height"wrap_content"…

visual paradigm 表示选择关系_知识获取的新挑战—远程监督关系抽取

本文主要介绍远程监督关系抽取任务上两个最新的工作。远程监督&#xff08;Distantly Supervised&#xff09;是关系抽取&#xff08;Relation Extraction&#xff09;的一种主要实现方法。关系抽取是指获得文本中的三元组&#xff08;triple&#xff09;&#xff0c;包括实体对…

Android studio的Activity详解

Activity就相当于我们的手机界面&#xff0c;里面包含着各个组件 Activity 的4种状态 运行状态&#xff1a;屏幕可视&#xff0c;且可以进行操作 暂停状态&#xff1a;返回退出的时候&#xff0c;询问是否退出运行状态&#xff0c;此时属于暂停状态 ------------------------…

arraylist 的扩容机制_每天都用ArrayList,你读过它的源码么?

作者&#xff1a;陌北有棵树&#xff0c;玩Java&#xff0c;架构师社区合伙人&#xff01;【一】关于扩容如果没有指定初始容量&#xff0c;则设置为10/** * Default initial capacity. */private static final int DEFAULT_CAPACITY 10;ArrayList的扩容比较简单&#xff0c;容…

JAVA入门级教学之(IDEA工具的快捷键和简单设置)

1.字体font file-->settings-->输入font-->设置字体样式以及字号大小 2.快速生成main方法 psvm 3.快速输出Systm.out.println(); sout 4.删除一行 ctrly 5.怎么运行 代码删右键run 或者点击右上角箭头 shiftf10(不同电脑可能不一样) 6.左侧窗口中的列表怎么展开…

java selenium_selenium 常见面试题以及答案(Java版)

1.怎么 判断元素是否存在&#xff1f;判断元素是否存在和是否出现不同&#xff0c; 判断是否存在意味着如果这个元素压根就不存在&#xff0c; 就会抛出NoSuchElementException这样就可以使用try catch&#xff0c;如果catch到NoSuchElementException 就返回false2.如何判断元素…

关于HTML的盒子的一些小问题

最近在开发的时候发现一个小问题&#xff0c;<DIV>我们很熟悉的一个盒子元素 关于他的描述 1.按照我们正常人的思维逻辑 编写好一个DIV盒子&#xff0c;然后再在盒子里面添加边框border、内边距padding、内容&#xff0c;这是我们的思维逻辑 但是DIV的编写会随着你添加…

语义网络分析图怎么做_怎么去分辨化工壶,光说可能大家还是会有疑惑,所以做了几个图...

网友们经常会拿一些壶出来&#xff0c;拍图给我看&#xff0c;问我会不会是化工壶&#xff0c;说到底&#xff0c;还是不放心自己手头上的紫砂壶&#xff0c;怕对自身健康造成影响&#xff0c;在这里&#xff0c;小编特地编辑这一段&#xff0c;教大家怎么去分辨化工壶&#xf…

CSS3特效之转化(transform)和过渡(transition)

CSS3特效之转化&#xff08;transform&#xff09;和过渡&#xff08;transition&#xff09; 在对动画深入之前&#xff0c;我们需要先了解它的一些特性&#xff0c;CSS3的转化&#xff08;transform&#xff09;和过渡&#xff08;transition&#xff09;。有人可能会有疑…

java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper

在讨论这个问题之前&#xff0c;我们先来看一个业务场景&#xff1a;系统A是一个电商系统&#xff0c;目前是一台机器部署&#xff0c;系统中有一个用户下订单的接口&#xff0c;但是用户下订单之前一定要去检查一下库存&#xff0c;确保库存足够了才会给用户下单。由于系统有一…

转 安卓解决 IDEA 下 struts.xml 中 extends=“struts-default“ 报红的问题

解决 IDEA 下 struts.xml 中 extends"struts-default" 报红的问题 现象 在IDEA中配置struts.xml时 extends"struts-default" 报红&#xff0c;配置拦截器时属性无预选项提示&#xff0c;也爆红。 struts.xml本身的配置并没有错误。 解决办法 CtrlShiftAl…

系统新模块增加需要哪些步骤_人工智能之父的问题解决策略:模块化

最近主题阅读马文明斯基(Marvin Minsky) 和西摩佩珀特(Seymour Papert)两位人工智能大师&#xff0c;关于思维&#xff0c;关于教育的书籍。其中马文被称为「人工智能之父」。两人都非常重视过程模块化。复杂问题的解决需要系统性&#xff0c;也很少一次做对&#xff0c;要通过…

小白学Linux(一:开门见山)

目录 1.javaEE&#xff0c;先搭环境再敲码 2.Linux大数据 3.Python 4. Linux的学习方向 5. Linux的进阶段位 6.下面开始进入实际操作环节 第一步.安装虚拟机软件 第二步.在虚拟机里面安装一个别人开发好的Centos系统&#xff08;可以在此系统中写Linux指令&#xff0c;…

vb net 模拟 ctrl+c_8款优秀的.NET开发工具,收藏了

NET是一个重要的应用程序开发平台&#xff0c;因为它安全、稳定、易于学习和实现。今天小编给就给大家介绍8款优秀的.NET开发工具&#xff0c;有需要的小伙伴可以收藏转发哦。1、ChocolatyChocolaty是一个Windows软件包管理器&#xff0c;这个工具的重要之处在于&#xff0c;它…

卸载后以前拍的视频会删除吗_可立拍!苹果自己的视频编辑App是一个被忽视的好工具...

手机预装应用总是不如三方产品&#xff1f;看到这个问题&#xff0c;你是不是会下意识反驳&#xff1a;iPhone自带 app 就很好用啊&#xff01;的确如此&#xff0c;iPhone 的《Pages》《备忘录》&#xff0c;这些 app 的优秀表现改变了不少人「拿到新机就想卸载预装应用」的想…

解决:Linux中的CentOS 7的火狐浏览器不能访问服务器

今天安装CentOS 7的时候配置好环境&#xff0c;发现火狐不能连网 分析了一些可能是我的虚拟机网络配置没开&#xff0c;因此我总结了两个方法 1.检查虚拟机的编辑--》虚拟网络编辑器--》看看是否是NAT连接 2.搜索计算机的服务--》找到VMware DHCP Service和VMware NAT Servi…

pyqt5 自定义控件_PyQt5学习笔记(十六)Pyinstaller打包与SQLite数据库

终于到了最后一章了QAQ&#xff0c;第一次写4万字以上的笔记分享&#xff0c;最近也在忙科创和CV的比赛&#xff0c;所以笔记会显得比较粗糙。其实吧分享这个笔记很大一部分是为了让自己记得更牢&#xff0c;网上翻阅自己的笔记也方便&#xff0c;如果有讲解注释不清楚的地方欢…

依赖第三方库时出现的问题:Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16

导入第三方库时出现了sdk版本不兼容问题 为我们app的module所支持的sdk最低版本与依赖module的sdk最低版本不一致 把15--》16即可

Linux基本目录结构

上一步我们已经搭建好实验环境了&#xff0c;这一节就来实际操作一下&#xff0c;到底什么是CentOS&#xff0c;到底什么是Linux操作系统&#xff0c;写什么&#xff0c;如何去做&#xff0c;如何去打开&#xff0c;下面我们带着这些疑惑展开这一节 1.打开终端&#xff0c;有些…

解决:VMware DHCP Service 服务无法启动

今天在布置项目的时候发现VMware DHCP Service 服务无法启动&#xff0c;连网络也连接不了 解决办法是 搞定 解决后验证Linux又可以连接上网络了