如何使用 Python 本地客户端操作读写云服务器 Redis 缓存数据库详细教程(更新中)

Redis 基本概述

Redis(Remote Dictionary Server)是一个开源的使用 ANSI C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。它通常被称为数据结构服务器,因为值(value)可以是字符串(string)、哈希(Hash)、列表(list)、集合(sets)、有序集合(sorted sets)等类型。

Redis 广泛应用于缓存、消息队列、计数器、排行榜、分布式锁等场景,为开发者提供了强大的数据存储和处理功能。

Redis 主要特点和概述

内存存储与持久化:Redis 主要将数据存储在内存中,因此读取速度非常快。同时,它也支持数据的持久化,可以将内存中的数据定期写入磁盘或其他存储介质,以防止数据丢失。

数据类型丰富:Redis 支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,这使得Redis能够灵活地应用于各种场景。

发布 / 订阅模型:Redis 支持发布 / 订阅模型,允许发送者(pub)发送消息,订阅者(sub)接收消息。这种模型常用于实现实时消息系统、聊天室等。

事务支持:Redis 支持简单的事务处理,可以通过 MULTI、EXEC 和 DISCARD 等命令来执行一系列操作。

Lua 脚本:Redis 支持使用 Lua 脚本进行复杂的操作,提高了操作的灵活性和效率。

分布式与集群:Redis 支持分布式部署和集群功能,可以通过分片、复制等方式实现数据的水平扩展和高可用性。

高并发性能:由于 Redis 主要操作都在内存中完成,且采用单线程模型避免了多线程的上下文切换开销,因此 Redis 具有非常高的并发性能。

Python 远程连接 Redis

下载第三方库:redis (py - redis 使用)

pip3 install --pre redis -i https://pypi.tuna.tsinghua.edu.cn/simple 

采用非连接池技术连接如下:

import redis
host = '服务器IP'
port = 6379
r = redis.Redis(host=host, port=port)

采用连接池技术连接如下:

# 连接池:为了节约资源,减少多次连接带来的消耗。
# 默认设置的值和取得的值都是bytes类型,如果想改为str类型,可以添加decode_responses=Truepool=redis.ConnectionPool(host='服务器IP', port=6379, decode_responses=True)

关系型数据库都有一个连接池的概念:对于大量redis连接来说,如果使用直接连接redis的方式的话,将会造成大量的TCP的重复连接,所以,就引入连接池来解决这个问题。在使用连接池连接上redis之后,可以从该连接池里面生成连接,调用完成之后,该链接将会返还给连接池,供其他连接请求调用,这样将减少大量redis连接的执行时间。

在这里插入图片描述

Redis 基本操作

常规属性查看 redis 库中的 Redis 类生成对应的对象都有如下同名的方法供调用者调用。

在这里插入图片描述
具体的操作请参考:Redis 博客

配置服务器端开启远程

本地连接服务器端 Redis 数据库开放 6379 端口
在这里插入图片描述
宝塔面板 redis 管理 > 配置文件

将 bind 127.0.0.1 ::1 修改为 bind 0.0.0.0 (指所有的地址都可以访问,不建议此操作,仅供测试,因为一旦 bind 0.0.0.0 之后任何 IP 都能连接访问 redis 数据库,非常不安全)

这里的 bind 指的是只有指定的网段才能远程访问这个 redis。 注释掉后,就没有这个限制了。或者 bind 自己所在的网段。

在这里插入图片描述

将 protected-mode 要设置成 no (默认是设置成 yes 的, 防止了远程访问,在redis 3.2.3 版本后)

在这里插入图片描述
配置远程连接密码:取消注释 requirepass foobared,将 foobared 改成任意密码,用于验证登录。默认是没有密码的就可以访问的,我们这里最好设置一个密码。

在这里插入图片描述

特别注意:更新配置文件 bind 0.0.0.0 需要重启 redis 服务

本地连接测试

import redishost = '124.222.115.238'
port = 6379
r = redis.Redis(host=host, port=port)r.set("name", "唤醒手腕")
print(r.get("name"))
    raise TimeoutError("Timeout connecting to server")
