想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送
同时发布《【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 设置连接密码

启动后是这样的:

注:建议安装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是做了层次划分的。

当我们要使用的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 (二维码自动识别)

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

  1. zincrby redis python_【Redis数据结构 序】使用redispy操作Redis数据库

    点击蓝色"不太灵光的程序员"关注我哟加个"星标",每天上午 08:00,干货推送!本文依旧会对学习内容进行拆分,建议阅读时间基本保持10分钟内,想学习之前章节内 ...

  2. Redis 之(二) Redis的基本数据结构以及一些常用的操作

    本篇内容是Redis最简单最容易掌握的知识,如果你已经熟知了,就可以选择跳过啦! 要体验Redis,那么首先你得安装Redis,这边的话我就只讲一下Windows环境下的安装与操作: Window 下 ...

  3. c语言哈希表电子辞典_关于redis涉及的知识点,C语言如何操作redis

    redis是什么? redis是一个由 Salvatore Sanfilippo 写的 key-value 存储系 统.Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网 ...

  4. python使用redis在实际场景使用_用python操作redis及redis的一些应用场景

    redis安装 网上很多windows.Linux的安装教程,可根据自己的需要寻找对应教程安装 redis-py安装 pip install redis redis可视化工具 API的使用 redis ...

  5. Redis学习总结(4)——Spring Data操作Redis

    Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统. Spring data对Redis进行了很好的封装,用起来也是十分的得心应 ...

  6. java redis释放连接池_Java 使用连接池操作redis

    构建连接池对象JedisPool JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379); ...

  7. redis在php中的用法,使用PHP-redis操作Redis

    PHP连接Redis 我们一般使用connect连接Redis,connect方法为短连接,提供了主机.端口.连接超时等参数设置,如: $redis->connect('127.0.0.1', ...

  8. python 操作redis之——有序集合(sorted set) (七)

    #coding:utf8 import redis r =redis.Redis(host="23.226.74.190",port=63279,password="66 ...

  9. 还在直接操作 Redis?赶快来试试这个

    以下文章来源方志朋的博客,回复"666"获面试宝典 有些人还在直接用Jedis操作Redis数据库,但这种方式非常不方便,而且很不灵活.用Spring Boot整合Redis之后, ...

最新文章

  1. 各种 Optimizer 梯度下降优化算法总结
  2. docke跨主机通信之gre隧道
  3. FreeRTOS初步认识
  4. VS 2012 如何发布 ASP.NET 网站到本地IIS
  5. 极度舒适的 Python 入门教程,佩奇也能学会~
  6. python类中init_Python类中的__init__() 和 self 的解析
  7. spring源码核心:DefaultListableBeanFactory
  8. Java零拷贝四步曲——HeapByteBuffer与DirectByteBuffer
  9. 1.大数据架构详解:从数据获取到深度学习 --- 大数据的本质
  10. 微信表情包储服务器,新发现!微信里的表情包,终于能保存到手机和电脑辣!-qq表情在哪个文件夹里...
  11. HTML CSS游戏官网网页模板——卡通的萌王游戏网页(13个页面)
  12. 《葬经》郭璞 高清彩色版手抄欣赏
  13. checkio Evenly Spaced Trees
  14. 测试学习——Web自动化测试(一)
  15. 从零到百亿互网融构展
  16. 2022起重机械指挥判断题及答案
  17. 引入微信支付Java SDK WxPayAPI_JAVA.zip
  18. speedoffice(Excel)如何设置纸张大小
  19. Angular6笔记(4)
  20. 我的世界无限贪婪服务器,《我的世界》1.12.2无尽贪婪mod

热门文章

  1. CORS预检请求详谈
  2. Selenium-几种操作
  3. zbb20170228_spring_tdt
  4. java堆分析神器MAT
  5. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
  6. vtk类之vtkImageReslice:基本算法,对体数据沿着轴进行切片
  7. 解决spring和struts配合问题
  8. Leetcode--1014. 最佳观光组合(java)
  9. akka kafka java_当使用websocket连接时,使用akka-stream-kafka从kafka主题获取最后一条消息...
  10. python在另一个函数中使用其他函数的变量_在另一个函数中访问函数的变量,如function() . var in python...