Redis快速入门(基础篇)
简介:
-
是一个高性能的 key-value数据库。
-
存在内存中
-
与其他 key-value 缓存产品有以下三个特点:
-
-
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
-
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
-
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
-
Redis优势:
-
高性能
-
丰富的数据类型
-
原子性
-
丰富的特性
redis能干嘛?
与传统数据库MySQL关系:
-
Redis是key-value数据库(NoSQL)的一种,MySQL是关系型数据库
-
Redis数据操作主要在内存,而MySQL主要存储在磁盘
-
Redis在某一场景使用中要明显优于MySQL,比如计数器,排行榜方面
-
Redis通常用于一些特定场景,需要与MySQL一起配合使用
注意:两者并不是相互替代和竞争关系,而是共用和配合
日常使用Linux装redis,使用Linux进行开发
-
Linux环境安装redis必须先具备gcc编译环境
-
什么是gcc:是Linux下的一个编译程序,是c程序的编译工具。
-
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake yum -y install wget httpd-tools vim
-
在window上下载了redis后,使用xfile将其放到linux的 /opt 目录下
-
进入到 /opt 目录使用
tar-zxvf 你的redis压缩包
-
cd 到 解压后的 redis 目录
-
使用
make && make install
安装
-
会默认安装到
usr/local/bin
-
修改 redis7.conf 文件
-
让 redis 在后台启动
daemonize no 改为 daemonize yes
-
protected-mode yes 改为 protected-mode no
-
允许其他机器访问
注释 bind 127.0.0.1 -::1
-
设置redis访问密码
打开注释
requirepass 你的密码
-
-
运行redis服务器
redis-server /myredis/redis7.conf
出现如下报错:
67147:C 28 Oct 2023 20:46:34.584 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://githu
解决方法:
-
进入到 /etc/sysctl.conf 文件
-
添加
vm.overcommit_memory=1
-
使用命令:
vm.overcommit_memory=1
使配置文件生效
-
-
检查端口6379是否被占用:
ps -ef|grep redis|grep -v grep
-
启用redis
redis-cli -a 123456
-
测试
-
redis服务器关闭方法:
-
直接在端口号处 SHUTDOWN, 然后quit
-
远程关闭:
-
单实例:
redis-cli -a 123456 shutdown
-
多实例:
redis-cli -a 123456 -p 希望关闭的端口号 shutdown
-
-
redis10大数据类型
-
redis字符串(String
-
-
同时设置/获取多个键值
-
mset
-
mget
-
msetnx(可以理解为事务整体,成功则全成功,失败一个则全部失败)
-
-
获取指定区间范围内的值
-
getrange
-
setrange
-
-
数值增减(一定要是数字)
-
递增数字:INCR key
-
增加指定的整数:INCRBY Key increment(比如:INCRBY key1 5)
-
递减数值 DECR key
-
减少指定的整数 DECR key decrement
-
-
获取字符串长度和内容追加:
-
STRLEN key
-
APPEND key value
-
-
分布式锁
-
setnx key value
-
setex(set with expire)键秒值/setnx(set if not exist)
-
-
getset(先get再set)
-
-
redis列表(List)
-
是一个双端链表的结构容量是2的32次方-1大概40多个亿,主要功能有pop/push等,一般用在栈,消息队列等
-
lpush/rpush/lrange
-
lpop/rpop
-
按照索引下标获得元素(从上到下); lindex
-
获取列表中元素个数; llen
-
删除N个值等于v1的元素; lrem key 数字N给定值v1
-
截取指定范围的值后再赋值给key ;ltrim key 开始index 结束1index
-
rpoploush 源列表 目的列表 (将源列表的末尾值pop,然后将该值添加到目的列表的头)
-
lset key index value
-
linsert key before/after 已有值 插入的新值
-
-
redis哈希表(Hash)
-
KV模式不变,但是v是一个新的键值对 Map<String, Map<String, object>>
-
hset/hget/hmset/hmget/hgetall/hdel
-
hlen 获取某个key内的全部数量
-
hexists key 在key里面某个值的key
-
hkeys/hvals
-
hincrby/hincrbyfloat
-
hsetnx
-
-
redis集合(Set)
-
无序无重复
-
底层是哈希表实现
-
单值多value,且无重复
-
SADD key member[member ...] 添加元素
-
SMEMBERS key 遍历集合中所有元素
-
SISMEMBER key member 判断元素是否在集合中
-
SREM key member[member ...] 删除元素
-
scard 获取集合里面的元素
-
SRANDMEMBER key [数字] 从集合中随机展现设置的数字个数元素,元素不删除
-
SPOP key[数字] 弹出栈
-
SMOVE key1 key2 在key1已存在的某个值 将key1里已存在某个值付给key2
-
集合运算
-
差集 A-B:属于A但不属于B的元素构成的集合 SDIFF keyA [keyB]
-
集合的并集运算 A ∪ B:属于 A或者属于B的元素构成的集合:SUNION keyA keyB
-
集合的交集运算 A ∩ B:A,B共有部分
-
SINTER key[key ...]
-
SINTERCARD numkeys key[key ...] [LIMIT limit] (不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数)
-
-
-
-
-
redis有序集合(ZSet)
-
在set基础上,每个value值前加一个score分数值
-
添加元素:ZADD key score member [score member ...]
-
按照元素分数从小到大的顺序返回索引从start到stop之间所有元素:ZRANGE key start stop[WITHSCORES]
-
按照元素分数从大到小的顺序返回索引从start到stop之间所有元素:ZRERANGE key start stop[WITHSCORES]
-
获取指定分数范围的元素:ZRANGEBYSCORES key min max [WITHSCORES] [LIMIT offset count]
-
withscores
-
( 表示不包含
-
limit 作用是返回限制
-
-
ZSCORE key member 获取元素的分数
-
ZCARD key 获取集合中元素的数量
-
zrem key 某score下对应的value值,作用是删除元素
-
ZINCRBY key increment member 增加讴歌元素的分数,increment为增加分数值
-
ZCOUNT key min max 获得指定分数范围内的元素个数
-
ZMPOP 从键名列表中的第一个非空集排序集中弹出一个或者多个元素,他们是成员分数对
-
ZRANK key values值,获取下标
-
zrerank key values值, 逆序获得下标值
-
-
redis地理空间(GEO)
-
GEOADD 多个 经度、纬度、位置名称添加到指定的key中
-
出现中文乱码需要quit 在登录界面追加 --raw
-
redis-cli -a 123456 --raw
-
-
GEOPOS 从键里面返回所有给定位置元素的位置(经度和纬度)
-
GEOHASH 返回坐标的geohash表示
-
GEODIST 两个位置间的距离
-
GEORADIUS 以半径为中心查询xxx
-
GEORADIUSBYMEMBER
-
-
redis基数统计(HyperLogLog)
-
统计某个某个网站UV(UV:Unique Visitor,独立访客,一般理解为客户端ip => 进行去重考虑)
-
去重复统计功能的基数估计算法-HyperLogLog
-
PFADD key element[element ...] 添加指定元素
-
PFCOUNT key[key ...] 返回给定 HyperLogLog的基数估算值
-
PFMERGE destkey sourcekey [sourcekey ...] 合并多个HyperLogLog
-
-
redis位图(bitmap)
-
是由0和1状态表现的二进制位的bit数组
-
用String 类型作为底层数据结构实现的一种统计二值状态的数据类型,位图本质是数组
-
setbit key offset value: 解释 setbit 键 偏移位 只能0 或1 btmap偏移量是从0开始的
-
getbit key
-
strlen 统计字节数占用多少(1bit 扩容)
-
bitcount 全部索引里面1占多少
-
bitop
-
-
redis位域(bitfield)
-
将redis字符串看作是 一个由二进制位组成的数组 并且能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。
-
作用:
-
位域修改
-
溢出控制
-
-
基本命令:
-
BITFIELD key [GET type offset]
-
BITFIELD key [SET type offset value]
-
BITFIELD key [INCRBY type offset increment]
-
溢出控制 OVERFLOW [WRAR|SAT|FAI
-
-
-
redis流(Stream)
-
就是redis版本的mq消息中间件
-
-
四个特殊符号:
-
- +: 最小和最大可能出现的id
-
$:表示只消费新的消息,当前流中最大的id,可用于将要来到的消息
-
>:用于 XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费组的最后ID
-
*:用于XADD命令中,让系统自动生成id
-
-
相关指令:
-
XADD:添加消息到队列末尾
-
消息id必须大于上个id
-
默认使用星号表示自动生成规矩
-
* 用于XADD命令中,让系统自动生成id
-
-
XRANGE:用于获取消息列表(可以指定范围),忽略删除的消息
-
start 表示开始值,-代表最小值
-
end 表示结束值,+代表最大值
-
count 表示最多获取多少个值
-
-
XREVRANGE
-
XDEL
-
XLEN 用于获取Stream队列的消息长度
-
XTRIM
-
用于对stream的长度进行截取,如超长会进行截取
-
MAXLEN 允许最大长度,对流进行修剪,限制长度
-
MINID 允许的最小id,从某个id值开始比该id值小将会被抛弃
-
-
XREAD
-
用于获取消息(阻塞/非阻塞),只会返回大于指定id的消息
-
非阻塞
-
阻塞
-
-
XGROUP CREATE 用于创建消费者组
-
XREADGROUP GROUP
-
">" 表示从第一条尚未被消费的消息开始读取
-
消费组groupA内的消费组consumer1从mystream消息队列中读取所有消息
-
但是,不同消费组的消费者可以消费同一条消息
-
XPENDING 查询每个消费组内所有消费者[已读取,但尚未确认] 的消息
-
XACK 像消息队列确认消息已经处理完成
-
-
-
-
redis 键位(key)
-
keys *:查看当前库所有的key
-
exists key:判断某个key是否存在
-
type key:查看你的key是什么类型
-
del key:删除指定的key数据
-
注意:
-
命令不区分大小写,而是key区分大小写
-
帮助命令 help @类型
-
flushdb:清除当前数据库
-
flushall:通杀全部数据库
-
注意:
-
命令不区分大小写,而是key区分大小写
-
帮助命令 help @类型
-
Redis持久化
-
持化双雄:
-
RDB (Redis DataBase)
-
如何恢复:
-
将备份文件(dump.rdb)移动到 redis 安装目录并启动服务即可
-
备份成功后故意用flushdb清空redis 看看是否可以恢复数据 => 结论:执行flushshell/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
-
物理恢复,一定服务和备份分机隔离
-
-
手动:Redis提供了两个命令来生产RDB文件,分别是save和bgsave
-
save:在主程序中执行会阻塞当前redis服务器,知道持久化工作完成执行save命令期间,Redis不能处理其他命令,线上禁止使用。
-
-
-
-
-
rdb修复文件,
redis-check-rdb
-
-
-
如何禁用快照:
-
动态所有停止RDB保存规则的方法:
redis-cli config set save ""
-
配置文件修改
-
-
总结:
-
-
AOF(Append Only File)
-
aof是什么:
-
默认情况下,redis是没有开启AOF的,开启AOF功能需要设置配置: appendonly yes
-
aof保存文件是appendonly.aof
-
工作流程:
-
-
三种写回策略:
-
Always:同步写回,每个命令执行完立刻同步地将日志写回磁盘
-
everysec:每秒写回,每个命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区内容写入磁盘
-
no:操作系统控制的写回,每个写回命令执行完,只是先把日志写回到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
- 混合持化
-
纯缓存模式:
-
同时关闭RDB和AOF
-
save"" 禁用rdb,我们仍然可以使用命令 save,bgsave生成rdb文件
-
appendonly no 禁用aof,我们仍然可以使用命令 bgrewiteaof 生成aof文件
-
-
Redis事务
-
是什么
-
可以1次执行多个命令,本质是一组命令集合,一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不允许加塞
-
-
能干嘛
-
一个队列中,一次性、顺序性、排他性的执行一系列命令
-
-
和传统数据库比较:
使用:
-
常用命令:
-
正常执行:(MULTI, EXEC)
-
放弃事务:(MULTI, DISCARD)
-
全体连坐
-
冤有头债有主(类似于runtime error, redis不是完全的事务一致性,而且redis没有回滚)
-
watch监控 :
-
Redis使用Watch来提供乐观锁定,类似于CAS(check and set)
-
悲观锁
-
乐观锁
- CAS
-
-
watch:
-
-
总结:
-
开启:以MULTI开启一个事务
-
入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里
-
执行:由EXEC命令触发事务
-
Redis管道
-
是什么:批处理命令变种优化措施,类似于Redis的原生批命令(mget和mset)
-
-
小总结:
-
Pipeline与原生批量命令对比:
-
原生批量命令是原子性(mset等),pipeline是非原子性
-
原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令
-
原生批命令是服务端实现,而pipeline需要服务端和客户端共同完成
-
-
Pipeline与事务对比
Redis复制
是什么:
-
主从复制,master以写为主,Slave以读为主
-
当master数据发生变化的时候,自动将更新的数据异步同步到其他slave数据库
能干嘛
-
读写分离
-
容灾恢复
-
数据备份
-
水平扩容,支撑高并发
Redis哨兵
-
哨兵的作用
-
监控redis运行状态,包括master和slave
-
当master宕机后,自动将slave切换成新的master
-
-
能干嘛:
-
主从监控:监控主从redis库运行是否正常
-
消息通知:哨兵可以将故障转移的结果发送给客户端
-
故障转移:如果Master异常,则会进行主从切换,将其中一个Slave作为新的Master
-
配置中心:客户端通过连接哨兵来获取当前Redis服务的主节点地址
-
-
哨兵一般是集群存在,多数判断master宕机才进行选举
-
怎么使用:
-
配从库不配主库
-
权限细节:
-
master如果配置了 requirepass参数,需要密码登录
-
slave 就要配置 masterauth 来设置校验密码,否则的话master会拒绝slave的访问请求
-
-
基本操作命令
-
info replication 可以查看复制节点的主从关系和配置信息
-
replicaof 主库IP 主库端口
-
一般写入到redis.conf配置文件内
-
-
slaveof 主库IP 主库端口
-
slaveof no one
-
使当前数据库停止与其他数据库的同步,转成主数据库
-
-
-
-
缺点:
-
复制延时,信号衰减
-
master挂了,从机会等待
-
-
ODown客观下线
-
当主节点被判断为客观下线后,集群选出一个哨兵领导来做故障迁移
-
由领导哨兵开始推动故障切换流程并选出一个新master:
-
新主登基:
-
某个Slave被选为新master
-
-
-
-
群臣俯首:
-
-
旧主拜服
-
-
-
Redis集群
-
定义:由于数据量过大,单个master复制集团难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。
-
集群可以支持多个Master
-
Springboot集成Redis
-
总体概述:jedis-lettuce-RedisTemplate三者的联系
-
集成Jedis:
-
是什么:
-
步骤:
-
建module
-
改POM
-
写YML
-
主启动
-
业务类
-
-
-
集成lettuce
-
-
能干嘛:
-
Redis集群支持多个Master,每个Master又可以挂载多个Slave
-
读写分离
-
支持数据的高可用
-
支持海量数据的读写存储操作
-
由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
-
客户端与Redis的节点链接,不再需要连接集群中所有节点,只需要任意连接集群中的一个可用节点即可
-
槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系
-
-
集群算法-分片-槽位slot
-
redis集群的槽位slot
-
-
redis集群的分片
-
-
优势:
-
方便扩容、缩容和数据查找
-
-
slot槽位映射,一般业界有三种解决方案:
-
哈希取余分区
-
优点
-
缺点
-
-
一致性哈希算法分区
-
是什么:分布式缓存数据 变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不ok了
-
能干嘛:提出一致性Hash解决方案。目的是当服务器个数发生变化时,尽量减少影响客户端到服务器的映射关系
-
三大步骤:
-
算法构建一致性哈希环
-
服务器IP节点映射
-
key落到服务器的落键规则
-
-
一致性哈希算法容错性
-
-
一致性哈算算法的扩展性
-
-
缺点:Hash环的数据倾斜问题
-
-
哈希槽分区
-
为什么redis集群的最大槽数是16384个
-
Redis集群 不保证强一致性,这意味着在特定条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令
-
-
集群环境案例步骤
-
-
-
-
相关文章:

Redis快速入门(基础篇)
简介: 是一个高性能的 key-value数据库。 存在内存中 与其他 key-value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类…...

(三)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…...
SpringBoot--中间件技术-3:整合mongodb,整合ElasticSearch,附案例含代码(简单易懂)
SpringBoot整合mongodb 实现步骤: pom文件导坐标 <!--mongo--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency&g…...

matlab 二自由度操纵稳定性汽车模型
1、内容简介 略 19-可以交流、咨询、答疑 二自由度操纵稳定性汽车模型 二自由度、操纵稳定性、操纵动力学 2、内容说明 1 模型假设 忽略转向系的影响,以前、后轮转角作为输入;汽车只进行平行于地面的平面运动,而忽略悬架的作用…...

超越任务调度的极致:初探分布式定时任务 XXL-JOB 分片广播
XXL-JOB 是一个分布式任务调度平台,支持分片任务执行。 1. 依赖引入 在项目中引入 XXL-JOB 的相关依赖。通常,你需要在项目的 pom.xml 文件中添加如下依赖: <dependency><groupId>com.xuxueli</groupId><artifactId&…...
设计模式-备忘录模式(Memento)
设计模式-备忘录模式(Memento) 一、备忘录模式概述1.1 什么是备忘录模式1.2 简单实现备忘录模式1.3 使用备忘录模式的注意事项 二、备忘录模式的用途三、备忘录模式实现方式3.1 基于数组的备忘录实现方式3.2 基于集合的备忘录实现方式3.3 基于HashMap的备…...

【机器学习】正则化到底是什么?
先说结论:机器学习中的正则化主要解决模型过拟合问题。 如果模型出现了过拟合,一般会从两个方面去改善,一方面是训练数据,比如说增加训练数据量,另一方面则是从模型角度入手,比如,降低模型复杂…...
Rust5.2 Generic Types, Traits, and Lifetimes
Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 10: Generic Types, Traits, and Lifetimes lib.rs use std::fmt::Display;//Traits: …...
c 实用化的摄像头生成avi视频程序(加入精确的时间控制)
I时间控制是指:生成了n张图片帧用了多少时间m。帧率等于n/m。对应于头文件,m等于scale, n等于rate.为了精确,采用微秒计时。 I此程序生成的视频远好于ffmpeg,可能是此程序没有压缩数据原因吧。 现在的帧率不高,是因…...

Web后端开发_01
Web后端开发 请求响应 SpringBoot提供了一个非常核心的Servlet 》DispatcherServlet,DispatcherServlet实现了servlet中规范的接口 请求响应: 请求(HttpServletRequest):获取请求数据响应(HttpServletRe…...

二十、泛型(6)
本章概要 问题 任何基本类型都不能作为类型参数实现参数化接口转型和警告重载基类劫持接口 自限定的类型 古怪的循环泛型自限定参数协变 问题 本节将阐述在使用 Java 泛型时会出现的各类问题。 任何基本类型都不能作为类型参数 正如本章早先提到的,Java 泛型的…...

Java18新增特性
前言 前面的文章,我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16、Java17 的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java…...

springboot容器
1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…...

Windows 10 下使用Visual Studio 2017 编译CEF SDK
1.下载CEF SDK 由于需要跑在32位的机器,所以选择下载32位的SDKCEF Automated Builds 选择 Current Stable Build (Preferred) ,这是当前稳定版本,CEF版本118 下载成功解压 2.下载编译工具 CMake 下载地址:CMake 配置CMake指向…...

数字货币swap交易所逻辑系统开发分析方案
随着数字货币市场的快速发展, Swap交易所已成为一种重要的交易方式。本文将对数字货币Swap交易所逻辑系统开发进行分析,并探讨其优势、开发难点和解决方案。 一、数字货币Swap交易所逻辑系统开发的优势 数字货币Swap交易所是一种点对点的交易方式&#x…...

spring boot中使用Bean Validation做优雅的参数校验
一、Bean Validation简介 Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),目前最新稳定版2.0.2(201…...

搜索引擎项目
认识搜索引擎 1、有一个主页、有搜索框。在搜索框中输入的内容 称为“查询词” 2、还有搜索结果页,包含了若干条搜索结果 3、针对每一个搜索结果,都会包含查询词或者查询词的一部分或者和查询词具有一定的相关性 4、每个搜索结果包含好几个部分&…...

7.外部存储器,Cache,虚拟存储器
目录 一. 外部存储器 (1)磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 (2)固态硬盘(SSD) 二. Cache基本概念与原理 三. Cache和主存的映射方式 ÿ…...

UITableView的style是UITableViewStyleGrouped
一般情况下,UITableViewStylePlain和UITableViewStyleGrouped是UITableView常用到的style, 之前都是用到的时候,遇到问题直接用度娘,差不多就够用了,今天在修复UI提出的间隙问题,来回改,总觉得…...

Java17新增特性
前言 前面的文章,我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16 的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java16新增特…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...