linux安装redis及Python操作redis
目录
一、Redis安装
1、下载安装包
2、解压文件
3、迁移文件夹
4、编译
5、管理redis文件
6、修改配置文件
7、启动Redis
8、将redis服务交给systemd管理
二、Redis介绍
1、数据结构
①字符串String
②列表List
③哈希Hash
④集合Set
⑤有序集合Sorted Set
2、Redis特点
①高性能
②持久化
③分布式支持
三、Python连接Redis
四、总结
一、Redis安装
1、下载安装包
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
2、解压文件
tar -zxvf redis-6.2.6.tar.gz
3、迁移文件夹
mv redis-6.2.6 /opt/redis
4、编译
cd /opt/redis
make
make install
5、管理redis文件
创建 bin 和 etc 文件夹
bin:用于存放可执行文件
etc:用于存放redis.conf
mkdir bin
mkdir etc# 移动配置文件mv redis.conf /opt/redis/etc/# 移动可执行文件
cd src
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server /opt/redis/bin/
cd ../bin
6、修改配置文件
vim /opt/redis/etc/redis.conf# 注释掉 bing 127.0.0.1,该项限制Redis只允许本地连接。将其注释掉后,Redis服务器将不再只监听本地回环地址,从而允许远程客户端连接到Redis服务器# 取消requirepass foobared的注释,将foobared修改为密码
requirepass your_password# 将appendonly 修改为 yes, appendonly配置项用于开启或关闭 AOF(Append Only File)持久化模式。将其设置为yes后,会开启 AOF 持久化。AOF 持久化模式会将每一个写命令追加到文件末尾,相比默认开启的 RDB 持久化,AOF 恢复的数据通常更完整,能在服务器故障恢复时尽可能保证数据的一致性和完整性
appendonly yes# 将daemonize 修改为 yes,daemonize配置项用于控制Redis是否以守护进程的方式运行。将其设置为yes后,Redis会在后台运行,不会占用当前终端会话,方便在系统后台持续稳定地提供服务。
daemonize yes# dir配置项用于指定 Redis 的数据存储目录。通过修改dir后面的路径,可将 Redis 的数据存储到指定的目录下,方便进行数据管理和备份等操作。
dir /your_data_dir
7、启动Redis
./redis-server /opt/redis/etc/redis.conf
进入客户端
./redis-cli# 验证设置的密码
auth 密码# 退出命令
exit
8、将redis服务交给systemd管理
编写 redis.service
cd /etc/systemd/system
vim redis.service
写入以下内容:
[Unit]
Description=Redis
After=network.target[Service]
Type=forking
PIDFile=/run/redis_6379.pid
ExecStart=/opt/redis/bin/redis-server /opt/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
刷新并启动Redis
systemctl daemon-reload
systemctl start redis
二、Redis介绍
1、数据结构
①字符串String
最基本的数据结构,能存储任何形式的字符串,包括整数和浮点数(在 Redis 内部会进行转换)。例如,可以存储用户的姓名、文章的标题、计数器的值等。
②列表List
一个有序的字符串列表,可以在列表的两端进行插入(LPUSH和RPUSH)和弹出(LPOP和RPOP)操作,还可以获取指定范围的元素等。常用于消息队列、最新消息列表等场景。
③哈希Hash
一个键值对集合,其中的键和值都是字符串类型。适合存储对象的属性,如用户对象的姓名、年龄、性别等信息。
④集合Set
无序的、不包含重复元素的字符串集合。可以用于实现标签系统、好友关系等功能。
⑤有序集合Sorted Set
和集合类似,但每个元素都关联一个分数(Score),元素根据分数进行排序。常用于排行榜、优先级队列等场景。
2、Redis特点
①高性能
内存存储:数据存储在内存中,读写速度极快,能够在微秒级或者亚毫秒级完成读写操作,相比传统的基于磁盘的数据库,大大提高了数据访问效率。
单线程架构:采用单线程模型处理请求,避免了多线程的上下文切换开销,并且 Redis 的操作都是原子性的,这使得它在处理高并发场景下依然能够保持高性能和数据的一致性。
②持久化
RDB(Redis Database Backup)持久化:在指定的时间间隔内,将内存中的数据集快照写入磁盘。这种方式非常适合用于备份和灾难恢复,它生成的快照文件是紧凑的二进制文件,恢复速度快。
AOF(Append Only File)持久化:以日志的形式记录服务器所执行的所有写操作,在服务器启动时,通过重新执行这些写操作来恢复数据集。AOF 持久化方式提供了更好的数据安全性,可以设置不同的同步频率来平衡性能和数据安全性。
③分布式支持
主从复制(Master - Slave Replication):支持一个主节点(Master)和多个从节点(Slave)的架构。主节点负责写操作,从节点负责复制主节点的数据,用于读操作,这样可以分担服务器的负载,提高系统的并发读写能力。
Redis Sentinel(哨兵):用于监控主从节点的健康状态,当主节点出现故障时,能够自动将一个从节点升级为新的主节点,实现故障自动转移,提高系统的可用性。
Redis Cluster(集群):通过分片(Sharding)的方式将数据分散存储在多个节点上,每个节点负责一部分数据的存储和处理,从而能够支持更大规模的数据存储和更高的并发访问量。
三、Python连接Redis
我将Python连接Redis的各类常用操作封装为了一个Class,使用的时候直接调用相关方法即可:
import redisclass RedisOperator:def __init__(self, host='localhost', port=6379, db=0, password='yj123'):"""初始化Redis连接:param host: Redis服务器主机地址,默认为localhost:param port: Redis服务器端口号,默认为6379:param db: 要使用的数据库编号,默认为0:param password: 密码"""self.r = redis.StrictRedis(host=host, port=port, db=db, password=password)# 字符串操作相关方法def set_string_value(self, key, value):"""设置字符串类型的键值对:param key: 键:param value: 值:return: 设置操作是否成功"""return self.r.set(key, value)def get_string_value(self, key):"""获取字符串类型键对应的值:param key: 键:return: 对应的值,如果不存在则返回None"""result = self.r.get(key)return result.decode('utf-8') if result else None# 列表操作相关方法def push_list_value(self, list_key, value, right=True):"""向列表右侧/左侧添加元素:param list_key: 列表的键:param value: 要添加的元素:param right: 右侧:return: 列表长度"""return self.r.rpush(list_key, value) if right else self.r.lpush(list_key, value)def get_list_range(self, list_key, start=0, end=-1):"""获取列表指定范围内的元素:param list_key: 列表的键:param start: 起始索引:param end: 结束索引:return: 元素列表(字节类型元素组成的列表)"""return self.r.lrange(list_key, start, end)# 哈希操作相关方法def set_hash_value(self, hash_key, field, value):"""在哈希表中设置键值对:param hash_key: 哈希表的键:param field: 哈希表中的字段:param value: 对应的值:return: 成功设置的字段数量"""return self.r.hset(hash_key, field, value)def get_hash_value(self, hash_key, field):"""获取哈希表中指定字段的值:param hash_key: 哈希表的键:param field: 哈希表中的字段:return: 对应的值,如果不存在则返回None"""result = self.r.hget(hash_key, field)return result.decode('utf-8') if result else Nonedef get_multiple_hash_values(self, hash_key, fields):"""获取哈希表中多个字段的值:param hash_key: 哈希表的键:param fields: 字段列表:return: 对应的值列表(字节类型元素组成的列表)"""return self.r.hmget(hash_key, fields)# 集合操作相关方法def add_set_value(self, set_key, value):"""向集合中添加元素:param set_key: 集合的键:param value: 要添加的元素:return: 如果元素是新添加的返回1,否则返回0"""return self.r.sadd(set_key, value)def get_set_members(self, set_key):"""获取集合中的所有元素:param set_key: 集合的键:return: 元素列表(字节类型元素组成的列表)"""return list(self.r.smembers(set_key))# 有序集合操作相关方法def add_zset_value(self, zset_key, mapping):"""向有序集合中添加元素(可批量添加,以字典形式传入元素和分数):param zset_key: 有序集合的键:param mapping: 元素和对应分数的字典,例如 {'element1': score1, 'element2': score2}:return: 添加的元素数量"""return self.r.zadd(zset_key, mapping)def get_zset_range(self, zset_key, start=0, end=-1, withscores=False):"""获取有序集合指定范围内的元素:param zset_key: 有序集合的键:param start: 起始索引:param end: 结束索引:param withscores: 是否同时获取元素对应的分数,默认为False:return: 如果with_scores为False,返回元素列表(字节类型元素组成的列表);如果with_scores为True,返回元素和分数的元组组成的列表"""if withscores:return self.r.zrange(zset_key, start, end, withscores=withscores)return self.r.zrange(zset_key, start, end)def delete_key(self, key):"""删除指定的键:param key: 要删除的键:return: 删除成功返回True,否则返回False"""return self.r.delete(key)
以下使用unittest框架对RedisOperator类进行测试:
import unittestclass TestRedisOperator(unittest.TestCase):def setUp(self):self.redis_op = RedisOperator()# 测试字符串操作相关方法def test_set_string_value(self):result = self.redis_op.set_string_value("name", "James")self.assertEqual(isinstance(result, bool), True)def test_get_string_value(self):self.redis_op.set_string_value("name", "James")result = self.redis_op.get_string_value("name")self.assertEqual(result, "James")# 测试列表操作相关方法def test_push_list_value(self):result = self.redis_op.push_list_value("name_list", "James", right=True)self.assertEqual(isinstance(result, int), True)result = self.redis_op.push_list_value("name_list", "Bob", right=False)self.assertEqual(isinstance(result, int), True)def test_get_list_range(self):result = self.redis_op.get_list_range("name_list")self.assertEqual(isinstance(result, list), True)# 测试哈希操作相关方法def test_set_hash_value(self):result = self.redis_op.set_hash_value("hash_key1", "name", "James")self.assertEqual(isinstance(result, int), True)def test_get_hash_value(self):self.redis_op.set_hash_value("hash_key1", "name", "James")result = self.redis_op.get_hash_value("hash_key1", "name")self.assertEqual(result, "James")def test_get_multiple_hash_values(self):hash_key = "hash_key2"fields = ["field1", "field2"]values = ["value1", "value2"]for field, value in zip(fields, values):self.redis_op.set_hash_value(hash_key, field, value)result = self.redis_op.get_multiple_hash_values(hash_key, fields)self.assertEqual(isinstance(result, list), True)# 测试集合操作相关方法def test_add_set_value(self):result = self.redis_op.add_set_value("name_set", "James")self.assertEqual(isinstance(result, int), True)result = self.redis_op.add_set_value("name_set", "Bob")self.assertEqual(isinstance(result, int), True)def test_get_set_members(self):result = self.redis_op.get_set_members("name_set")self.assertEqual(isinstance(result, list), True)# 测试有序集合操作相关方法def test_add_zset_value(self):result = self.redis_op.add_zset_value("score_zset", {"James": 86, "Bob": 90, "Alice": 65})self.assertEqual(isinstance(result, int), True)def test_get_zset_range(self):result = self.redis_op.get_zset_range("score_zset")self.assertEqual(isinstance(result, list), True)def test_get_zset_range_with_scores(self):result = self.redis_op.get_zset_range("score_zset", withscores=True)self.assertEqual(isinstance(result, list), True)# 测试删除键操作def test_delete_key(self):for key in ["name", "name_list", "hash_key1", "hash_key2", "name_set", "score_zset"]:result = self.redis_op.delete_key(key)self.assertEqual(isinstance(result, int), True)if __name__ == '__main__':unittest.main()
四、总结
Redis是一个不错的缓存工具,可以作为应用程序和后端数据库之间的缓存层,把频繁访问的数据放在Redis,可以大大减少对后端数据库的访问压力。
Redis中的有序列表、Pub/Sub功能也可以用来实现简单的消息队列系统,例如用于异步处理任务、解耦系统组件等。
Redis中的有序集合可以实现排行榜功能,能够实时更新排名数据并快速查询排名情况。
Redis的原子特性可以用来实现计数器功能,如网站的访问量计数、用户点赞数计数等,能够保证在高并发情况下计数的准确性。
相关文章:
linux安装redis及Python操作redis
目录 一、Redis安装 1、下载安装包 2、解压文件 3、迁移文件夹 4、编译 5、管理redis文件 6、修改配置文件 7、启动Redis 8、将redis服务交给systemd管理 二、Redis介绍 1、数据结构 ①字符串String ②列表List ③哈希Hash ④集合Set ⑤有序集合Sorted Set 2、…...
万里数据库GreatSQL监控解析
GreatSQL是MySQL的一个分支,专注于提升MGR(MySQL Group Replication)的可靠性及性能。乐维监控平台可以有效地监控GreatSQL,帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理,收集数据库性…...
商米电子秤服务插件
概述 SunmiScaleUTS封装商米电子秤服务模块,支持商米旗下S2, S2CC, S2L CC等设备,设备应用于超市、菜市场、水果店等,用于测量商品的重量,帮助实现快捷、准确、公正的交易等一系列商业场景。 功能说明 SDK插件下载 一. 电子秤参数 型号:S2, S2CC, …...
Java-写一个计数器
一个简单的线程安全的计数器实现。我们将使用AtomicInteger来确保计数操作是线程安全的,并 且提供基本的增减和获取计数值的功能。 简单线程安全计数器 import java.util.concurrent.atomic.AtomicInteger;public class Counter {private final AtomicInteger count = new …...
VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”
VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”解决方案: 1.用get-ExecutionP…...
微信小程序 单选多选radio/checkbox 纯代码分享
单选按钮 <radio-group class"radiogroup" bindchange"radioChange"> <label class"radio" wx:for"{{items}}"> <radio value"{{item.name}}" checked"{{item.checked}}" /> {{item.value}} &…...
Visual Studio 2022安装教程
1、下载网址 Visual Studio 2022 IDE安装网址借助 Visual Studio 设计,具有自动完成、构建、调试、测试功能的代码将与 Git 管理和云部署融为一体。https://visualstudio.microsoft.com/zh-hans/vs/ 点击图片所示 双击运行 2、安装 点击C桌面开发(右边…...
批量读取pdf发票中二维码的信息
如下代码Java类: import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.metadata.Writ…...
Apache Hive常见问题
入门问题 什么是Apache Hive? 解释Hive的用途。Hive作为基于Hadoop的数据仓库工具是如何工作的?与传统关系型数据库相比,使用Hive有什么优势? Hive和关系型数据库管理系统(RDBMS)之间的区别是什么&#…...
SpringCloud源码分析-Gateway
Gateway核心原理,请求经过一系列的责任链最后到达服务端。...
基于N-HiTS神经层次插值模型的时间序列预测——cross validation交叉验证与ray tune超参数优化
论文链接:https://arxiv.org/pdf/2201.12886v3 N-HiTS: Neural Hierarchical Interpolation for TimeSeries Forecasting \begin{aligned} &\text{\large \color{#CDA59E}N-HiTS: Neural Hierarchical Interpolation for TimeSeries Forecasting}\\ \end{aligne…...
Windmill 实战:快速构建自动化工作流和用户界面
1. 引言 在当今快节奏的开发环境中,能够快速构建内部工具和自动化工作流的平台变得越来越重要。Windmill 就是这样一个强大的开源开发者基础设施平台,它能够将脚本自动转换为工作流程和用户界面。本文将深入探讨 Windmill 的使用,从安装到实际应用,帮助您了解如何利用这个…...
51c自动驾驶~合集44
我自己的原文哦~ https://blog.51cto.com/whaosoft/12969097 #Towards Generalist Robot Policies 清华大学&字节 | 迈向通用机器人策略:如何选择VLA? 论文标题:Towards Generalist Robot Policies: What Matters in Building Vision…...
设计模式 创建型 工厂模式(Factory Pattern)与 常见技术框架应用 解析
工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种封装对象创建过程的方式,使得对象的创建与使用分离,从而提高了系统的可扩展性和可维护性。 一、核心思想 工厂模式的核心思想是将“实例化对象”的操作与…...
ElasticSearch7.10-分词器
文章目录 分词器1.字符过滤器1.介绍2.过滤html标签3.mappings过滤规则(屏蔽非文明用语)4.正则替换 2.自定义分词器1.代码2.查询 3.中文分词器1.下载ik分词器7.10.0版本(跟es对应)2.应用ik分词器1.进入插件目录下创建一个ik目录2.将…...
MLP、CNN、Transformer 的区别解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
Android Camera压力测试工具
背景描述: 随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。 对于压…...
[Qt] 常用控件 | QWidget | “表白程序2.0”
目录 一、控件概述 控件体系的发展阶段: 二、QWidget 核心属性 核心属性概览: 1、enabled 2、Geometry 实例 1: 控制按钮的位置 实例 2: 表白 程序 i、Window Frame 的影响 ii、API 设计理念 iii、Geometry 和 FrameGeometry 的区别 …...
word无法插入svg格式图片
插入后出现这样的窗口,表明word版本低,没有svg这个选项。 因此这就是区别。在b站找升级word视频。...
【UE5 C++课程系列笔记】20——共享指针的简单使用
目录 概念 创建共享指针示例 重设共享指针 共享指针内容转移 概念 共享指针(主要以 TSharedPtr 为例),TSharedPtr 基于引用计数机制来工作,旨在解决对象所有权共享以及确保在合适的时候自动释放对象资源的问题。它允许多个 TS…...
Oracle 数据库 dmp文件从高版本导入低版本的问题处理
当前有个需求是将oracle 19c上的数据备份恢复到oracle 11g上使用。我们通过exp命令远程进行备份,然后通过imp进行恢复时出现IMP-00010: not a valid export file, header failed verification报错。 这是数据库版本问题,在使用exp命令导出的时候使用的客…...
Tomcat优化指南
以下是一份详细的Tomcat优化指南: 一、JVM(Java虚拟机)优化 内存设置 堆内存(Heap Memory) 调整-Xms(初始堆大小)和-Xmx(最大堆大小)参数。一般来说,将初始…...
本地调试自定义Maven Plugin步骤
添加自定义插件到dependencies 找到对应依赖的类,打上断点。 debug运行插件。...
css实现文字描边
效果 学习啦 -webkit-text-stroke-width: 设置文本描边的宽度,值可以是任何长度单位(如 px, em, rem 等) -webkit-text-stroke-color:设置文本描边的颜色,值可以是任何颜色值(如 red, green, bl…...
B2B营销的新篇章:开源AI智能名片S2B2C商城小程序的应用探索
摘要: B2B营销,作为企业间营销活动的总称,因其独特的业务特性而呈现出不同于B2C营销的显著特征。在数字化转型的大潮中,B2B企业正积极探索新的营销手段以提高效率和竞争力。本文旨在探讨B2B营销的基本特性,并重点引入…...
坐标系统转换方法研究与实现
坐标系统转换方法研究与实现 摘要:坐标系统是测量工作中定位的基础,坐标系统有很多形式和基准,不同历史时期所建立和使用的坐标系是不同的。随着科学技术的进步,测量方法和观测技术不断改进,采用的参考椭球及定位方式也逐步完善和精化。为更加精确的确定点位信息并综合利…...
naive ui 使用地址记录
naive ui 地址Naive UI Naive UI 是一个 Vue3 的组件库。 要了解如何安装,参见安装。 它比较完整,主题可调,用 TypeScript 写的,快...
std__invoke 的使用
std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数(通过指针或引用)4. 调用函数对象(仿函数)5. 调用 Lambda 表达式 4. std::invoke 的优势…...
【Vue】深入理解v-model指令-父子组件数据绑定
一、什么是v-model? v-model是Vue.js中的一个指令,用于在表单元素上实现数据的双向绑定。简单来说,v-model可以让我们轻松地读取和更新数据,无需手动操作DOM。 二、标签选择器组件分析 我们先来看一下子组件的代码:…...
html+css+js网页设计 美食 六角西餐厅美食3个页面
htmlcssjs网页设计 美食 六角西餐厅美食3个页面 (带js) 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取…...
ubuntu 常见问题(持续记录)
1 ubuntu server 22.04 设置静态 IP ubuntu server 在重启之后,IP 会变化,这很不利于作内网穿透,因此很有必要使用静态 IP。 登录进系统之后: cd /etc/netplan/ ls # 我这里是 50-cloud-init.yamlifconfig # 查看网卡接口&…...
网络安全 | 物联网安全:从设备到网络的全方位防护
网络安全 | 物联网安全:从设备到网络的全方位防护 一、前言二、物联网设备安全2.1 物联网设备的特点与安全风险2.2 物联网设备安全防护策略 三、物联网网络通信安全3.1 物联网网络通信的安全挑战3.2 物联网网络通信安全防护措施 四、物联网数据安全4.1 物联网数据的…...
浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader
1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量(Tensor)数据进行简单包装整合的数据集类,它主要的作用是将相关联的数据(比如特征数据和对应的标签数据等)组合在一起&…...
大模型 LangChain 开发框架-初探
大模型 LangChain 开发框架-初探 一、LangChain 概述 LangChain 是一个强大的由大型语言模型(LLM)驱动的应用程序开发框架。它的核心价值在于提供了标准化组件接口、高效的任务编排能力以及可观察性和评估机制。通过这些特性,LangChain 有效…...
MySQL 窗口函数
MySQL 窗口函数 1,窗口函数 1.1,什么是窗口函数1.2,基本语法 2,函数详解 2.1,聚合函数2.2,排序函数2.3,偏移函数2.4,值函数 3,进阶用法 1,窗口函数 1.1&am…...
【大模型系列】MultiUI(2024.11)
Paper:https://arxiv.org/pdf/2410.13824Github:https://neulab.github.io/MultiUI/Author:Junpeng Liu et al., 卡内基梅隆 核心1: 先基于text-based LLMs获取网页的accessibility tree(辅助功能树,https://200t.w3c…...
学习笔记079——数据结构之【树】
文章目录 1、重点概念1.1、结点概念1.2、树节点声明 2、树2.1、定义2.2、结点的度2.3、结点关系2.4、结点层次2.5、树的深度 3、二叉树3.1、定义3.2、二叉树特点3.3、二叉树性质3.4、斜树3.5、满二叉树3.6、完全二叉树3.7、二叉树的存储结构3.7.1、顺序存储3.7.2、二叉链表 3.8…...
CPT203 Software Engineering 软件工程 Pt.3 系统建模(中英双语)
文章目录 5. System Modeling(系统建模)5.1 Context models(上下文模型)5.2 Interaction models(交互模型)5.2.1 Use case modeling(用况建模)5.2.2 Sequence diagram(顺…...
vue使用vue-seamless-scroll进行轮播滚动展示内容
我这里只是记录下一些基本的东西,具体大家可以查看官网介绍,有更详细的使用文档(目前有vue和js版本): https://chenxuan0000.github.io/vue-seamless-scroll/zh/ 安装组件: npm install vue-seamless-scro…...
python入门
目录 一、Python的诞生 二、Python的特点 三、Python环境的搭建 1.搭建运行环境 2.搭建开发环境 一、Python的诞生 如果大家在上大学之前有接触过一些关于编程的课程,Python绝对是最早接触的语言之一。 在学习任何一门编程语言之前,都需要了解它的…...
深度解析 Python 网络框架:Django、Tornado、Flask 和 Twisted
目录 引言Python 网络框架概述Django:全栈开发的首选框架 3.1 Django 的核心特性3.2 Django 的应用场景3.3 优势与不足 Tornado:高性能的异步框架 4.1 Tornado 的异步特性4.2 Tornado 的应用场景4.3 优势与不足 Flask:轻量级的微框架 5.1 Fl…...
摆脱Zotero存储限制:WebDAV结合内网穿透打造个人文献管理云平台
文章目录 前言一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 前言 如果你是科研工作者、学生或者任何需要频繁处理大量学术资料的人士,你一定对如何高效管理和引用文献感到头…...
Unity 对Sprite或者UI使用模板测试扣洞
新建两个材质球: 选择如下材质 设置如下参数: 扣洞图片或者扣洞UI的材质球 Sprite或者UI的材质球 新建一个单独Hole的canvas,将SortOrder设置为0,并将原UI的canvans的SortOrder设置为1 对2DSprite则需要调整下方的参数 hole的O…...
Wend看源码-Java-Arrays 工具集学习
摘要 java.util.Arrays 是 Java 标准库中的一个实用工具类,它提供了各种静态方法来操作数组,包括排序、搜索、比较、填充等。这些方法简化了对数组的操作,并且在很多情况下可以提高代码的可读性和效率。以下是关于Arrays类中提供的一些主要方…...
【算法复健】0102 快速选择算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、算法引入1. 冒泡排序2.快速排序3. 快速选择(1)题目:数组中的第K个最大元素(2)代码 前言 本文由快速排序算法引入快速选…...
【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?
今天在开发一个HarmonyOS NEXT的应用的时候,发现http接口如果返回的状态码是424时,我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现: 我的拦截器代码如下: 解决办法: 先说解决办法ÿ…...
口语笔记——使动词
每个使动词都可以有三种形式,以move为例: move作为动词可表达:使……感动,让……感动,通常用于主谓宾结构。ed作为形容词可表达:感动的,通常用于主系表结构。ing作为形容词可表达:令…...
SQL-leetcode-196. 删除重复的电子邮箱
196. 删除重复的电子邮箱 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 编写解…...
汇编语言:从键盘输入数字字符,(计算阶乘),以无符号十进制形式输出(分支、循环程序)
1.分支结构原理 分支结构是汇编语言中的一种基本控制结构,它允许程序根据条件选择执行不同的路径。分支结构通常通过跳转(jump)指令来实现。 条件判断: 汇编语言中的条件判断通常通过比较(compare)指令来实…...
汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%
汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型损坏: 前挡风玻璃(damage-front-windscreen ) 损坏的门 (damaged-d…...