点击蓝色“不太灵光的程序员”关注我哟加个“星标”,每天上午 08:00,干货推送!本文依旧会对学习内容进行拆分,建议阅读时间基本保持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.0pip install redis==3.5.1redis-py 两种连接方式redis.Redisredis.StrictRedis正如上面提到的 StrictRedis只是Redis的一个别名,建议使用Redis。redis-py 连接池redis.ConnectionPoolredis-py 使用连接池来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。redis-py 管道redis.Pipelinesredis-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 redis
redis_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 redis
redis_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
"""

end

推荐阅读:

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

如有收获,点个在看,诚挚感谢

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

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

    想要看更加舒服的排版.更加准时的推送 关注公众号"不太灵光的程序员" 每日八点有干货推送 同时发布<[Redis数据结构 1序]1使用redis-py操作Redis数据库&g ...

  2. redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  3. Redis 基础 Jedis -- Jedis(Java程序操作Redis的工具)

    文章目录 1. Jedis -- Jedis(Java程序操作Redis的工具) 1.1 Jedis简介 1.2 HelloWorld(Jedis版) 1.2.1 准备工作 1.2.2 编写Java程 ...

  4. Redis(四):Spring + JedisCluster操作Redis(集群)

    1.maven依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&l ...

  5. redis java api 单例_Java API 操作Redis

    针对Redis的Java客户端有很多种,具体查看官网信息:https://redis.io/clients#java 本次测试使用Jedis API,Jedis使用方便,其api方法名称与redis命 ...

  6. java实现redis客户端_windows下java swt实现操作redis的客户端工具

    redisclient 1.0 正式发布,适用于多个 Redis 版本,主要更新内容如下: 1.管理 Redis 服务器 2.管理 Redis data favorite 3.管理 Redis 数据 ...

  7. Redis学习(5)-Jedis(Java操作redis数据库技术)

    Java连接redis 一,导入jar包 Redis有什么命令,Jedis就有什么方法 设置防火墙 在Linux上面运行如下代码: 单实例:Jedis实例: package com.jedis.dem ...

  8. redis 系列7 数据结构之跳跃表

    redis 系列7 数据结构之跳跃表 原文:redis 系列7 数据结构之跳跃表 一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问 ...

  9. redis实例python_使用python操作redis(管道)

    一.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...

最新文章

  1. oracle非归档模式下如何备份,Oracle之RMAN数据库在非归档模式下的备份和恢复
  2. 20145324 《信息安全系统设计基础》第十周学习总结
  3. 字节跳动学习笔记:java多线程实现原理
  4. 【FFmpeg】FFmpeg 相关术语简介 二
  5. 1.1 什么是Hive
  6. 巧用.mdb后缀数据库做后门
  7. C#实现动态桌面背景图片切换(续)
  8. 不了解沙特,那你就看不懂硅谷
  9. 华为鸿蒙麒麟玉兔_华为P50Pro概念图:1亿像素+麒麟9000+鸿蒙
  10. [Swift]LeetCode289. 生命游戏 | Game of Life
  11. linux设备模型之mmc子系统
  12. 通过官网下载KITTI数据集失败解决方法
  13. spring5-介绍Spring框架
  14. 初学者有关Hadoop版本选择的考虑
  15. 年薪30~60万,机器学习算法工程师必备能力项
  16. 【人月神话】浅谈人月神话0.1焦油坑
  17. 基于SSM的生产计划排程管理系统
  18. python(2) qypt安装 qy designer安装
  19. 浅谈cocos2d游戏中天气系统的简单实现
  20. 你感兴趣的视频,到底在不在B站?

热门文章

  1. 单片机数码管从00到99C语言_MSP430单片机轻松入门与实践 — 畅学单片机
  2. android鼠标滚轮事件坐标,android 处理鼠标滚轮事件 【转】
  3. php7序列化,php 7.2中未序列化字符串时出现问题
  4. python生成的词云没有图案_Python生成词云的实现代码
  5. win7蓝屏_Win7大面积蓝屏?急!解决办法在这儿~
  6. JQuery:多张图片的淡入淡出效果。
  7. python虚拟环境搭建mac_mac搭建python virtualenv虚拟环境并使用 - 李金龙
  8. git / 通过 ssh 与仓库通信
  9. Linux / TCPIP / 判断 client 已经关闭的方法
  10. 启明云端分享| ESP32-C3智能写字板应用解决方案