数据库之 redis

news2025/1/10 17:03:52

前言:

就学习爬虫而言,对于三种常见的数据库做个基本了解足以,所以笔记都是浅尝辄止,不会涉及太深入的东西。

redis简介

Redis(Remote Dictionary Server ,远程字典服务) 是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库,是NoSQL数据库(非关系型)。

-------------->>>>>

redis的出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)key-value(键值存储)数据库。
支持数据的持久化(基于RDB和AOF,注: 数据持久化时将数据存放到文件中,每次启动redis之后会先将文件中数据加载到内存,经常用来做缓存、数据共享、购物车、消息队列、计数器、限流等。(最基本的就是缓存一些经常用到的数据,提高读写速度)

redis特性

● 速度快
● 持久化
● 多种数据结构
● 支持多种编程语言
● 主从复制
● 高可用、分布式

Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型。

这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和顺序集合类型。

示例如下:

#很像python的一个大字典:
redis={
"name":"hailey",                      #String类型
"age":"23",                           #String--数字类型
"scors":[78,79,98,],                  #list类型
"info":{"gender":"male","tel":"110"}, #哈希类型,键值结构嵌套键值
"set":{1,2,3},                        #集合类型              
"zset":{1,2,3,}                       #有序集合
}

 Redis的应用场景

● 缓存系统(“热点”数据:高频读、低频写):缓存用户信息,优惠券过期时间,验证码过期时间、session、token等。
● 计数器:帖子的浏览数,视频播放次数,评论次数、点赞次数等
● 消息队列,秒杀系统
● 社交网络:粉丝、共同好友(可能认识的人),兴趣爱好(推荐商品)
● 排行榜(有序集合)
● 发布订阅:粉丝关注、消息通知

-------------------------------------

在实际中,Redis常和mysql一起使用,通常先把数据存储在Redis,再同步给mysql,查询的时候也是先从Redis中进行查询;例如有时候在网站修改名字不刷新的时候没更新成功,就是因为还在缓存。主要图Redis存储特别快。

redis环境安装

官方原版: https://redis.io/

虽然 Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载 Windows 版 Redis 安装包

下载地址:点击前往

=====================================================================

安装时一路next

到“ Destination Folder”界面选择安装目录、勾选add path全局变量

“ort Number and Firewall Exception”端口号默认:6379

“Memory Limit”勾选“Set the Max Memory lmit”可修改Max Memory MB,即redis占用内存的限制。

下面详细记录windows的完整安装步骤:

 ❶ 进入GitHub开始下载:

解压zip安装包,解压后的文件目录:

❷ 创建Redis临时服务:

双击启动服务端程序redis.server.exe,界面如下

上图中显示一些 Redis 的相关信息,比如 Redis 的版本号以及默认端口号(6379)。

注意,为了实现后续操作,需要保持服务端开启状态,否则客户端无法正常工作。 

双击启动客户端程序redis.cli.exe,界面如下:说明 Redis 本地客户端与服务端连接成功。

❸ 命令创建Redis服务:

上述方式虽然简单快捷,但是显然不是程序员的操作,下面介绍,通过命令启动 Redis 服务端,并将 Redis 服务添加到 Windows 资源管理器,实现开机后自动启动。

注册Redis服务

通过 CMD 命令行工具进入 Redis 安装目录,将 Redis 服务注册到 Windows 服务中,执行以下命令:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

执行后输出8060这两行,说明注册成功:

启动Redis服务

执行以下命令启动 Redis 服务,命令如下:

redis-server --service-start

执行启动后,如下所示:

注意:

此时 Redis 已经被添加到 Windows 服务中(cmd中输入services.msc),因此不会再显示 Redis 服务端的相应的信息:

启动Redis客户端

在 CMD 命令行输出 redis-cli 命令启动客户端

redis-cli

如下:

检查是否连接成功

测试客户端和服务端是否成功连接。输出PING命令,若返回PONG则证明成功连接:

❹ 配置环境变量:

此电脑 -> 右击“属性” -> 高级系统设置 -> 环境变量 ->系统变量(s) -> 双击path -> 新建,填写路径

安装命令总结

安装服务:redis-server --service-install
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
停止服务:redis-server --service-stop
服务端启动时重命名:redis-server --service-start --service-name Redis1

Python操作redis

连接redis

在python中有一个专门的redis第三库

还是需要先进行安装:pip install redis

引用:import redis

链接方式1:

import redis(在python中improt之前,本地还是需要先进行安装redis)

r = redis.Redis(host='本地ip', port=6379)  #本机链接也可省略host和port
r.set('foo', 'Bar')    #写入数据
print(r.get('foo'))    #获取数据

链接方式2:

import redis
 
pool = redis.ConnectionPool(host='服务器ip', port=6379)  #远程链接必须写
r = redis.Redis(connection_pool=pool)
r.set('bar', 'Foo')        #写入数据
print(r.get('bar'))        #获取数据

通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接,一般情况下, 这是没问题的, 但当并发量比较高的时候, 频繁的连接创建和释放对性能会有较高的影响。

于是, 连接池就发挥作用了。连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作。

这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。

数据类型操作

(1) 字符串操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
#字符串操作:不允许对已经存在的键设置值
ret = r.setnx("name", "eric")
print(ret)  # False
 
 
#设置键有效期
r.setex("good_1001", 10, "2")
 
 
#字符串操作:自增自减
r.set("age", 20)
r.incrby("age", 2)
print(r.get("age"))  # b'22'

(2) hash操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
 
r.hset("info", "name", "rain")
print(r.hget("info", "name"))  # b'rain'
r.hmset("info", {"gedner": "male", "age": 22})
print(r.hgetall("info"))  # {b'name': b'rain', b'gender': b'male', b'age': b'22'}

(3) list操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
r.rpush("scores", "100", "90", "80")
r.rpush("scores", "70")
r.lpush("scores", "120")
print(r.lrange("scores", 0, -1))  # ['120', '100', '90', '80', '70']
r.linsert("scores", "AFTER", "100", 95)
print(r.lrange("scores", 0, -1))  # ['120', '100', '95', '90', '80', '70']
print(r.lpop("scores"))  # 120
print(r.rpop("scores"))  # 70
print(r.lindex("scores", 1)) # '95'

(4) 集合操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
# key对应的集合中添加元素
r.sadd("name_set", "zhangsan", "lisi", "wangwu")
# 获取key对应的集合的所有成员
print(r.smembers("name_set"))  # {'lisi', 'zhangsan', 'wangwu'}
# 从key对应的集合中随机获取 numbers 个元素
print(r.srandmember("name_set", 2))
r.srem("name_set", "lisi")
print(r.smembers("name_set"))  # {'wangwu', 'zhangsan'}

(5) 有序集合操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
# 在key对应的有序集合中添加元素
r.zadd("jifenbang", {"yuan": 78, "rain": 20, "alvin": 89, "eric": 45})
# 按照索引范围获取key对应的有序集合的元素
# zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'yuan', 'alvin']
print(r.zrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']
print(r.zrevrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']
 
 
print(r.zrangebyscore("jifenbang", 0, 100))
print(r.zrangebyscore("jifenbang", 0, 100, start=0, num=1))
 
# 删除key对应的有序集合中值是values的成员
print(r.zrem("jifenbang", "yuan"))  # 删除成功返回1
print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'alvin']

(6) 键操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
r.delete("scores")
print(r.exists("scores"))
print(r.keys("*"))
r.expire("name",10)

 

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

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

相关文章

SpringBoot框架结合Redis实现分布式锁

一、SpringBoot结合 Redis实现分布式锁 1.1、什么是分布式锁 分布式锁,是在分布式的环境下,才会使用到的一种同步访问机制,在传统的单体环境里面,不存在分布式锁的概念,只有在分布式环境里面,才有分布式锁…

机器人制作开源方案 | 校园餐具回收分类机器人

作者:梁桥、吴振宇、凌福海、李清轩、姜晓敏 单位:华北科技学院 指导老师:韩红利、张伟杰 1. 场景调研 1.1 项目实施目的 受新冠病毒引起的影响,人们生产生活发生了巨大的改变。现处于疫情防控常态化阶段,为应对点状…

基于Python实现的滑动验证码自动识别工具源码

滑动验证码识别 今天的目标地址是字节的巨量纵横,目前东家是一家广告营销型的公司,专注于在各大平台投放信息流广告。巨量纵横为字节跳动的广告平台,用于管理推广账户。今天破解一下这个平台的登陆入口,为今后的数据爬取开个头。…

IEEE 机器人最优控制开源库 Model-based Optimization for Robotics

系列文章目录 文章目录 系列文章目录前言一、开源的库和工具箱1.1 ACADO1.2 CasADi1.3 Control Toolbox1.4 Crocoddyl1.5 Ipopt1.6 Manopt1.7 LexLS1.8 NLOpt1.9 qpOASES1.10 qpSWIFT1.11 Roboptim 二、其他库和工具箱2.1 MUSCOD2.2 OCPID-DAE12.3 SNOPT 前言 机器人&#xff…

网工学习9-STP配置(二)

如图 1 所示,当前网络中存在环路, SwitchA 、SwitchB 、SwitchC 和 SwitchD 都运行 STP,通过 彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无 环路的树形网络结构&#xff…

山西电力市场日前价格预测【2023-12-04】

日前价格预测 预测说明: 如上图所示,预测明日(2023-12-04)山西电力市场全天平均日前电价为179.48元/MWh。其中,最高日前电价为362.01元/MWh,预计出现在18:00。最低日前电价为0.00元/MWh,预计出…

【c】课程满意度计算

我们不好直接比较二维数组中任意多个元素的值是否相等,我们可以创建一维数组,首先将一维数组的值全部设为0,一维数组的下标代表你喜欢课程的量,一维数组的各个元素的值代表你喜欢的次数 例如 你输入3 5,代表你喜欢第三…

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施,及国民经济数字化转型,叠加驱动信息化行业加速发展的大形势下,以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…

【每日OJ —— 110. 平衡二叉树】

每日OJ —— 110. 平衡二叉树 1.题目:110. 平衡二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:110. 平衡二叉树 2.解法 2.1.算法讲解 1.这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11…

国内的几款强大的AI智能—AI语言模型

R5Ai智能助手是一款由百度研发的文心一言,它支持gpt4 / gpt-3.5 / claude,也支持AI绘画,每天提供十次免费使用机会,无需魔法。该智能助手具有以下优点:会画画,没有使用次数限制,可以在界面上找到…

二蛋赠书十期:《剪映短视频剪辑从入门到精通》

前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此,我非常感激大家一直…

C/C++,图算法——凸包的快速壳(Quick Hull)算法的源代码

1 文本格式 // C program to implement Quick Hull algorithm // to find convex hull. #include<bits/stdc.h> using namespace std; // iPair is integer pairs #define iPair pair<int, int> // Stores the result (points of convex hull) set<iPair>…

(c语言进阶)结构体内存对齐和修改默认对齐数

一.结构体内存对齐 结构体内存大小计算方法&#xff1a; 偏移量&#xff1a;是指某个成员在结构体中相对于结构体首地址的偏移字节数。在计算机中&#xff0c;结构体是一种自定义数据类型&#xff0c;它由多个不同类型的成员组成。每个成员在内存中的存储位置是连续的&#xf…

大数据|计算机毕业设计——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现

大数据|计算机毕业设计——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现 技术栈&#xff1a;大数据爬虫/机器学习学习算法/数据分析与挖掘/大数据可视化/Django框架/Mysql数据库 本项目基于 Django框架开发的房屋可视化分析推荐系统。这个系统结合了大数据爬…

企业培训私有化解决方案PlayEdu

本文应网友 林枫 的要求而折腾&#xff1b; 什么是 PlayEdu &#xff1f; PlayEdu 是一款适用于搭建内部培训平台的开源系统&#xff0c;旨在为企业/机构打造自己品牌的内部培训平台。PlayEdu 基于 Java MySQL 开发&#xff1b;采用前后端分离模式&#xff1b;前端采用 React1…

在 App 设计工具的代码视图中管理代码

目录 管理组件、函数和属性 识别代码中的可编辑部分 编写 App 管理 UI 组件 管理回调 在 App 中共享数据 在多个位置运行的单一源代码 创建输入参数 为您的 App 添加帮助文本 限制您的 App 一次只运行一个实例 修复代码问题和运行时错误 个性化代码视图外观 更改颜…

SourceTree for Mac: 您的个人Git仓库管理专家

在当今的软件开发世界中&#xff0c;版本控制系统如Git的重要性日益凸显。它们帮助开发者在协作开发过程中保持代码的同步和有序。如果你是一位Mac用户&#xff0c;并且正在寻找一款简单易用的Git客户端工具&#xff0c;那么SourceTree for Mac可能是你的最佳选择。 SourceTre…

服务异步通讯

四、服务异步通讯 4.1初始MQ 4.1.1同步通讯和异步通讯 同步调用的优点: 时效性较强,可以立即得到结果 同步调用的问题: 耦合度高 性能和吞吐能力下降 有额外的资源消耗 有级联失败问题 异步通信的优点: 耦合度低 吞吐量提升 故障隔离 流量削峰 异步通信的缺点: …

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

1. 前提 效果图 不错的链接&#xff1a;YOLOV7训练模型分析 关于map的绘图、loss绘图&#xff0c;可参考&#xff1a;根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图 v5、v8调用val.py&#xff0c;v7调用test.py&#xff08;作用都是一样的&#xff0c;都是…

根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图

1. 效果图 2. 认识result内容 2.1 YOLOv7的result.txt 参考链接&#xff1a;YOLOv7结果分析&#xff0c;txt文件内容 0/299 14.7G 0.07522 0.009375 0.02266 0.1073 58 640 0.0002958 0…