redis 库

安装 redis-py

首先,你需要安装 redis-py 库:

pip install redis

连接到 Redis

import redis# 创建 Redis 连接
r = redis.Redis(host='localhost', port=6379, db=0)

字符串操作

  • 设置值

    r.set('key', 'value')
    

  • 获取值

    value = r.get('key')
    print(value.decode('utf-8'))  # Redis 返回的值是字节类型,需要解码为字符串
    

  • 设置带过期时间的值

    r.setex('key', 3600, 'value')  # 过期时间为 3600 秒
    

  • 获取并设置值(返回旧值)

    old_value = r.getset('key', 'new_value')
    

  • 递增

    r.incr('key')       # 增加整数值
    r.incrby('key', 5)  # 增加指定的整数值
    

  • 递减

    r.decr('key')       # 减少整数值
    r.decrby('key', 5)  # 减少指定的整数值
    

列表操作

  • 添加元素到列表的左侧

    r.lpush('mylist', 'element')
    

  • 添加元素到列表的右侧

    r.rpush('mylist', 'element')
    

  • 获取列表中的所有元素

    elements = r.lrange('mylist', 0, -1)  # 获取所有元素
    

  • 删除列表中的元素

    r.lrem('mylist', 1, 'element')  # 从列表中删除指定值的元素
    

集合操作

  • 添加元素到集合

    r.sadd('myset', 'element')
    

  • 获取集合中的所有元素

    elements = r.smembers('myset')
    

  • 删除集合中的元素

    r.srem('myset', 'element')
    

  • 集合的交集

    intersection = r.sinter('set1', 'set2')
    

  • 集合的并集

    union = r.sunion('set1', 'set2')
    

  • 集合的差集

    difference = r.sdiff('set1', 'set2')
    

哈希操作

  • 设置哈希表字段的值

    difference = r.sdiff('set1', 'set2')
    

  • 获取哈希表字段的值

    value = r.hget('myhash', 'field')
    

  • 获取哈希表中的所有字段和值

    fields = r.hgetall('myhash')
    

  • 删除哈希表中的字段

    r.hdel('myhash', 'field')
    

有序集合操作

  • 添加元素到有序集合

    r.zadd('myzset', {'element': 1.0})
    

  • 获取有序集合中的元素

    elements = r.zrange('myzset', 0, -1, withscores=True)  # 获取所有元素及其分数
    

  • 删除有序集合中的元素

    r.zrem('myzset', 'element')
    

发布/订阅

  • 订阅频道

    pubsub = r.pubsub()
    pubsub.subscribe('my-channel')
    

  • 发布消息

    r.publish('my-channel', 'Hello, Redis!')
    

  • 处理接收到的消息

    for message in pubsub.listen():print(message)
    

事务

  • 使用事务执行多个命令

    with r.pipeline() as pipe:pipe.set('key1', 'value1')pipe.set('key2', 'value2')responses = pipe.execute()
    

键管理

  • 检查键是否存在

    exists = r.exists('key')
    

  • 删除键

    r.delete('key')
    

  • 设置键的过期时间

    r.expire('key', 3600)  # 过期时间为 3600 秒
    

  • 获取键的剩余过期时间

    ttl = r.ttl('key')
    

高级用法

连接池
1. 连接池的定义

连接池是一个事先创建并维护的一组连接的集合。应用程序从连接池中获取连接,而不是每次操作都重新建立连接。连接使用完毕后,连接会被返回到连接池中,而不是被关闭。这样可以重用现有连接,提高系统的性能和资源利用率。

2. 连接池的工作原理

初始化:连接池在创建时,会建立一定数量的连接到目标服务(如 Redis、数据库等),并将这些连接存储在池中。

获取连接:当应用程序需要进行数据库操作时,从连接池中获取一个连接。连接池会提供一个空闲的连接,如果没有空闲连接,可能会等待或创建新的连接(如果未达到最大连接数)。

使用连接:应用程序使用从连接池中获取的连接进行操作。

归还连接:操作完成后,连接不会被关闭,而是被归还到连接池中,供其他操作使用。

管理连接:连接池会管理连接的生命周期,包括连接的创建、回收、维护等。有些连接池还会进行连接的健康检查和重连处理。

redis-py 支持使用连接池来优化连接管理:

import redis# 创建连接池
pool = redis.ConnectionPool(host='localhost',port=6379,db=0,max_connections=10,timeout=5,decode_responses=True
)# 使用连接池创建 Redis 实例
r = redis.Redis(connection_pool=pool)# 执行 Redis 操作
r.set('key', 'value')
print(r.get('key'))  # 输出: valuer.lpush('mylist', 'element')
print(r.lrange('mylist', 0, -1))  # 输出: [b'element']# 关闭连接池(可选)
pool.disconnect()

使用事务的块(Pipeline)

Pipeline 允许你将多个命令批量发送到 Redis 服务器以提高性能:

with r.pipeline() as pipe:pipe.set('key1', 'value1')pipe.set('key2', 'value2')pipe.get('key1')responses = pipe.execute()

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

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

相关文章

Unity Timeline:构建复杂动画序列的利器

Unity的Timeline是一个强大的动画工具,它允许开发者创建复杂的动画序列,将动画、音频和事件整合到一个统一的时间轴上。Timeline的可视化编辑界面使得动画制作变得更加直观和灵活。本文将介绍Unity Timeline的基本概念、功能以及如何使用它来实现动画。 …

DP的优化途径---单调队列

1.前缀和单调队列&#xff1a;https://www.acwing.com/problem/content/137/ 我们先预处理下前缀和&#xff0c;以下标为i的点为有边界&#xff1a; 也就是求()的min&#xff0c;考虑到j的范围是定值&#xff0c;用单调队列维护即可。 AC代码&#xff1a; #include<bits/…

