如何使用 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.hqwc.cn/news/588959.html

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

相关文章

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查?

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查? 一、节点健康检查1、使用 kubectl 查看节点状态2、查看节点详细信息3、检查节点资源使用情况 2、Pod 健康检查2.1、 使用 kubectl 查看 Pod 状态2.2、 查看特定 Pod 的详细信息…

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 减缓热岛效应 D题 人机游戏中的数学模型 原题再现: 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力,使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可…

zabbix 7.0 新增功能亮点(一)——T参数

概要: T参数是zabbix7.0新增的一项功能,它支持对配置文件进行可用性验证,即zabbix程序(server/proxy/agent等)修改配置文件后,支持-T或–test-config参数验证配置参数可用性。 T参数主要包含以下三个方面的应用场景: …

解决Centos7无法连接网络和访问网页连接不上问题

一、网络无法连接问题 网络无法连接的问题我查到了一个很良心的操作,不用重装,因为可能是你虚拟机设置上的问题。我先写我的解决方案,再附上其他几种解决方案。 问题一: 虚拟机的问题****加粗样式 解决: (…

ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘

原因:torchvision模块在运行时要调用PIL模块的PILLOW_VERSION函数,但PILLOW_VERSION在Pillow 7.0.0之后的版本被移除了,Pillow 7.0.0之后的版本使用__version__函数代替PILLOW_VERSION函数。 解决方法:降低pillow版本即可。 参考…

人工智能应用工程师怎样报名,费用多少,就业机会怎么样?

人工智能应用工程师是能够利用人工智能相关技术进行应用研发,并开展各类工作的从业人员统称。为贯彻落实《国务院关于印发新一代人工智能发展规划的通知》、工业和信息化部《促进新一代人工智能产业发展三年行动计划(2018-2020年)》等文件精神…

JUC:原子类型的使用(原子整数、原子引用、原子数组、字段更新器、累加器)

文章目录 原子类型AtomicInteger 原子整数AtomicReferenc 原子引用AtomicStampedReference 带版本号的原子引用AtomicMarkableReference 仅记录是否修改的原子引用AtomicXXXArray 原子数组AtomicXXXFieldUpdater 字段更新器LongAdder累加器 原子类型 AtomicInteger 原子整数 …

部署项目遇到的各种问题总结

文章目录 前言一、后端问题 jar包运行出现错误宝塔面板使用jdk17二、数据库问题 版本问题三、前端问题 连不上后端总结 前言 在做完项目之后,为了让别人访问到自己的网站,就需要部署前端后端以及数据库,但是在部署的过程中出现了各种问题和困…

vue-quill-editor 富文本编辑器(可上传视频图片),组件挂载的方式实现

1.安装 npm install vue-quill-editor --save npm install quill-image-drop-module --save npm install quill-image-resize-module --save2.在组件下面新增组件 QlEditor (1)index.vue <template><div><div idquillEditorQiniu><!-- 基于element…

如何制作不同类型的二维码?快捷在线生码的3个步骤

怎么简单快速的完成二维码制作呢&#xff1f;现在二维码可以做很多的用途使用&#xff0c;比如可以用于内容展示、下载文件、播放音视频、扫码看图等等。那么上面讲述的这些类型二维码该如何制作呢&#xff0c;相信有很多的小伙伴都会二维码制作的技巧非常感兴趣。那么下面就让…

【Redis基础篇】详细讲解Redis

这篇文章让你详细了解Redis的相关知识&#xff0c;有代码讲解以及图片剖析&#xff0c;让你更轻松掌握 制作不易&#xff0c;感觉不错&#xff0c;请点赞收藏哟 &#xff01;&#xff01;&#xff01; 目录 1 redis基础 1.1 定义 1.2 SQL和NOSQL不同点 1.3 特征 1.4 Redis…

门户系统商城模块

商城系统&#xff1a;快递商品本地团购到店核销购物场景全覆盖&#xff0c;全新商销解决方案 商城系统是指一套用于构建和运营电商平台的软件系统&#xff0c;可以帮助企业快速搭建网上商城&#xff0c;实现商品销售、订单管理、客户服务等功能。 商城系统的功能&#xff1a;…