debian系统redis-dump安装
1. Ruby 环境
Redis-dump 是一个 Ruby 工具,需先安装 Ruby 和 RubyGems。
安装命令:
sudo apt update
sudo apt install ruby-full build-essential
[root@a29d39f5fd10:/opt/redis-dump/bin# apt install ruby-full build-essential
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ruby-full is already the newest version (1:3.1).
build-essential is already the newest version (12.9).
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
2. 编译工具和开发库
某些 Ruby Gem 可能需要编译本地扩展,需安装构建工具和依赖库:
sudo apt install libssl-dev libreadline-dev zlib1g-dev
root@a29d39f5fd10:/opt/redis-dump/bin# apt install libssl-dev libreadline-dev zlib1g-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libssl-dev is already the newest version (3.0.16-1~deb12u1).
libreadline-dev is already the newest version (8.2-1.3).
zlib1g-dev is already the newest version (1:1.2.13.dfsg-1).
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
root@a29d39f5fd10:/opt/redis-dump/bin# apt install libssl-dev libreadline-dev zlib1g-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libssl-dev is already the newest version (3.0.16-1~deb12u1).
libreadline-dev is already the newest version (8.2-1.3).
zlib1g-dev is already the newest version (1:1.2.13.dfsg-1).
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
root@a29d39f5fd10:/opt/redis-dump/bin# apt install libssl-dev libreadline-dev zlib1g-dev -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libssl-dev is already the newest version (3.0.16-1~deb12u1).
libreadline-dev is already the newest version (8.2-1.3).
zlib1g-dev is already the newest version (1:1.2.13.dfsg-1).
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
作用:
- libssl-dev: SSL/TLS 支持。
- libreadline-dev: 增强命令行交互功能。
- zlib1g-dev: 压缩库支持。
3. 安装 redis-dump
直接通过 RubyGems 安装:
gem install redis-dump
root@a29d39f5fd10:/opt/redis-dump/bin# gem install redis-dump
Fetching redis-dump-0.6.1.gem
Successfully installed redis-dump-0.6.1
Parsing documentation for redis-dump-0.6.1
Installing ri documentation for redis-dump-0.6.1
Done installing documentation for redis-dump after 0 seconds
1 gem installed
验证安装
redis-dump -v
root@a29d39f5fd10:/opt/redis-dump/bin# redis-dump -v
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- redis (LoadError)from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb:7:in `<top (required)>'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/exe/redis-dump:18:in `<top (required)>'from /usr/local/bin/redis-dump:25:in `load'from /usr/local/bin/redis-dump:25:in `<main>'
安装redis
root@a29d39f5fd10:/opt/redis-dump/bin# gem install redis
Fetching redis-5.4.0.gem
Fetching connection_pool-2.5.3.gem
Fetching redis-client-0.24.0.gem
Successfully installed connection_pool-2.5.3
Successfully installed redis-client-0.24.0
Successfully installed redis-5.4.0
Parsing documentation for connection_pool-2.5.3
Installing ri documentation for connection_pool-2.5.3
Parsing documentation for redis-client-0.24.0
Installing ri documentation for redis-client-0.24.0
Parsing documentation for redis-5.4.0
Installing ri documentation for redis-5.4.0
Done installing documentation for connection_pool, redis-client, redis after 0 seconds
3 gems installed
再次验证
root@a29d39f5fd10:/opt/redis-dump/bin# redis-dump --version
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- yajl (LoadError)
Did you mean? yamlfrom <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb:8:in `<top (required)>'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/exe/redis-dump:18:in `<top (required)>'from /usr/local/bin/redis-dump:25:in `load'from /usr/local/bin/redis-dump:25:in `<main>'
安装yajl
root@a29d39f5fd10:/opt/redis-dump/bin# gem install yajl-ruby
Fetching yajl-ruby-1.4.3.gem
Building native extensions. This could take a while...
Successfully installed yajl-ruby-1.4.3
Parsing documentation for yajl-ruby-1.4.3
Installing ri documentation for yajl-ruby-1.4.3
Done installing documentation for yajl-ruby after 0 seconds
1 gem installed
再次验证
root@a29d39f5fd10:/opt/redis-dump/bin# redis-dump --version
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- uri/redis (LoadError)from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb:11:in `<top (required)>'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/exe/redis-dump:18:in `<top (required)>'from /usr/local/bin/redis-dump:25:in `load'from /usr/local/bin/redis-dump:25:in `<main>'
修复uri/redis错误
出现 LoadError: cannot load such file – uri/redis 错误是因为 redis-dump 的代码中存在错误的 require 语句,错误地尝试加载 uri/redis(该库不存在)。以下是解决方法:
定位错误文件
root@a29d39f5fd10:/opt/redis-dump/bin# find /var/lib/gems -name "dump.rb" # 查找 redis-dump 的 dump.rb 文件
/var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb
查看错误文件内容
root@a29d39f5fd10:/opt/redis-dump/bin# vi /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb
bash: vi: command not found
root@a29d39f5fd10:/opt/redis-dump/bin# cat /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rbunless defined?(RD_HOME)RD_HOME = File.expand_path(File.join(File.dirname(__FILE__), '..', '..') )
endrequire 'redis'
require 'yajl'
require 'base64'require 'uri/redis'require_relative "dump/version"class Redisclass Dumpunless defined?(Redis::Dump::VALID_TYPES)VALID_TYPES = ['string', 'set', 'list', 'zset', 'hash', 'none'].freezeend@host = '127.0.0.1'@port = 6379@debug = false@encoder = Yajl::Encoder.new@parser = Yajl::Parser.new@chunk_size = 10000@with_optimizations = true@with_base64 = falseclass << selfattr_accessor :debug, :encoder, :parser, :safe, :host, :port, :password, :timeout, :chunk_size, :with_optimizations, :with_base64def le(msg)STDERR.puts "#%.4f: %s" % [Time.now.utc.to_f, msg]enddef ld(msg)STDERR.puts "#%.4f: %s" % [Time.now.utc.to_f, msg] if debugenddef memory_usage`ps -o rss= -p #{Process.pid}`.to_i # in kbenddef check_utf8=(check)if check == false@parser = Yajl::Parser.new(:check_utf8 => false)endendendattr_accessor :dbs, :uriattr_reader :redis_connectionsdef initialize(dbs=nil, uri="redis://#{Redis::Dump.host}:#{Redis::Dump.port}")@redis_connections = {}@uri = uriunless dbs.nil?@dbs = Range === dbs ? dbs : (dbs..dbs)@dbs = (@dbs.first.to_i..@dbs.last.to_i) # enforce integers@dbs.to_a.each { |db| redis(db) } # open_all_connectionsendenddef redis(db)redis_connections["#{uri}/#{db}"] ||= connect("#{uri}/#{db}")enddef connect(this_uri)self.class.ld 'CONNECT: ' << this_uriopts = {:url => this_uri}opts[:password] = Redis::Dump.password if Redis::Dump.passwordopts[:timeout] = Redis::Dump.timeout if Redis::Dump.timeoutRedis.new **optsenddef each_database@redis_connections.keys.sort.each do |redis_uri|yield redis_connections[redis_uri]endenddef dump filter=nilfilter ||= '*'entries = []each_database do |redis|chunk_entries = []Redis::Dump.ld "[db#{redis.connection[:db]}] Memory before: #{Redis::Dump.memory_usage}kb"dump_keys = redis.keys(filter)dump_keys_size = dump_keys.sizeRedis::Dump.ld "[db#{redis.connection[:db]}] Dumping #{dump_keys_size} keys: #{dump_keys.join(', ')}"dump_keys.each_with_index do |key,idx|entry, idxplus = key, idx+1if block_given?chunk_entries << entryprocess_chunk idx, dump_keys_size do |count|Redis::Dump.ld " dumping #{chunk_entries.size} (#{count}) from #{redis.connection[:id]}"output_buffer = []chunk_entries = chunk_entries.select do |key|type = Redis::Dump.type(redis, key)if self.class.with_optimizations && type == 'string'trueelseoutput_buffer.push self.class.encoder.encode(Redis::Dump.dump(redis, key, type))falseendendunless output_buffer.empty?yield output_bufferendunless chunk_entries.empty?yield Redis::Dump.dump_strings(redis, chunk_entries) { |obj| self.class.encoder.encode(obj) }endoutput_buffer.clearchunk_entries.clearendelseentries << self.class.encoder.encode(Redis::Dump.dump(redis, entry))endendRedis::Dump.ld "[db#{redis.connection[:db]}] Memory after: #{Redis::Dump.memory_usage}kb"endentriesenddef process_chunk idx, total_sizeidxplus = idx+1yield idxplus if (idxplus % self.class.chunk_size).zero? || idxplus >= total_sizeendprivate :process_chunkdef report filter='*'values = []total_size, dbs = 0, {}each_database do |redis|chunk_entries = []dump_keys = redis.keys(filter)dump_keys_size = dump_keys.sizedump_keys.each_with_index do |key,idx|entry, idxplus = Redis::Dump.report(redis, key), idx+1chunk_entries << entryprocess_chunk idx, dump_keys_size do |count|Redis::Dump.ld " reporting on #{chunk_entries.size} (#{idxplus}) from #{redis.connection[:id]}"chunk_entries.each do |e|puts record if obj.global.verbose >= 1dbs[e['db']] ||= 0dbs[e['db']] += e['size']total_size += e['size']endchunk_entries.clearendendendputs dbs.keys.sort.collect { |db| " db#{db}: #{dbs[db].to_bytes}" }puts "total: #{total_size.to_bytes}"valuesenddef load(string_or_stream, &each_record)count = 0Redis::Dump.ld " LOAD SOURCE: #{string_or_stream}"Redis::Dump.parser.parse string_or_stream do |obj|unless @dbs.member?(obj["db"].to_i)Redis::Dump.ld "db out of range: #{obj["db"]}"nextendthis_redis = redis(obj["db"])Redis::Dump.ld "load[#{this_redis.hash}, #{obj}]"if each_record.nil?if Redis::Dump.safe && this_redis.exists(obj['key'])Redis::Dump.ld " record exists (no change)"nextendbeginval, type = obj['value'], obj['type']Redis::Dump.ld " > load `#{val}`"if Redis::Dump.with_base64 && type === 'string'Redis::Dump.ld " > load+decode64 for `#{val}`"val = Base64.decode64 valendret = Redis::Dump.set_value this_redis, obj['key'], type, val, obj['ttl']rescue => exRedis::Dump.le '(key: %s) %s' % [obj['key'], ex.message]endelseeach_record.call objendcount += 1endcountendmodule ClassMethodsdef type(this_redis, key)type = this_redis.type keyraise TypeError, "Unknown type: #{type}" if !VALID_TYPES.member?(type)typeenddef report(this_redis, key)info = { 'db' => this_redis.connection[:db], 'key' => key }info['type'] = type(this_redis, key)info['size'] = stringify(this_redis, key, info['type'], info['value']).sizeinfo['bytes'] = info['size'].to_bytesinfoenddef dump(this_redis, key, type=nil)type ||= type(this_redis, key)info = { 'db' => this_redis.connection[:db], 'key' => key }info['ttl'] = this_redis.ttl keyinfo['type'] = typestringified = stringify(this_redis, key, info['type'], info['value'])info['value'] = value(this_redis, key, info['type'])info['size'] = stringified.sizeif Redis::Dump.with_base64 && type === 'string'info['value'] = Base64.encode64(info['value'])endinfoenddef dump_strings(this_redis, keys)vals = this_redis.mget *keysidx = -1keys.collect { |key|idx += 1val = vals[idx].to_sinfo = {'db' => this_redis.connection[:db],'key' => key,'ttl' => this_redis.ttl(key),'type' => 'string','value' => Redis::Dump.with_base64 ? Base64.encode64(val) : val,'size' => vals[idx].to_s.size}block_given? ? yield(info) : info}enddef set_value(this_redis, key, type, value, expire=nil)t ||= typesend("set_value_#{t}", this_redis, key, value)this_redis.expire key, expire if expire.to_s.to_i > 0enddef value(this_redis, key, t=nil)send("value_#{t}", this_redis, key)enddef stringify(this_redis, key, t=nil, v=nil)send("stringify_#{t}", this_redis, key, v)enddef set_value_hash(this_redis, key, hash)hash.keys.each { |k| this_redis.hset key, k, hash[k] }enddef set_value_list(this_redis, key, list)list.each { |value| this_redis.rpush key, value }enddef set_value_set(this_redis, key, set)set.each { |value| this_redis.sadd? key, value }enddef set_value_zset(this_redis, key, zset)zset.each { |pair| this_redis.zadd key, pair[1].to_f, pair[0] }enddef set_value_string(this_redis, key, str)this_redis.set key, strenddef set_value_none(this_redis, key, str)# ignoreenddef value_string(this_redis, key) this_redis.get key enddef value_list (this_redis, key) this_redis.lrange key, 0, -1 enddef value_set (this_redis, key) this_redis.smembers key enddef value_zset (this_redis, key) this_redis.zrange(key, 0, -1, :with_scores => true).flatten.tuple enddef value_hash (this_redis, key) this_redis.hgetall(key) enddef value_none (this_redis, key) '' enddef stringify_string(this_redis, key, v=nil) (v || value_string(this_redis, key)) enddef stringify_list (this_redis, key, v=nil) (v || value_list(this_redis, key)).join enddef stringify_set (this_redis, key, v=nil) (v || value_set(this_redis, key)).join enddef stringify_zset (this_redis, key, v=nil) (v || value_zset(this_redis, key)).flatten.compact.join enddef stringify_hash (this_redis, key, v=nil) (v || value_hash(this_redis, key)).to_a.flatten.compact.join enddef stringify_none (this_redis, key, v=nil) (v || '') endendextend Redis::Dump::ClassMethodsclass Problem < RuntimeErrordef initialize(*args)@args = args.flatten.compactenddef message() @args && @args.first endendend
endclass Arraydef chunk(number_of_chunks)chunks = (1..number_of_chunks).collect { [] }chunks.each do |a_chunk|a_chunk << self.shift if self.any?endchunksendalias / chunkdef tuple(tuple_size=2)tuples = (1..(size/tuple_size)).collect { [] }tuples.each_with_index do |a_tuple,idx|tuple_size.times { a_tuple << self.shift } if self.any?endtuplesend
endclass Numericdef to_ms(self*1000).to_iend# TODO: Use 1024?def to_bytesargs = case self.abs.to_iwhen (1000)..(1000**2)'%3.2f%s' % [(self / 1000.to_f).to_s, 'KB']when (1000**2)..(1000**3)'%3.2f%s' % [(self / (1000**2).to_f).to_s, 'MB']when (1000**3)..(1000**4)'%3.2f%s' % [(self / (1000**3).to_f).to_s, 'GB']when (1000**4)..(1000**6)'%3.2f%s' % [(self / (1000**4).to_f).to_s, 'TB']else[self, 'B'].joinendend
end
编辑文件内容
root@a29d39f5fd10:/opt/redis-dump/bin# nano /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb
bash: nano: command not found
安装nano
root@a29d39f5fd10:/opt/redis-dump/bin# apt-get install -y nano
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:hunspell
The following NEW packages will be installed:nano
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 680 kB of archives.
After this operation, 2916 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 nano arm64 7.2-1+deb12u1 [680 kB]
Fetched 680 kB in 1s (475 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package nano.
(Reading database ... 42773 files and directories currently installed.)
Preparing to unpack .../nano_7.2-1+deb12u1_arm64.deb ...
Unpacking nano (7.2-1+deb12u1) ...
Setting up nano (7.2-1+deb12u1) ...
update-alternatives: using /bin/nano to provide /usr/bin/editor (editor) in auto mode
update-alternatives: using /bin/nano to provide /usr/bin/pico (pico) in auto mode
root@a29d39f5fd10:/opt/redis-dump/bin# nano /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb
再次编辑文件
root@a29d39f5fd10:/opt/redis-dump/bin# nano /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/lib/redis/dump.rb
将require ‘uri/redis’ 修改位require ‘uri’
保存并退出编辑器(Ctrl+O → Enter → Ctrl+X)
再次验证
root@a29d39f5fd10:/opt/redis-dump/bin# redis-dump --version
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- drydock (LoadError)from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'from /var/lib/gems/3.1.0/gems/redis-dump-0.6.1/exe/redis-dump:19:in `<top (required)>'from /usr/local/bin/redis-dump:25:in `load'from /usr/local/bin/redis-dump:25:in `<main>'
安装drydock
root@a29d39f5fd10:/opt/redis-dump/bin# gem install drydock
Fetching drydock-0.6.9.gem
Successfully installed drydock-0.6.9
Parsing documentation for drydock-0.6.9
Installing ri documentation for drydock-0.6.9
Done installing documentation for drydock after 0 seconds
1 gem installed
再次验证
root@a29d39f5fd10:/opt/redis-dump/bin# redis-dump --version
redis-dump v0.6.1
root@a29d39f5fd10:/opt/redis-dump/bin#
相关文章:
debian系统redis-dump安装
1. Ruby 环境 Redis-dump 是一个 Ruby 工具,需先安装 Ruby 和 RubyGems。 安装命令: sudo apt update sudo apt install ruby-full build-essential[roota29d39f5fd10:/opt/redis-dump/bin# apt install ruby-full build-essential Reading pac…...
AI智能分析网关V4玩手机检测算法精准管控人员手机行为,搭建智慧化安防监管体系
一、背景 移动终端普及使随意用机成为常态,在生产车间、加油站、考场、手术室等场景,人员使用手机易引发生产事故、爆炸、作弊、仪器干扰等问题。传统人工巡查存在覆盖不足、响应慢、主观性强等局限,难以满足现代安全管理需求。AI智能分析…...
支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!
之前文章和大家分享过,将会出一篇专栏(从电脑装ubuntu系统,到安装ubuntu的常用基础软件:jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等),目前…...
小土堆pytorch--神经网络-非线性激活线性层及其他层介绍
1. 神经网络-非线性激活 1.1 relu与sigmoid 1.1.1 ReLU(Rectified Linear Unit,修正线性单元 ) 定义与数学表达:数学定义为 f ( x ) max ( 0 , x ) f(x) \max(0, x) f(x)max(0,x) ,即当输入 x > 0 x > …...
【Vue3】数据的返回和响应式处理(ref reactive)
目录 一、拉开序幕的setup 二、ref函数 2.1 访问对象的响应式处理 小结:ref函数 三、reactive函数 3.1 reactive同样也可以修改数组: 3.2 reactive小结: 四、Vue3中的响应式原理 4.1 vue2的响应式,对象属性的添加 4.2…...
【Rust智能指针】Rust智能指针原理剖析与应用指导
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
C++ - 仿 RabbitMQ 实现消息队列(3)(详解使用muduo库)
C - 仿 RabbitMQ 实现消息队列(3)(详解使用muduo库) muduo库的基层原理核心概念总结:通俗例子:餐厅模型优势体现典型场景 muduo库中的主要类EventloopMuduo 的 EventLoop 核心解析1. 核心机制:事…...
Java异常处理全解析:从基础到自定义
目录 🚀前言🤔异常的定义与分类💯运行时异常💯编译时异常💯异常的基本处理 🌟异常的作用🐧自定义异常💯自定义运行时异常💯自定义编译时异常 ✍️异常的处理方案…...
C++初阶-vector的模拟实现2
目录 1.vector已经实现的代码总结 2.vector::resize的模拟实现 3.vector::vector(const vector& v)拷贝构造函数的模拟实现 4.vector::operator(const vector& x)的模拟实现(原始写法) 5.vector::swap的模拟实现 6.vector::operator(const …...
【图数据库】--Neo4j 安装
目录 1.Neo4j --概述 2.JDK安装 3.Neo4j--下载 3.1.下载资源包 3.2.创建环境变量 3.3.运行 Neo4j 是目前最流行的图形数据库(Graph Database),它以节点(Node)、关系(Relationship)和属性(Property)的形式存储数据,专门为处理高度连接的数据而设计。…...
elementui初学1
当然可以!下面是从零开始创建一个最简单的 Element UI 程序的完整流程,基于 Vue 2 Element UI(如果你想用 Vue 3,请告诉我,我可以给你 Element Plus 的版本)。 ✅ 一、准备环境 确保你已经安装了…...
lanqiaoOJ 4185:费马小定理求逆元
【题目来源】 https://www.lanqiao.cn/problems/4185/learning/ 【题目描述】 给出 n,p,求 。其中, 指存在某个整数 0≤a<p,使得 na mod p1,此时称 a 为 n 的逆元,即 。数据保证 p 是质数且 n mod p≠0…...
计算机视觉与深度学习 | Python实现CEEMDAN-ISOS-VMD-GRU-ARIMA时间序列预测(完整源码和数据)
以下是结合CEEMDAN、ISOS-VMD、GRU和ARIMA的时间序列预测的Python完整实现方案。本方案包含完整的代码、数据生成逻辑和实现细节说明。 完整代码实现 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from scipy.optimize import di…...
前端开发遇到 Bug,怎么办?如何利用 AI 高效解决问题
前端开发遇到 Bug,怎么办?如何利用 AI 高效解决问题 作为前端开发者,遇到 Bug 几乎是日常。无论是样式错乱、功能异常,还是接口数据不对,Bug 总能让人头疼。但随着人工智能(AI)技术的发展&…...
博主总结框架
1.博主总结框架 1.1 计算机基础类(数据结构、计算机网络、操作系统等) (1)数据结构 (2)操作系统 (3)计算机网络 (4)其他 物联网入门框架 1.2 计算机图形…...
国产化Excel处理组件Spire.XLS for .NET系列教程:通过 C# 将 TXT 文本转换为 Excel 表格
在数据处理和管理场景中,将原始文本文件(TXT)高效转换为结构化的 Excel 电子表格是一项常见要求。对于那些需要自动生成报表或者处理日志文件的开发人员而言,借助 C# 实现 TXT 到 Excel 的转换工作,可以简化数据组织和…...
网络安全--PHP第一天
目标 熟悉信息传递架构 基于phpstydy-mysql-php 前置条件 需要先在数据库中创建相应的库和表名并配置表的结构 该文件为数据库配置文件 名字为config.php <?php $dbip localhost;//连接数据库的地址 远程连接需要输入ip等 $dbuser root;//连接数据库的用户 $dbpass ro…...
结构型:组合模式
目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 1、核心思想 目的:将总是在重复、迭代地显示的某种自相似性的结构(部分与整体结构特征相似),例如树形结构,以统一的方式处…...
Node.js多版本安装工具NVM详细使用教程
一、nvm 简介 nvm(Node Version Manager)是一个用于管理多个 Node.js 版本的命令行工具,允许开发者在单个系统中轻松切换、安装和卸载不同版本的 Node.js。它是前端和后端开发中处理 Node.js 版本兼容性问题的核心工具之一。 二、nvm 安装 …...
深度解析 Java 中介者模式:重构复杂交互场景的优雅方案
一、中介者模式的核心思想与设计哲学 在软件开发的历史长河中,对象间的交互管理一直是架构设计的核心难题。当多个对象形成复杂的网状交互时,系统会陷入 "牵一发而动全身" 的困境。中介者模式(Mediator Pattern)作为行…...
(八)深度学习---计算机视觉基础
分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.图像数字化表示及建模基础 二.卷积神经网络CNN基本原…...
深入剖析原型模式:原理、实现与应用实践
在软件开发的世界里,设计模式如同建筑师手中的蓝图,为复杂系统的构建提供了行之有效的解决方案。其中,原型模式(Prototype Pattern)作为创建型设计模式的重要一员,以其独特的对象创建方式,在提高代码复用性、增强系统灵活性等方面发挥着关键作用。本文将深入剖析原型模式…...
【论文阅读 | CVPR 2024 |RSDet:去除再选择:一种用于 RGB - 红外目标检测的由粗到精融合视角】
论文阅读 | CVPR 2024 |RSDet:去除再选择:一种用于 RGB - 红外目标检测的由粗到精融合视角 1.摘要&&引言2. 方法2.1 “由粗到细”融合策略2.2 冗余光谱去除模块(RSR)2.3 动态特征选择模块(DFS)2.4 去除与选择检…...
WinForms 应用中集成 OpenCvSharp 实现基础图像处理
引言 欢迎关注dotnet研习社,今天我们要讨论的主题是WinForms 应用中集成 OpenCvSharp 实现基础图像处理。 在常规的图像处理软件开发中,图像处理功能是这些应用程序的核心组成部分。无论是简单的照片编辑工具,还是复杂的计算机视觉应用&…...
apache http client连接池实现原理
在java开发中我们经常会涉及到http 请求接口,一般有几种方式: java自带的 HttpURLConnectionokHttpClientapache http client 一般我们使用apache http client会比较多点,在代码中会进行如下调用方式: private static class Htt…...
adb抓包
目录 抓包步骤 步骤 1: 获取应用的包名 步骤 2: 查看单个应用的日志 步骤 3: 使用日志级别过滤器 步骤 4: 高级日志过滤 可能的原因: 解决方案: 额外提示: 日志保存 抓包步骤 连接设备 adb devices 步骤 1: 获取应用的包名 首先…...
C语言---结构体 、联合体、枚举
一、初识结构体 1、结构体类型 结构体和数组都是集合,但是结构体有成员,类型可以不同;数组有成员,类型相同。 int main() {struct tag{member--list //一个或者多个成员,成员变量}variable--list;//可以省略&#x…...
Web Workers 使用指南
文章目录 前言基础使用高级特性 使用 ES Modules实际应用场景图像处理大数据处理轮询任务 性能优化技巧现代开发方式使用 worker-loader (Webpack) Vite中的Worker使用 限制与注意事项DOM限制:通信限制:同源策略:最佳实践 前言 Web Workers 是浏览器提供的 JavaScript 多线程解…...
JVM 与容器化部署调优实践(Docker + K8s)
📌 文章目录 📘 前言1️⃣ 容器环境下 JVM 面临的新挑战2️⃣ JVM 的容器资源感知机制详解3️⃣ JVM 内存调优:如何正确使用堆内存4️⃣ JVM CPU 调优:GC 与编译线程控制5️⃣ Kubernetes 典型配置误区与对策6️⃣ 实战案例&#…...
Android OkHttp控制链:深入理解网络请求的流程管理
OkHttp作为Android和Java平台上广泛使用的HTTP客户端,其核心设计之一就是"控制链"(Chain)机制。本文将深入探讨OkHttp控制链的工作原理、实现细节以及如何利用这一机制进行高级定制。 一、什么是OkHttp控制链 OkHttp控制链是一种责任链模式的实现&#…...
《易经》的数学表达:初级版和高级版
《易经》的数学表达, 一、初级版,可基于以下框架构建, 涵盖符号系统、结构代数及变换规则: 此框架将《易经》抽象为离散数学结构,兼容符号逻辑、概率论与群论,为算法化占断、卦象拓扑分析及跨文化比较提供…...
卷积神经网络基础(十)
之前我们学习了SGD、Momentum和AdaGrad三种优化方法,今天我们将继续学习Adam方法。 6.1.6 Adam 我们知道Momentum参照的是小球在碗中滚动的物理规则进行移动而实现的,AdaGrad为参数的每个元素适当地调整更新步伐。那如果我们将这两种方法融合在一起会不…...
怎么把cursor(Cursor/ollama)安装到指定路径
使用PowerShell命令 打开电脑开始菜单,输入powerShell,使用管理员权限打开powerShell窗口,使用cd命令到cursor或ollama安装包的下载目录,如我的Cursor所在的目录为D:\environment\cursor\soft,输入以下 cd E:\downloa…...
第21天-pyttsx3语音播放功能
示例1:语音参数控制(语速/音量/音调) import pyttsx3def speech_demo():engine = pyttsx3.init()# 获取当前语音参数print("默认语速:", engine.getProperty(rate))print("默认音量:", engine.getProperty(volume))print("可用语音:", engin…...
Multi-Query Attention:传统自注意力( Self-Attention)优化显存和加速方案
本文导读:Multi-Query Attention(MQA)是 Google Research 2022 年提出的一项轻量化注意力技术,通过“多查询、单键值”的设计,把自注意力层的 KV 缓存从 O(hnd) 降到 O(nd),在不牺牲模型精度的前提下大幅节…...
学习路之uniapp--unipush2.0推送功能--服务端推送消息
学习路之uniapp--unipush2.0推送功能--服务端推送消息 一、二、三、 一、 二、 三、...
如何使用AI搭建WordPress网站
人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域,许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一,WordPress 的人工智能插件越来越多也就不足…...
Java 项目管理工具:Maven 与 Gradle 的深度对比与选择
Java 项目管理工具:Maven 与 Gradle 的深度对比与选择 在 Java 开发领域,项目管理工具对于项目的构建、依赖管理等起着至关重要的作用。Maven 和 Gradle 是目前最主流的两款工具,它们各自有着独特的优势和适用场景。本文将对 Maven 与 Gradl…...
Elasticsearch简单集成java框架方式。
Elasticsearch 在 Java 中最常用的客户端是什么?如何初始化一个 RestHighLevelClient?如何用 Spring Boot 快速集成 Elasticsearch?Spring Data Elasticsearch 如何定义实体类与索引的映射? 最常用的 Java 客户端 目前官方推荐使用…...
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Hidden Search Widget (交互式搜索框)
📅 我们继续 50 个小项目挑战!—— Hidden Search Widget 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ ✨ 组件目标 点击按钮展开隐藏的搜索框 再次点击按钮…...
python爬虫和逆向:百度翻译数据采集的几种方式
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、官方API方式(推荐)1.1 百度翻译开放平台API二、网页版逆向方式(代码可直接运行)2.1 拿到js加密方法2.2 python解密代码三、浏览器自动化方式3.1 Selenium自动化操作3.2 Playwright自动化四、移动端API逆向4.1 分…...
spring5-配外部文件-spEL-工厂bean-FactoryBean
spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架,以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…...
Ubuntu部署私有Gitlab
这个东西安装其实挺简单的,但是因为我这边迁移了数据目录和使用自己安装的 nginx 代理还是踩了几个坑,所以大家可以注意下 先看下安装 # 先安装必要组件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…...
Activiti 7建表语句及注释
Activiti数据库表Oracle兼容DM建表语句及字段注释。 附件下载版地址点这里 --通用属性表 create table ACT_GE_PROPERTY (NAME_ NVARCHAR2(64),VALUE_ NVARCHAR2(300),REV_ INTEGER,primary key (NAME_) );COMMENT ON TABLE ACT_GE_PROPERTY IS 通用属性表;COMMENT ON COLUMN …...
React中使用 Ant Design Charts 图表
// 引入 Ant Design Charts 的柱状图组件 Column import { Column } from ant-design/charts;// 定义函数组件 App,用于展示柱状图 function App() {// 数据源:每个对象代表一个柱子,包含类型(type)和销售额࿰…...
佰力博科技与您探讨压电材料的原理与压电效应的应用
压电材料的原理基于正压电效应和逆压电效应,即机械能与电能之间的双向转换特性。 压电材料的原理源于其独特的晶体结构和电-机械耦合效应,具体可分为以下核心要点: 1. 正压电效应与逆压电效应的定义 正压电效应:当压电…...
vscode打开vue + element项目
好嘞,我帮你详细整理一个用 VS Code 来可视化开发 Vue Element UI 的完整步骤,让你能舒服地写代码、预览界面、调试和管理项目。 用 VS Code 可视化开发 Vue Element UI 全流程指南 一、准备工作 安装 VS Code 官网下载安装:https://code…...
一步步解析 HTTPS
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
使用vue2做一个生成二维码的案例【可当组件使用】
最近有个需求需要用前端来生成一个二维码,就封装了一个简单的组件,这篇文章来分享给大家。 使用的技术: Vue2 Ant Design Vue QRCodeJS2 node版本:16.20 组件样式: 大家可以根据自己的需求来调整代码。 依赖安装&am…...
Hadoop-HA高可用集群启动nameNode莫名挂掉,排错解决
Hadoop-HA高可用集群启动nameNode莫名挂掉,排错解决 nameNode错误日志 2025-05-21 16:14:12,218 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node01/192.168.191.111:8485. Already tried 5 time(s); retry policy is RetryUpToMaximumCoun…...