OpenGL3.3_C++_Windows(32)

demo SSAO SSAO 环境光照(Ambient Lighting)&#xff1a;光的散射&#xff0c;我们通过一个固定的常量作为环境光的模拟&#xff0c;但是这种固定的环境光并不能很好模拟散射&#xff0c;因为环境光不是一成不变的&#xff0c;环境光遮蔽&#xff1a;让&#xff08;褶皱、孔洞…

更新至2023年上市公司ESG数据合集(十份数据:华证年度、华证季度、商道融绿、wind、秩鼎、润灵环球、盟浪、富时罗素、上市银行华证ESG)

更新至2023年上市公司ESG数据合集&#xff08;十份数据&#xff1a;华证年度、华证季度、商道融绿、wind、秩鼎、润灵环球、盟浪、富时罗素、上市银行华证ESG&#xff09; 数据名称&#xff1a; 一、2018-2023年上市公司富时罗素ESG评分数据 二、2018-2023年上市公司Wind ES…

孤儿进程的例子

先让父进程死亡&#xff0c;子进程的父进程会被操作系统管理 先使用gcc编译代码, 执行代码后用 ps -p <进程号> -f 查看进程 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main() {pid_t pid;// 创建…

深度学习实战笔记3循环神经网络实现

我们要训练一个基于循环神经网络的字符级语言模型&#xff0c;根据用户提供的文本的前缀生成后续文本。 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l batch_size, num_steps 32, 35 train_iter, voc…

C#插件 调用存储过程(输出参数类型)

存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…

Python人工智能:一、语音合成和语音识别

在Python中&#xff0c;语音合成&#xff08;Text-To-Speech, TTS&#xff09;和语音识别&#xff08;Speech-To-Text, STT&#xff09;是两个非常重要的功能&#xff0c;它们在人工智能、自动化、辅助技术以及许多其他领域都有广泛的应用。下面将分别介绍这两个领域在Python中…

MySQL死锁问题案例

MySQL死锁问题 问题描述&#xff1a;在一张流水生成的记录表中&#xff0c;当没有当前条件的数据时候&#xff0c;并发情况下会导致有线程因为死锁问题生成流水号失败。 场景 有一张生成流水的表&#xff1a; 场景复现&#xff1a; 简单来说&#xff0c;在根据流水类型、年、月…

Python如何快速定位最慢的代码?优雅了~

编写Python代码时&#xff0c;我们常常会遇到性能瓶颈&#xff0c;这不仅影响程序的执行效率&#xff0c;还可能导致用户体验下降。那么&#xff0c;如何快速定位代码中最慢的部分&#xff0c;成为每个开发者必须掌握的技能。 如何快速定位 Python 代码中的性能瓶颈&#xff1…

MySql8.0在centos安装

在 CentOS 上安装 MySQL 8.0 的步骤如下&#xff1a; 添加 MySQL YUM 存储库&#xff1a; 首先&#xff0c;下载并添加 MySQL YUM 存储库到你的系统。 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -Uvh mysql80-community-release-el…

Url图标实现

Url图标实现 效果如下&#xff1a; 1.引入样式 <link rel"icon" href"favicon.ico"> favicon.ico和对应的html一般需要在同一个目录下&#xff08;同级别&#xff09;。 2.title是用来设置在url页签中显示的名称。 可能存在的问题&#xff1a; …

Q15 三数之和

思路 我的思路&#xff0c;先排序&#xff0c;循环确定前两个值&#xff0c;最后一个值二分 看了题解&#xff1a; 最后两个值可以使用双指针&#xff0c;因为是有序的&#xff0c;而且是求和 注意重复值&#xff1a; public List<List<Integer>> threeSum(int[…

前端实现文本超出指定行数显示”展开”和”收起”效果

目录 效果演示步骤一&#xff1a;实现整体框架步骤二&#xff1a;实现样式步骤三&#xff1a;js实现元素控制完整代码 效果演示 本文方法是利用js原生进行实现的&#xff0c;可根据相关vue或react语法进行相关的改写&#xff0c;并实现效果 步骤一&#xff1a;实现整体框架 <…

OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子&#xff0c;通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子&#xff0c;能够有效地突出图像中的高频变化区域&#xff0c;即边缘。 二、…

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)

c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制&#xff08;XON/XOFF&#xff09;硬件流控制&#xff08;RTS/CTS&#xff09;选择流控制方法 serial_…

独立3D网络游戏《战域重甲》开发与上架经验分享

“ 小编阿麟&#xff1a;心之所向便是光&#xff0c;我们都是追光者!这位独立游戏开发者的产品能力已经不输给许多小团队&#xff0c;希望他的故事和经验分享&#xff0c;可以给走在同样道路上的朋友一些信心和帮助。 背景介绍 2023年年底的时候&#xff0c;我突然有一个很强的…

防火墙简单学习

文章目录 防火墙主要功能防火墙类型 防火墙主要功能 防火墙是一种网络安全设备&#xff0c;它通过监控和控制进出网络的数据包来保护内部网络不受外部攻击和威胁。防火墙的主要功能包括&#xff1a; 访问控制&#xff1a;防火墙可以限制哪些设备和用户可以访问网络资源&#x…

硬件工程师笔面试真题汇总

目录 1、电阻 1&#xff09;上拉电阻的作用 2&#xff09;PTC热敏电阻作为电源电路保险丝的工作原理 2、电容 1&#xff09;电容的特性 2) 电容的特性曲线 3) 1uf的电容通常来滤除什么频率的信号 3、电感 4、二极管 1&#xff09;二极管特性 2&#xff09;二极管伏安…

HVV | .NET 攻防工具库,值得您拥有!

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…