redis.exceptions.TimeoutError: Timeout connecting to server

测试发现请求超时(通过站长工具扫描端口)

在这里插入图片描述
特别提醒(借助宝塔面板需要面板端口开放设置中 6379 也同时放行)

在这里插入图片描述
配置完成之后测试结果

b'\xe5\x94\xa4\xe9\x86\x92\xe6\x89\x8b\xe8\x85\x95'

需要开启解码返回

在 Python 的 redis 库中,decode_responses 是一个配置选项,用于控制从 Redis 服务器接收的响应是否应该被自动解码为字符串。默认情况下,decode_responses 被设置为 False,这意味着响应会以字节(bytes)形式返回。当你设置 decode_responses 为True时,所有的响应都会被自动解码为 UTF-8 字符串。

import redishost = 'xxx.xxx.xxx.xxx'
port = 6379
r = redis.Redis(host=host, port=port, password="foobared", decode_responses=True)r.set("name", "唤醒手腕")
print(r.get("name"))

Sort Set 读写操作

创建一个 Redis 连接

import redis  host = 'xxx.xxx.xxx.xxx'
port = 6379
r = redis.Redis(host=host, port=port, password="foobared", decode_responses=True)

添加一些成员到有序集合中并指定分数

r.zadd('leaderboard', {'Alice': 1000, 'Bob': 1200, 'Charlie': 1100})  

获取有序集合的所有成员和分数

members_with_scores = r.zrange('leaderboard', withscores=True)  
print(members_with_scores)  # 输出: [('Alice', 1000.0), ('Charlie', 1100.0), ('Bob', 1200.0)]  

获取有序集合的成员数量

member_count = r.zcard('leaderboard')  
print(member_count)  # 输出: 3  

获取有序集合中分数最高的成员

top_member = r.zrevrange('leaderboard', 0, 0, withscores=True)  
print(top_member)  # 输出: [('Bob', 1200.0)]  

获取有序集合中分数在指定范围内的成员

members_in_range = r.zrangebyscore('leaderboard', 1000, 1100, withscores=True)  
print(members_in_range)  # 输出: [('Alice', 1000.0), ('Charlie', 1100.0)]  

更新有序集合中某个成员的分数

r.zincrby('leaderboard', 50, 'Alice')  

再次获取有序集合的所有成员和分数 查看 Alice 的分数变化

updated_members_with_scores = r.zrange('leaderboard', withscores=True)  
print(updated_members_with_scores)  # 输出可能包括 Alice 的新分数  

删除有序集合中的某个成员
r.zrem(‘leaderboard’, ‘Alice’)

再次获取有序集合的所有成员和分数 查看 Alice 是否已被删除

final_members_with_scores = r.zrange('leaderboard', withscores=True)  
print(final_members_with_scores)  # 输出将不再包含 Alice

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

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

相关文章

本地虚拟机服务器修改站点根目录并使用域名访问的简单示例

说明:本文提及效果是使用vmware虚拟机,镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用: vim /etc/httpd/conf.d/webpage.conf 因为在主配…

5个免费的3D钣金CAD软件

如果你正在设计简单的折叠钣金零件,则只需设计一些具有圆角半径的法兰:一个简单的钣金模块。 首先,你可以采用老式方式绘图并以 2D 方式完成所有操作。 许多传统制造商仍在使用 2D DWG 和 DXF 图纸。 因此,你很有可能只需快速起草…

【MySQL】DQL-聚合函数介绍&常见聚合函数&语法&注意事项&可cv例题语句

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 疫苗预约管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使…

使用1panel部署Ollama WebUI(dcoekr版)浅谈

文章目录 说明配置镜像加速Ollama WebUI容器部署Ollama WebUI使用问题解决:访问页面空白 说明 1Panel简化了docker的部署,提供了可视化的操作,但是我在尝试创建Ollama WebUI容器时,遇到了从github拉取镜像网速很慢的问题&#xf…

公司官网怎么才会被百度收录

在互联网时代,公司官网是企业展示自身形象、产品与服务的重要窗口。然而,即使拥有精美的官网,如果不被搜索引擎收录,就无法被用户发现。本文将介绍公司官网如何被百度收录的一些方法和步骤。 1. 创建和提交网站地图 创建网站地图…

