Java-Redis
文章目录
- 基础
- 基础内容
- 使用场景/功能
- 常见数据类型
- 下载与安装
- 可视化(多个)
- 发布订阅功能
- 事务
- 两种持久化
- 主从模式
- 哨兵模式
- 集群模式Cluster
- 缓存淘汰
- 过期删除
- 缓存一致 Cache Aside
- 缓存击穿
- 缓存穿透
- 缓存雪崩
- 实战内容
- 配置文件
- 配置Redis的Bean
- Redis为什么这么快?
- Hash冲突怎么办?
- 项目与redis服务配置方式不同?
基础
基础内容
概念:Redis,全称为Remote Dictionary Server(远程数据服务),是开源的、基于内存的、键值对存储系统,是非关系型、日志型数据库;
特点:性能高;数据类型丰富,单键值对最大支持512M大小的数据;简单易用,支持所有主流编程语言;支持数据持久化、主从复制、哨兵模式等;
使用场景/功能
高性能缓存服务器:用于减轻数据库服务器的压力,项目运行将所必须内容加载到Redis中,提高项目对数据的获取速度;
数据共享:Redis是分布式的独立服务,可以多个项目使用相同的Redis;
分布式锁:实现对某操作的原子性执行,推荐使用redisson第三方库实现;
全局id:incrby 利用原子性,incrby userid 1000 分库分表的场景,一次性拿一段;
计数器:incr方法实现,目前涉及到的内容集中在计费操作,通过incr记次数实现;
限流:incr 本质还是统计次数,然后利用最大值限制;
位统计:用于大数据量的统计,通过二进制表示数据;
还有很多,不做详细介绍了 用到哪种学习哪种?
参考博客:https://blog.csdn.net/agonie201218/article/details/123640871
常见数据类型
字符串String
key是区分大小写的;
默认使用String类型存储键值对;
get获取的key对应的value是不存在,那么会输出nil;
不支持中文存储value,只是通过二进制形式存储,若想正常实现存储内容,需要在登录的时候采用redis-cli --raw登录;
TTL 查询key对应的过期时间,值为-1,则表示该键没有过期时间;值为-2,表示该key已经过期了;
列表List
存储和操作一组有顺序的数据;
输入输出可以类比栈,单向输入输出;lPush在左侧输入输出,RPush在右侧输入输出;输入元素是abc 那么输出是cba;lPop 和 RPop也是类似的操作;Llen 获取 长度;
可以重复的;
相关命令以l开头;
集合Set
不可以重复;
smembers course ,假设该set集合没有元素,则返回empty list or set
相关命令以S开头;
有序集合 SortedSet
每一个key都会关联一个浮点类型的分数,会按照这个分数排序,从小到大来排序;
有序集合的元素是唯一的,但是分数是可以重复的;
相关命令都是z开头;
哈希hash
键值对的集合,适合存储对象;
相关命令都以h开头;
消息队列 Stream
可以解决发布订阅功能的缺点;
相关命令都以x开头;
涉及到消费者组、以及消息的多次读取;
地理空间 Geospatial
存储地理位置信息的数据结构,同时对地理位置进行计算操作;
相关命令都以Geo开头;
如果key-value存储地点-经纬度,那么通过查询key得到的是一个数组;
如果计算两个value之间的距离,返回结果默认是米;
查询某个key在指定半径内的其他key;命令:
GEOSEARCH City FROMMEMBER shanghai BYRADIUS 1000 KM 查询key=上海 1000千米范围内的key城市
HyperLogLog
是一种用来做基数统计的算法;基于随机算法,牺牲一些精确度的角度,来减轻内存消耗;
基数 = 如果集合中的元素都不重复,那么基数=集合中元素的个数;
例如:集合12345,它的基数是5,集合1122334455,它的基数仍旧是5;
优点:占用内存小;缺点:精度不高;
适用场景:数据量大,且不需要精确度的情况;
相关命令都以pf开头;
位图Bitmap
字符串类型的扩展,可以使用字符串模拟一个数组;
数组的下标就是偏移量,值只有0和1;也支持位运算,与 或 非 异或等;
相关命令有bit开头或bit结尾;
位域Bitfield
将小的整数,存储到一个较大的位图中,可以高校的使用内存;
下载与安装
三种方式实现:
linux系统;
windows系统的压缩包安装;
windows系统的docker desktop 镜像安装;
停止终端的方式:
按下ctrl+c 或者 关闭终端页面;
可视化(多个)
参考链接:https://blog.csdn.net/WeiHao0240/article/details/123423230
参考博客:https://blog.csdn.net/boboJon/article/details/135073969
发布订阅功能
订阅频道subscribe xxx
发布消息到频道publish xxx 消息内容
订阅频道的终端可以有多个;缺点:
消息无法持久化;
无法记录历史消息;
事务
概念:在一次请求中,执行多条命令;
通过MULTI开启事务,将后续所有命令放入队列中,通过EXEC执行队列中命令;
并不能保证事务中的所有命令都执行成功;
可以保证的内容:执行EXEC命令之前,会将所有命令都缓存起来,不立即执行;执行EXEC命令,事务中的某个命令执行失败,其余命令不会受到影响;执行EXEC命令过程中,其他用户提交的命令,不会插入得到命令的执行序列中;通过MULTI启动事务,指令会多TX标识符;
再次输入命令,会返回QUEUED,表示已经放入命令执行队列;
两种持久化
是一个重要的功能,Redis是基于内存的,如果断点,则会导致数据丢失;所以必须有持久化操作;
两种方式:RDB 和 AOF 方式;
RDB:Redis Database在指定时间间隔内,将内存中的数据快照写入磁盘中;某个时间点上完整副本;通过save参数配置;save 参数1 参数2 --》参数1=时间间隔 参数2=修改次数更适合用来做备份,因为如果服务宕机,那么快照最后一次后的所有修改就会丢失;思考1:由于正式环境中 redis都会给分配较大的内存空间,通过RDB进行备份的时候,redis是不能进行处理的,会影响业务;通过提供bgsave命令处理,会创建一个子进程专门处理备份,主进程处理业务,但是在创建子进程的过程中仍旧不能处理业务;
AOF:执行追加文件,在执行写命令的过程中,不仅会将结果写入数据库中,而且会将写命令写入追加文件中(AOF文件);redis执行写操作时,会重新执行AOF文件,重新构建数据库;开启AOF方式:配置文件中,将appendonly参数值改成yes;
主从模式
将主节点数据复制到从节,主节点-master,从节点slave;
从节点可以有很多,每个从节点只能有一个主节点;
数据的复制是单向的,只能从主节点到从节点;
主节点负责写操作,从节点负责读操作;
主节点通过异步的方式向从节点发送数据,从节点收到后更新自己的数据;
一台主机上可以配置多个redis 通过不同的端口号进行区分;
配置:
主节点 不需要配置,因为默认就是主节点;
设置从节点的方式两种:命令 以及 配置文件修改
命令:role --》 查看当前节点角色replicaf host port --》配置所属主节点
配置文件:是redis.conf文件修改端口号:port pidfile 都要修改端口号dbfilename 配置也要加上端口号rplicaof host port 配置主节点Redis默认是以守护进程的方式运行,系统默认会将pid写入文件中;redis-cli登录:info replication 查看配置信息;
哨兵模式
主从模式存在问题:
当主节点宕机之后,需要人工干预将从节点提升为主节点;
哨兵模式:
哨兵以一个独立的进程运行在一个Redis集群中,用来监控Redis集群中的节点是否运行正常;
作用:监控:会不断向各个节点发送指令,检查各个节点的是否正常运行;通知:发现某个节点不能正常工作,会通过发布订阅模式,通知其他节点;自动故障转移:会将从节点变成新的主节点,再将其他从节点指向该主节点;哨兵模式配置:配置文件sentinel.conf内容:sentinel monitor master ip port 1ip 和 port都是主节点的1 = 使用一个哨兵来实现故障转移正式环境中一般都采用3个哨兵,防止哨兵节点宕机;
启动哨兵模式:redis-sentinel sentinel.conf
集群模式Cluster
解决问题:采用主从复制、哨兵机制,每台机子上完整存储所有数据,当数据量特别大的时候,这种情况是无效的;
定义:cluster是redis提供的分布式数据库解决方案,将所有数据分片,节点进行领取,即使某些节点宕机,也还可以执行操作;
数据分片:将key通过CRC16校验函数计算,再对16384取模运算,再决定数据分配到哪个槽位(也即是片、slot) ;每个redis的cluster节点负责一部分槽数据的存储;(槽数据 = 存储在特定槽上的所有键值对)这些节点再结合主从复制模式,对数据进行备份;
查询策略:每个节点都会存储整个集群节点信息,这些叫元信息;元信息:各节点存储的槽数据、master和slave状态、节点存活状态;两次查询实现数据查询;
元信息传递:gossip协议,每个节点把自己的数据信息通过协议传递出去;具体过程:周期性执行;所有被感染的节点选择k个相邻的节点散播消息;
扩容缩容:当数据量大时,增加节点;数据量少,减少节点;
缓存淘汰
淘汰策略:常用的三个;默认是LRU先进先出FIFO:类似一个队列,淘汰最早载入缓存的数据;最近最早使用LRU:老数据,按照最近被访问的时间排序,末端节点删除;实现思路-双向链表+哈希表;双向链表存储键值对;哈希表存储key和双向链表的node节点的指针引用;具体执行: 当某个key被访问到,会将其对应的node节点放到双向链表的头部;最不经常使用LFU:多一个 被访问次数 这个属性;key+value 结合被访问次数,组成新的数据结构;将该数据结构放入双向链表中,按照次数从大到小的排序方式,先替换排在最后的元素;
过期删除
默认采用定期删除;
目前有三种策略:主动删除、惰性删除、定期删除;主动删除:设置错误间隔时间,在指定时间后进行主动删除;缺点:当redis比较忙,删除时间刚好到了,则会增加服务器的负担;惰性删除:程序访问某个数据,先判断是否已经过期,没过期则返回,反之,则删除;缺点:只有当被访问到的时候,才进行删除,会导致内存中存在大量无效数据,造成资源的浪费;定期删除:主动删除+惰性删除;每个一段时间,执行主动删除;其余时间,采用惰性删除;
缓存一致 Cache Aside
定义:后端缓存数据 = 数据库数据,并不是时时刻刻保持一致,允许在一定小范围内,出现不一致的情况;
采用策略:Cache Aside策略:模式1 = 删除缓存、更新数据库模式2 = 更新数据库、更新缓存Read/Write Through将缓存作为主要的数据读取方式,如果缓存中没有数据,则更新缓存,再从缓存中取数;Write Behind更新数据库与更新缓存都采用异步的形式;结合mysql的主从复制模式,将mysql作为主服务,redis作为从服务;
模式1:
模式2:
Read/Write Through
Write Behind
缓存击穿
定义:查询某个数据的值,缓存中没有,而数据库中有
危害:如果访问该key的量特别大,且缓存中没有,则请求全部会访问数据库;redis的性能是mysql数据库的10-100倍,当访问量redis可以承受时,转到mysql上,可能就会导致mysql宕机;
解决:mysql角度,加锁,控制redis击穿之后数据库的并发访问量;redis角度,热点数据永不过期;异步线程,将重要数据、已经过期的 进行过期时间重置;
缓存穿透
定义:一条查询数据,缓存中没有,数据库中也没有;
解决方法:拦截非法请求;缓存空对象;布隆过滤器;
布隆过滤器:
缓存雪崩
定义:一大批缓存数据都失效,故此这批请求都会被打到数据库上,导致数据库宕机;
与缓存击穿的区别:缓存击穿是单点;缓存雪崩是多点;
解决方式:mysql角度,加锁,减少数据库并发量;redis角度, 热点数据永不过期;让失效时间分散点;缓存预热,即在上线前,根据当天的情况,将数据直接加载到缓存系统;
实战内容
配置文件
单机模式:
spring:redis:enable: true
// 意图是控制是否启用Redis功能host: localhostport: 6379database: 0// redis数据库的索引,表示第一个数据库timeout: 10000ms// Redis服务器的超时时间,单位ms,也就是10秒lettuce:// spring data redis默认使用的客户端;pool:// 配置lettuce的连接池配置max-active: 8// 最大活动连接数max-idle: 8// 最大空闲连接数min-idle: 0// 最小空闲连接数max-wait: -1ms// 获取连接的最大等待时间
主从模式:
// 通过spring.redis.sentinel来配置;spring:redis:sentinel:// 配置使用主从复制模式master: mymaster// 指定主服务器组nodes:- "sentinel1:26379"- "sentinel2:26379"- "sentinel3:26379"// seninel实例的主机名或ip 以及端口号database: 0timeout: 10000mspassword: yourpasswordSentinel配置文件:(哨兵模式)
# Sentinel配置文件位置 /etc/redis/sentinel.conf
具体内容:sentinel monitor mymaster 192.168.1.100 6379 2
# 监控名为mymaster
# 监控主机的ip和port 192.168.1.100 6379
# 至少有2个sentinel确认服务器宕机后才进行故障转移
sentinel down-after-milliseconds mymaster 30000
# 如果sentinel在3,0000毫秒内没有收到主服务器的有效回复,则认为主服务器宕机;
sentinel failover-timeout mymaster 180000
# 故障转移,等待新主机启动的超时时间为18,0000毫秒
sentinel parallel-syncs mymaster 1
# 故障转移过程中,同时复制给从服务器的数量限制为1
集群模式:
spring:redis:cluster:// 指定redis采用集群模式nodes:// 集群中的节点列表,每个节点都是集群中的一个成员;- "node1:7000"- "node2:7000"- "node3:7000"- "node4:7000"- "node5:7000"- "node6:7000"password: yourpasswordtimeout: 10000ms
配置Redis的Bean
public class RedisConfig {@Autowiredprivate StringRedisTemplate commonStringRedisTemplate;// 自动注入StringRedisTemplate实例;// 是 Spring Data Redis 提供的一个模板类,专门用于处理字符串类型的键值对;@Bean// 将返回一个可以被 Spring 管理的 Bean。public RedisOperations commonRedisOperations(){RedisOperations redisOperations = new DefaultRedisOperations(commonStringRedisTemplate);// 创建了一个 DefaultRedisOperations 实例,这是一个自定义的类(假设它是存在的),它接受 StringRedisTemplate 作为构造函数的参数。// 用于封装 Redis 操作,并初始化分布式锁机制。DistributedLock.init(redisOperations);// 初始化一个分布式锁机制,接受一个 RedisOperations 参数用于设置内部的 Redis 操作实例。同时,在应用程序启动时,分布式锁就会准备好使用。log.info("{}","Redis分布式锁初始化完成");return redisOperations;}
}
Redis为什么这么快?
Hash冲突怎么办?
项目与redis服务配置方式不同?
问题描述:项目配置redis,采用单机模式配置;redis服务,采用集群方式;导致项目启动异常;
分析:Redis 服务是按照集群(cluster)模式部署的,而应用程序却以单机(standalone)模式尝试连接到该集群中的某一个节点,这通常不会直接导致 Redis 服务本身启动异常。但会遇到连接或者操作失败的问题。
相关文章:
![](https://i-blog.csdnimg.cn/direct/0fdb02fe9ba44c548d62ae1fd838701e.png)
Java-Redis
文章目录 基础基础内容使用场景/功能常见数据类型下载与安装可视化(多个)发布订阅功能事务两种持久化主从模式哨兵模式集群模式Cluster缓存淘汰过期删除缓存一致 Cache Aside缓存击穿缓存穿透缓存雪崩 实战内容配置文件配置Redis的BeanRedis为什么这么快…...
![](https://www.ngui.cc/images/no-images.jpg)
requests快速入门
1 安装requests库 如果你还没有安装requests库,可以通过pip安装: pip install requests 2 GET请求 GET请求通常用于从服务器请求数据。使用requests.get()函数可以发送GET请求。 2.1 基本使用 import requests url https://api.example.com/da…...
![](https://i-blog.csdnimg.cn/direct/10baf2ad0da24962807debaace75371b.png)
企业高性能web服务器——Nginx
# 企业高性能web服务器 1、Nginx 编译安装 1.1 编译安装 Nginx 这里下载nginx-1.24.0.tar.gz和nginx-1.26.1.tar.gz可以在官方网站上下载:https://nginx.org/en/download.html 示例:nginx-1.24.0.tar.gz #提前将编译安装出现问题的安装包下载好&…...
![](https://www.ngui.cc/images/no-images.jpg)
FreeSWITCH Java ESL Client Demo
1简介 在开启Java ESL Client编程之前,请先阅读《FreeSWITCH权威指南》学习什么是FreeSWITCH Event Socket。 Java连接FreeSWITCH的ESL可以采用两种模式:inbound和outbound。 Inbound模式:Java应用作为客户端主动连接到FreeSWITCH的内置TCP…...
![](https://i-blog.csdnimg.cn/direct/5cde990fe7a9421e9e60e685ec5d4f67.png)
手摸手系列之Linux下根据自己的jdk包构建docker镜像
项目在本地导出PDF文件正常,部署到Linux服务器docker容器中导出就报错,百撕不得姐,经查,docker依赖的openjdk版本是8u112版本,而我本地是8u421版本,那就升级jdk的小版本试试。 在docker的中央仓库[点我直达…...
![](https://i-blog.csdnimg.cn/direct/5c4b921e386440d7b9fa4110b17e2a16.png)
tomcat相关
一、部署安装tomcat 在10和20上安装tomcat [root10 ~]# dnf install java-1.8.0-openjdk.x86_64 -y #安装java环境 [root10 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ #安装并启动tomcat [root10 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat…...
![](https://i-blog.csdnimg.cn/direct/677d685204984d6d84c5f1bef8fb2d4c.jpeg)
20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并启动
20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并启动 2024/8/21 15:22 viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh lunch 3. rockchip_rk3588_evb7_…...
![](https://www.ngui.cc/images/no-images.jpg)
服务优雅上下线优雅停机
一、目的 服务发生线程锁住,需要下线服务时,保证请求中的接口不受影响,执行完后,再下线服务 二、步骤 *kill -15时执行改钩子函数 优雅停机 1.当线程锁住 2.运维那边监控到,然后进行kill -15 进程ID 3.代码这边监…...
![](https://img-blog.csdnimg.cn/img_convert/b69f26807510000987831d5c883916c1.png)
什么是生信分析?深入探讨生物信息学的技术、方法与广泛应用
介绍 生物信息学分析,简称生信分析,是一个结合了生物学、计算机科学、信息学和统计学的多学科领域,旨在处理、分析和解释海量的生物数据。随着现代生物技术的发展,尤其是高通量测序(Next-Generation Sequencing, NGS&…...
![](https://www.ngui.cc/images/no-images.jpg)
JavaScript判断数组是否包含某个值
目录: 1.for循环/while循环2.数组的some方法3.数组的filter方法4.array.indexOf5.array.findIndex6.array.includes7.array.find8.set中的has方法 1.for循环/while循环 for循环: function contains(arr, val) {for (var i 0; i < arr.length; i) {if (arr[i] …...
![](https://www.ngui.cc/images/no-images.jpg)
C# - 如何在Windows系统中通过C#添加新的PATH条目至系统和用户环境变量
编写系统环境变量-->系统变量-->path-->添加新的列 01:直接写 using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace updatesystempath01 {class Program{stati…...
![](https://i-blog.csdnimg.cn/direct/5fbb52cb8c4b435b920339dc22d27543.png)
Unity | Shader基础知识(第二十二集:两次渲染)
目录 一、前言 二、“渲染两次” 三、本次成品介绍 四、第一次渲染代码 五、第二次渲染代码 六、截止目前的所有代码 七、调整代码 八、总结 一、前言 之前一直讲的shader文件中,都只写了一次CG代码。 为了大家对这部分的整体理解,我们这次渲…...
![](https://i-blog.csdnimg.cn/direct/b9faa7874e1a4e1e8ca9a6f365464f17.jpeg)
鸿蒙Harmony实战开发:Arkts构造函数
构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下: constructor ([parameters]) {// ... } typescript 如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数,例如: class Point {x: numbe…...
![](https://www.ngui.cc/images/no-images.jpg)
@vueuse/core使用useColorMode实现主题颜色切换
useColorMode 是一个在前端开发中常用的自定义钩子(Hook),尤其在需要支持深色模式和浅色模式切换的场景下。这个钩子可以根据用户的选择或系统设置动态调整页面样式。 一、安装和引入 npm install vueuse/core # 或者 yarn add vueuse/…...
![](https://img-blog.csdnimg.cn/img_convert/48f28c25bf4d86cb2f746fe8e3e69d3b.png)
生信分析入门:从基础知识到实践操作的全方位指南
随着生物学研究的数字化转型,生物信息学(简称生信)分析已经成为现代生命科学研究中的关键工具。对于刚开始接触生信分析的初学者来说,这个领域可能看起来复杂而陌生。然而,通过系统的学习和实践,生信分析可…...
![](https://www.ngui.cc/images/no-images.jpg)
【STM32 FreeRTOS】内存管理
除了FreeRTOS提供的动态内存管理方法,标准的C库也提供了函数malloc()和函数free()来实现动态的申请和释放内存。 为啥不用标准的C库自带的内存管理算法?因为标准C库的动态管理方法有如下缺点: 占用大量的代码空间,不适合用在资源…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3+vite+cesium配置参考
在vite项目中使用Cesium的配置 关键: 资源目录的复制;CESIUM_BASE_URL的正确配置 //vite.config.js // ... // 安装打包复制资源插件,手动复制不需要 // npm i vite-plugin-static-copy import { viteStaticCopy } from vite-plugin-static-c…...
![](https://i-blog.csdnimg.cn/direct/c128934d3c654401aec911ef64410558.png)
WEB应用服务器TOMCAT
知识点 一 、WEB技术 1、前端三大核心技术 1.1 HTML HTML ( HyperText Markup Language )超文本标记语言,它不同于一般的编程语言。超文本 即超出纯文本的范畴,例如:描述文本颜色、大小、字体等信息,或使…...
![](https://www.ngui.cc/images/no-images.jpg)
maven打包jar后运行提示“没有主清单属性”问题的几种解决方案
常用的几种maven项目打包后,jar运行提示“没有主清单属性”问题的解决方案,大部分都是要修改pom.xml文件,同时有几种自己常用的配置文件,主要供自用,勿喷。 第一种: <build><plugins><plug…...
![](https://i-blog.csdnimg.cn/direct/06e9982331f441a19440d0c8380aecbb.png)
计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
![](https://i-blog.csdnimg.cn/direct/141a6a8e7c53479e987bec68e56fbe28.png)
WKWebView加载项目中网页的资源图片路径异常
问题原因,将含有html的文件通过如下方式引入到工程中: 这种处理方式,当应用程序变以后,引入的文件会被全部放在Resources目录下,而忽略你原本的文件路径信息。因此导致出问题。 解决方案: 采用如下方式引…...
![](https://i-blog.csdnimg.cn/direct/67952b2813134a2c81c1e658981d7a29.jpeg#pic_center)
算法全面剖析
算法 查找算法: 顺序查找: 基本思想: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功&am…...
![](https://i-blog.csdnimg.cn/direct/08a6464445934e758c3228e5092b95c0.png)
tp5php7.4配置sqlserver问题汇总
先修改database.php文件 查看php版本选择sqlserver扩展 通过百度网盘分享的文件:sqlserver 链接:https://pan.baidu.com/s/1zrIV8VWQZM9miLpyH01Aww?pwdxdgx 提取码:xdgx 通过我的分享链接复制自己需要的dll到php的ext下 在php.ini里添加扩…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言随笔:字面量
字面量(Literal)是指程序源代码中直接写出的固定值。字面量用于表示数据常量,它们在程序编译时被直接解析并用于程序运行。 常见的字面量类型 整数字面量(Integer Literals) 描述:表示整数值。示例&#x…...
![](https://i-blog.csdnimg.cn/direct/964b2e9fe12f4962897392e8ccad0eec.png)
chainlit的基本概念聊天对话中的元素
文本消息是聊天机器人的组成部分,但我们通常希望向用户发送的不仅仅是文本,还包括图像、视频等。 这就是元素出现的地方。每个元素都是一段内容,可以附加到Message或Step 并显示在用户界面上。 chainlit支持的元素如下: 文本元…...
![](https://www.ngui.cc/images/no-images.jpg)
【LeetCode:3】无重复字符串的最长子串(Java)
题目链接 3. 无重复字符串的最长子串 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbb…...
![](https://www.ngui.cc/images/no-images.jpg)
C#对字典使用Linq查询
Dictionary<int, int> dic new Dictionary<int, int>();dic.Add(1, 2);dic.Add(2, 3);dic.Add(3, 4);dic.Add(4, 5);dic.Add(5, 6);//筛选键var keys dic.Where(item > item.Key > 2).Select(item > item.Key);foreach (var item in keys){Console.Writ…...
![](https://www.ngui.cc/images/no-images.jpg)
【Vue】Vue基础
系列文章目录 第二章 Vue基础(1) 文章目录 系列文章目录第一节:Vue介绍一、Vue介绍二、Vue项目创建三、项目结构介绍 第二节:组合式API一、基本介绍二、setup介绍三、setup上指定组件名称 第三节:响应式变量一、使用r…...
![](https://i-blog.csdnimg.cn/direct/3f97dea913744a5fba2d7bcea8714f0a.png)
贪心 + 分层图bfs,newcoder 76652/B
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://ac.nowcoder.com/acm/contest/76652/B 二、解题报告 1、思路分析…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在Linux上部署Java Web应用程序
在Linux上部署Java Web应用程序是一个常见的任务,本文将介绍一种常用的方法,分为以下几个步骤: 准备服务器 首先,你需要准备一台运行Linux操作系统的服务器。你可以选择使用各种不同的Linux发行版,如Ubuntu、CentOS等…...
![](https://img-blog.csdnimg.cn/img_convert/00ecbf4077143b8fa3948d0a719f9496.png)
上海正规网站建设怎么样/b2b网站大全免费推广
AWE 2019上,科大讯飞重点推出了其智能家电解决方案,包括空调解决方案、马桶解决方案、烟机解决方案,这看似是为了符合AWE的调性,其实也反映了2019年智能语音赋能家电行业解决方案的一个趋势。为何会入局家电领域,在AWE…...
东莞网站建设 兼职/seo的基本内容
假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。 同样的情况也出现在 C 应用程序中。…...
![](/images/no-images.jpg)
企业网站建设的类型/香港域名注册网站
博客园闪存分页是用JavaScript生成的,今天发现在IE8下点击页码不能翻页,翻页操作是在当前页码的onclick事件中进行的。开始代码是这么写的:复制代码 代码如下:var a document.createElement("a");a.setAttribute("onclick&qu…...
![](https://img-blog.csdnimg.cn/img_convert/df7079dbd4f971266119ec26fbc4f789.jpeg)
上海企业网站制作哪家好/网店推广运营
每一年,InfoQ 的编辑团队都会邀请业内经验丰富的开发人员和实践者来讨论整个软件开发领域的发展趋势。这些讨论的结果以趋势报告的形式发布,每个报告都关注一组特定的主题——我们称之为“领域(Space)”。这些报道帮助编辑团队策划…...
![](https://img-blog.csdnimg.cn/img_convert/79410e4e392c92d4c03f71d92b0aa650.png)
网络建设合同范本/合肥网站优化平台
在同一台正在运行的电脑上暂时没法同时安装两个百度云软件。虽然不能同时安装两个百度云盘,但一个账号可以在百度云盘里面登录,另一个账号就在浏览器上面登录百度云。百度云盘具有容量大、速度快、安全等特点,文件上传至百度云后在有网络连接…...
wordpress 七牛云加速/优就业seo课程学多久
minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点、无环、路径的权重和为所有路径中最小的. graph-cut 对图的一个切割或者叫切断,会使图分离成为两个不相连的顶点集. 它基于树的两个基本属性:…...