Matlab|孤岛划分|弹性配网故障划分模型

目录 1 主要内容 1.1 DistFlow 模型 1.2 虚拟潮流 1.3 目标函数 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序主要复现《A New Model for Resilient Distribution Systems by Microgrids Formation》,建立灾害情况下配网优化孤岛划分方案,通…

【Linux】POSIX信号量{基于环形队列的PC模型/理解信号量的出现/参考代码}

文章目录 1.POSIX信号量1.1介绍1.2接口 2.基于环形队列的PC模型2.1环形队列常用计算2.2如何设计?2.3如何实现? 3.细节处理3.1空间资源和数据资源3.2push/pop3.3理解信号量的出现1.回顾基于阻塞队列的PC模型中条件变量的使用2.如何理解信号量的投入使用&a…

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值

题目描述 给定一棵包含 �N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 �1,�2,⋯��A1​,A2​,⋯AN​,如下图所示: 现在小明要把相同…

9.动态规划——1.从递归到动态规划

例题——N阶楼梯上楼问题 分析 大事化小:爬N层有F(N)种可能,有 F ( N ) F ( N − 1 ) F ( N − 2 ) F(N)F(N-1)F(N-2) F(N)F(N−1)F(N−2)小事化了: F ( 1 ) 1 , F ( 2 ) 2 F(1)1,F(2)2 F(1)1,F(2)2 …

IDE/VS2015和VS2017帮助文档MSDN安装和使用

文章目录 概述VS2015MSDN离线安装离线MSDN的下载离线MSDN安装 MSDN使用方法从VS内F1启动直接启动帮助程序跳转到了Qt的帮助网页 VS2017在线安装MSDN有些函数在本地MSDN没有帮助?切换中英文在线帮助文档 概述 本文主要介绍了VS集成开发环境中,帮助文档MS…

R语言颜色细分

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

Linux系统---如何理解Linux中的文件系统

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、理解文件系统 1.ls与stat 我们使用ls -l的时候看到的除了看到文件名&#xff0c;还看到了文件元数据。 每行包含7列…

神经网络与深度学习(一)

线性回归 定义 利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 要素 训练集&#xff08;训练数据&#xff09;输出数据拟合函数数据条目数 场景 预测价格&#xff08;房屋、股票等&#xff09;、预测住院时间&#…

TASKPROMPTER

baseline模型的预训练权重就有1.6G! 多吓人呐&#xff0c;当时我就暂停下载了&#xff0c;不建议复现

python opencv 直线检测

直线检测 前期准备 import cv2 import numpy as np# 读取图片 img cv2.imread(r"C:\Users\HONOR\Desktop\12.png") # 灰度转换 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 # reg, img cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 显示二值化…

数据结构 - 图

参考链接&#xff1a;数据结构&#xff1a;图(Graph)【详解】_图数据结构-CSDN博客 图的定义 图(Graph)是由顶点的有穷非空集合 V ( G ) 和顶点之间边的集合 E ( G ) 组成&#xff0c;通常表示为: G ( V , E ) &#xff0c;其中&#xff0c; G 表示个图&#xff0c; V 是图 G…

QT中的文件操作QFile、QDataStream、QTextStream、QBuffer

文件操作概述 1、Qt中IO操作的处理方式 &#xff08;1&#xff09;、Qt通过统一的接口简化了文件与外部设备的操作方式 &#xff08;2&#xff09;、Qt中的文件被看做是一种特殊的外部设备 &#xff08;3&#xff09;、Qt中的文件操作与外部设备操作相同 2、IO操作中的关键…

设计模式9--单例模式

定义 案例一 案例二 优缺点

新网站秒收录技术,新网站百度收录时间

在建立新网站后&#xff0c;让它尽快被搜索引擎收录是网站主最为关注的事情之一。百度作为中国最大的搜索引擎&#xff0c;网站被其快速收录对于增加曝光和流量至关重要。本文将介绍一些新网站秒收录技术&#xff0c;以及一般情况下新网站被百度收录需要的时间。 新网站秒收录技…