Spring Boot 作为主流微服务框架,拥有成熟的社区生态。市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件,大概有几十篇文章,陆续会开放出来,感兴趣同学可以关注&收藏
简介
Redis 是一个开源、高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。支持更丰富的数据结构,例如 String、List、hash、 set、 zset 等,同时支持数据持久化。
除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从备份。可以说 Redis 兼具了缓存系统和数据库的一些特性。
Redis特性
高并发读写
持久化
丰富的数据类型
单进程单线程模型
数据自动过期
发布订阅
分布式
支持lua脚本
目前在从阿里巴巴、美团、百度、拼多多、快手等一线大厂到五六线小厂中广泛使用,对系统的高并发能力贡献极大,深受好评,开源社区非常活跃。
数据类型
1、String
二进制的字符串,最简单的k-v存储,类似于memcached的存储结构,它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度512M 。支持丰富的操作命令,如:
GET/MGET
SET/SETEX/MSET/MSETNX
INCR/DECR
GETSET
DEL
2、Hash
采用主子key存储信息,由field和关联的value组成Map。比如计数器,key表示帖子id,field表示点赞数、评论数、转发数等,value则表示计数值。常用命令:
HGET/HMGET/HGETALL
HSET/HMSET/HSETNX
HEXISTS/HLEN
HKEYS/HDEL
HVALS
3、List
该类型是一个有序的元素集合,基于双向链表实现。比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。常用命令:
LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSET
LINDEX/LRANGE
LLEN/LTRIM
4、Set
Set类型是一种无顺序集合。它和List类型最大的区别是:集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。底层是通过哈希表实现的。常用命令:
SADD/SPOP/SMOVE/SCARD
SINTER/SDIFF/SDIFFSTORE/SUNION
5、Sorted Set
是set的增强版本,有序集合类型,每个元素都会关联一个double类型的分数权值,通过这个权值来为集合中的成员进行从小到大的排序。与Set类型一样,其底层也是通过哈希表实现的。常用命令:
ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNT
ZINTER/ZDIFF/ZDIFFSTORE/ZUNION
适用场景
1、高性能缓存。缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以Redis用在缓存的场合非常多。
作为缓存使用时,一般有两种方式保存数据:
读取前,先去读Redis。如果没有数据,读取数据库,然后将数据预热到Redis。
写入时,先更新数据库,然后再写入Redis。
2、丰富的数据类型,满足多样化业务需求。
3、分布式锁
在很多互联网公司中都使用了分布式技术,分布式技术带来的挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的set nx
功能来编写分布式锁,如果设置返回1说明获取锁成功,否则获取锁失败。
4、消息队列
Redis 中 list 的数据结构实现是双向链表,所以可以非常便捷的应用于消息队列(生产者 / 消费者模型)。消息的生产者只需要通过 lpush 将消息放入 list,消费者便可以通过 rpop 取出该消息,并且可以保证消息的有序性。如果需要实现带有优先级的消息队列也可以选择 sorted set。而 pub/sub 功能也可以用作发布者 / 订阅者模型的消息。无论使用何种方式,由于 Redis 拥有持久化功能,也不需要担心由于服务器故障导致消息丢失的情况。
5、其他场景,如:秒杀、限流、计数器、排行榜、实时系统、共享session等
单线程的Redis为什么快
纯内存操作
单线程操作,避免了频繁的上下文切换
合理高效的数据结构
采用了非阻塞I/O多路复用机制(有一个文件描述符同时监听多个文件描述符是否有数据到来)
如何实现键值对的快速访问
Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。每个哈希桶中保存了键值对 数据。
当然哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。这也就是说,不管值是 String,还是集合类型,哈希桶中的元素都是指向它们的指针。
哈希表的最大优势就是让我们可以用 O(1) 的时间复杂度来快速查找到键值对。我们只需要计算key
的哈希值,就可以知道它所对应的哈希桶位置,然后就可以访问相应的 entry 元素。
hash值并不是唯一的,当面对海量数据存储,计算时可能会存在哈希冲突 ,导致两个entry落在同一个哈希桶中。解决方式也比较简单,引入链式哈希。同一个哈希桶中的多个元素用一个链表来保存,它们之间依次用指针连接。
项目实战
在pom.xml 中引入Spring Boot 官方提供的 starter组件
org.springframework.boot spring-boot-starter-data-redis
spring-boot-starter-data-redis
依赖于 spring-data-redis
和 lettuce
。
Spring Boot 1.X 版本默认使用的是 Jedis 客户端。2.X 版本替换成 Lettuce 客户端,如果习惯使用 Jedis 的话,可以从 spring-boot-starter-data-redis 中排除 Lettuce 并引入 Jedis。
Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 netty NIO 框架来高效地管理多个连接。
application.yaml
配置redis的地址信息以及lettuce 连接池参数
spring: redis: host: 127.0.0.1 port: 6379 # password: abEvH46*YsH&S25d89 lettuce: pool: maxIdle: 1000 # 连接池中的最大空闲连接 minIdle: 2 # 连接池中的最小空闲连接 maxWait: 10 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 maxActive: 1000 # 连接池最大连接数(使用负值表示没有限制)
初始化 redis的 RedisTemplate
模板bean实例
@Configuration public class RedisConfig { @Bean RedisTemplate redisTemplate(RedisConnectionFactory factory) { final StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(factory); template.setKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericToStringSerializer<>(Object.class)); template.setValueSerializer(new GenericToStringSerializer<>(Object.class)); template.afterPropertiesSet(); return template; } }
RedisTemplate
提供了多种类型的数据类型操作接口,满足多场景的业务需求。
接下来就可以通过单元测试来验证缓存效果了
@RunWith(SpringRunner.class) @SpringBootTest(classes = StartApplication.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class UserMapperTest { @Resource private CacheService cacheService; @Test public void test1_set1() { boolean result = cacheService.set("k1", "微观技术"); System.out.println(result); } @Test public void test2_get1() { String cacheResult = cacheService.get("k1"); System.out.println("k1 的缓存结果:" + cacheResult); } }
上面讲的都是通过手动方式写入、删除、查询缓存,缓存的处理逻辑散落在业务代码中。有没有更简单的方式?比如调用一个方法,通过方法上标注的注解自动从缓存中获取,如果查找不到再从数据库查,并自动将结果预热到缓存中。
Spring 注解式缓存
首先通过 RedisCacheConfiguration
生成默认配置,然后对缓存进行自定义化配置,比如过期时间、缓存前缀、key/value 序列化方法等,然后构建出一个RedisCacheManager
,其中通过keySerializationPair
方法为 key 配置序列化,valueSerializationPair
方法为 value 配置序列化。
@Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(30)) .prefixKeysWith("cache:user:") .disableCachingNullValues() .serializeKeysWith(keySerializationPair()) .serializeValuesWith(valueSerializationPair()); Map map = new HashMap(); map.put("user", redisCacheConfiguration); return RedisCacheManager.builder(factory) .withInitialCacheConfigurations(map).build(); } private RedisSerializationContext.SerializationPair keySerializationPair() { return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()); } private RedisSerializationContext.SerializationPair valueSerializationPair() { return RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()); }
修改、删除、查询等常见操作,官方都提供了对应的注解类,只需要在对应的方法上标注即可享受缓存功能,对研发同学及其便利,可以将精力专注到其它业务逻辑处理上。
@Component @CacheConfig(cacheNames = "user") public class UserService { @Cacheable(key = "#id") public User getUserById(Long id) { User user = User.builder().id(id).userName("雪糕( " + id + ")").age(18).address("杭州").build(); return user; } @CachePut(key = "#user.id") public User updateUser(User user) { user.setUserName("雪糕(新名称)"); return user; } @CacheEvict(key = "#id") public void deleteById(Long id) { System.out.println("db删除数据:" + id); } }
常用注解类 :
1、 @CacheConfig 类级别的缓存注解,允许共享缓存名称
2、 @Cacheable 一般用于查询操作,根据 key 查询缓存
如果 key 存在,直接返回缓存中的数据。
如果 key 不存在,查询 db,并将结果更新到缓存中。
3、 @CachePut 一般用于更新和插入操作,每次都会请求 db,然后通过 key 对 Redis 进行写操作。
如果 key 存在,更新缓存
如果 key 不存在,插入缓存
4、 @CacheEvict 触发移除缓存
根据 key 删除缓存中的数据。
项目源码地址
https://github.com/aalansehaiyang/spring-boot-bulking 模块:spring-boot-bulking-redis
往期推荐
SpringBoot整合高性能微服务框架 gRPC
还在用Mybatis? Spring Data JPA 让你的开发效率提升数倍!
Spring Boot 集成 ElasticSearch,实现高性能搜索
框架扩展:注解 RPC Consumer属性动态注入
淘宝订单自动确认收货的N种实现,秒杀面试官
深入剖析优惠券核心架构设计
某生鲜电商平台的库存扣减方案
如何设计一个高性能的秒杀系统
如何通过Binlog来实现不同系统间数据同步
电商优惠券如何设计?
单台 MySQL 支撑不了这么多的并发请求,我们该怎么办?
DDD是如何解决复杂业务扩展问题?
springboot + aop + Lua分布式限流的最佳实践
你可能感兴趣的:(开箱即用,一键集成 Redis 缓存)
芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案
青牛科技-Allen
GLOBALCHIP 音视频 单片机 嵌入式硬件 收录机 人工智能 家用电器
引言在直播设备、智能语音终端等新兴应用的推动下,高性能音频采集系统的需求持续增长。芯麦半导体推出的GC1808立体声音频模数转换器,凭借其全集成信号链设计和灵活的接口配置,为开发者提供了高性价比的音频前端解决方案。本文将从核心架构、关键技术特性及典型应用场景三个方面,深入解析这款芯片的设计亮点。一、GC1808核心特性概览全集成信号链内置64倍过采样率Δ-Σ调制器集成数字梳状滤波器(CombFil
Vulkan
hanpfei
Android 图形系统
Android7.0添加了对Vulkan的支持,一个高性能3D图形的低开销跨平台API。像OpenGLES一样,Vulkan提供了在应用中创建高质量,实时图形的工具。Vulkan的优势包括CPU开销降低及支持SPIR-VBinaryIntermediate语言。片上系统生产商(SoCs)比如GPU独立硬件供应商(IHVs)可以为Android编写Vulkan驱动;OEMs简单地需要为特定的硬件集成
Steamworks:Steamworks平台概览_2024-07-25_00-28-31.Tex
chenjj4003
游戏开发2 php 服务器 linux 性能优化 arcgis 游戏 github
Steamworks:Steamworks平台概览Steamworks简介1.1Steamworks平台概述Steamworks是一个由Valve公司开发的全面的软件开发工具包(SDK),旨在帮助游戏开发者和发行商在Steam平台上发布和管理他们的游戏。Steamworks集成了Steam的多项服务,包括但不限于自动更新、成就系统、云存储、社交网络功能、反作弊机制、以及Steam创意工坊等,为游戏
Oculus SDK:Oculus集成Unity开发环境_2024-07-26_05-43-25.Tex
chenjj4003
游戏开发 unity 游戏引擎 microsoft mr ui c# python
OculusSDK:Oculus集成Unity开发环境OculusSDK:Oculus集成Unity开发环境环境准备Unity版本选择在开始集成OculusSDK到Unity开发环境之前,选择正确的Unity版本至关重要。OculusSDK支持特定版本的Unity,因此确保你的Unity版本与OculusSDK兼容是必要的。截至撰写本教程时,Oculus建议使用Unity2020.3.14f1或更
如何连接别人的redis服务器吗?
黑客KKKing
网络安全 网络工程师 计算机 电脑 web安全 网络 安全
电脑怎么连接别的网络“笔记本电脑无法连接无线网络怎么办?”,说到这个问题,小编对这样类型的问题还真的回答了不少了,无非就那么几种情况,一一的排除,就找到问题的所在问题了,那么怎么排除或者解决呢?下面电脑知识吧的小编就简单分享一下吧:解决分析思路:手机可以可以连接到无线网络,说明无线信号没有问题,路由器应该也没问题,问题更大的可能是在电脑的设置、首先,驱动程序是否正常安装、检查这个,通常可以右键“我
Docker 私有仓库 Harbor 详解
drebander
docker docker 容器 运维
1.什么是Harbor?Harbor是一个开源的Docker镜像仓库管理平台,旨在提供更强大的企业级功能,支持私有Docker镜像仓库的管理。Harbor为Docker提供了集中式的镜像管理服务,支持用户和权限管理、镜像版本控制、安全扫描、LDAP集成等功能,是Docker镜像管理的最佳选择之一,特别适合需要高安全性、可扩展性的生产环境。Harbor的主要特点:企业级安全性:提供镜像扫描、安全策略
Redis安全机制与数据备份:保障数据安全与高可用性
一碗黄焖鸡三碗米饭
Redis技术全景解析 redis 安全 数据库 缓存 架构 开发语言
Redis安全机制与数据备份:保障数据安全与高可用性作为一个高效的内存数据库,Redis因其卓越的性能和灵活的应用场景,成为了分布式缓存、消息队列、实时分析等领域的核心组件。然而,在大规模的生产环境中,Redis不仅需要关注性能,还需要具备高安全性和高可用性,以保障数据的完整性和持续服务。为此,Redis提供了一些安全机制和数据备份方案,帮助用户应对各种潜在的风险。本文将深入探讨Redis的安全机
win11系统亮度调节显示条存在,调节失效的问题解决及补充
Luis Li 的猫猫
windows
屏幕突然无法调节亮度,按键盘上的亮度调节快捷键没反应,点击右下角电源打开亮度调节,进入设置-系统-屏幕里有亮度调节的栏,滑动但不改变亮度。没有亮度条是显示卡驱动丢失根据目前CSDN所提出的主流方式以及线下售后门店人员所提供的解决方案1.设备管理器更新显示卡驱动(核显2.更新显示屏(监视器)驱动3.禁用显卡后更新显示屏驱动4.检查监视器是否为“通用即插即用”不是“非通用xx”5.上述操作后均要重启电
第三日八股文
是钤不是铃
八股文 java
1.Redis中的三种高效缓存读写策略旁路缓存模式:服务端以数据库MySQL为主,Redis为辅,进行存储。写操作:先更新数据库,再删除缓存读操作:先从缓存中读取数据,读取成功则直接返回;读取失败,去数据库中读取,读取完毕后写入缓存中。读写穿透:以Redis为主要的数据存储,依赖Cache服务负责将数据写入数据库中。异步缓存写入:只更新缓存,不利用Cache服务更新数据库,将要消费的消息放入消息队
百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
百度智能云技术站
deepseek 百度百舸 专有云
在私有云环境中成功部署DeepSeek满血版并实现性能调优,并不是一件容易的事情。选择合适的GPU配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发……完成业务测试,成功融入生产业务中。为了帮助企业快速实现DeepSeek服务的落地,百度智能云推出「百度百舸DeepSeek一体机」。百度百舸DeepSeek一体机基于百度百舸平台打造,提供纯国产的算力组合,支持昆仑芯P800单
Python从0到100(四):Python中的运算符介绍(补充)
是Dream呀
python java 数据库
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
Python从0到100(三十五):beautifulsoup的学习
是Dream呀
Dream的茶话会 python beautifulsoup 学习
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
阿里云 MaxCompute MaxQA 开启公测,解锁近实时高效查询体验
阿里云大数据AI技术
阿里云 云原生 MaxCompute 大数据 实时数仓
随着实时、近实时数据分析需求的持续增长,查询响应时间在现代数据分析和业务应用中变得越来越重要。为减少查询响应时间,提升数据效率,阿里云云原生大数据计算服务MaxCompute推出MaxQA(原MCQA2.0)查询加速功能,在独享的查询加速资源池的基础上,对管控链路、查询优化器、执行引擎、存储引擎以及缓存机制等多个环节进行全面优化,显著减少了查询响应时间,适用于BI场景、交互式分析以及近实时数仓等对
延迟任务的11种实现方式(下)!!
架构文摘JGWZ
学习 后端 Java 编程语言
接上文:Redisson的RDelayedQueueRedisson他是Redis的儿子(Redisson),基于Redis实现了非常多的功能,其中最常使用的就是Redis分布式锁的实现,但是除了实现Redis分布式锁之外,它还实现了延迟队列的功能。先来个demo引入pom org.redisson redisson 3.13.1封装了一个RedissonDelayQueue类@
JAX-WS与JAX-RS比较分析及与SpringMVC集成实现
零度anngle
SpringMVC Restful spring mvc JAX-RS JAX-WS
1、导言过去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念。如果你还不了解REST,那这个简短的介绍将有助你快速掌握REST,此外还可以点击这里了解关于REST的更多信息。现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开WebAPI,因此REST变得越来越重要也就不足为奇了。使用Ajax进行通信的富浏览器端也在朝这个目标不断迈进。这个架构原则提升了万维网
探索并应用Copilot背后的技术:自主代理架构
花生糖@
AIGC学习资料库 copilot AIGC 人工智能
引言Copilot技术,作为现代软件开发中的一个创新工具,正在改变编程的协作方式。它通过集成到开发环境中,为开发者提供实时的代码建议和自动化的代码补全功能。本篇文章将深入探讨Copilot背后的技术——自主代理架构,并探讨其在软件开发中的应用潜力。Copilot技术概述Copilot是由GitHub和OpenAI合作开发的一项技术,它利用机器学习模型来理解代码上下文,并提供智能的代码补全建议。这项
Scrapy分布式爬虫系统
ivwdcwso
开发 运维 scrapy 分布式 爬虫 python 开发
一、概述在这篇博文中,我们将介绍如何使用Docker来部署Scrapy分布式爬虫系统,包括Scrapyd、Logparser和Scrapyweb三个核心组件。这种部署方式适用于Scrapy项目和Scrapy-Redis分布式爬虫项目。需要安装的组件:Scrapyd-服务端,用于运行打包后的爬虫代码,所有爬虫机器都需要安装。Logparser-服务端,用于解析爬虫日志,配合Scrapyweb进行实时
麒麟管家全新升级,运维问题“一键修复”
运维
麒麟管家是openKylin社区SystemManagerSIG开发的一款面向社区用户,能倾听用户烦恼和诉求,也能提供便利途径、解决用户问题的系统管理类应用,可以为用户提供问题反馈、系统垃圾清理、电脑故障排查、硬件设备管理及系统小工具等一站式服务,帮助用户更好地使用openKylin操作系统。产品的发展与提升离不开用户的信赖与支持。麒麟管家在openKylin0.9版本首次上线,并持续更新迭代,在
16、《SpringBoot+MyBatis集成(4) - 性能优化 - 事务与缓存机制剖析》
wolf犭良
SpringBoot spring boot mybatis 性能优化
SpringBoot+MyBatis集成-深度解析事务机制与缓存性能优化实践一、架构整合核心原理剖析1.1事务控制底层实现SpringBoot通过@EnableTransactionManagement激活声明式事务管理,其核心在于DataSourceTransactionManager与MyBatis的整合。当使用@Transactional注解时:通过AOP代理创建事务边界使用ThreadLo
BIM Revit新功能“批量链接”(粉丝Free提需求)
广州明周科技
BIM 建筑模型 Revit revit bim revit二次开发 c# 深度学习 统一建模语言 建筑模型
❤-----❤又是进步的一天啊❤------❤#简介批量链接功能说明:一键清空已有链接:用户可以通过点击此按钮,快速清空当前项目中所有已存在的Revit链接。此功能适用于需要重置链接状态或清除不必要链接的场景。一键重新载入链接:此按钮用于重新加载所有已链接的Revit项目文件,确保项目中显示的链接信息是最新的。适用于需要同步或更新链接内容的情况。修改时间显示:数据表格新增了一列“修改时间”,用于显
redis常用迭代方法zscan,sscan,hscan,scan
飞升不如收破烂~
数据库
redisClient.sscan和redisClient.zscan都是Redis的命令,用于扫描集合或有序集合中的元素。区别在于:sscan用于扫描集合中的元素,集合是无序的,所以sscan返回的元素也是无序的。zscan用于扫描有序集合中的元素,有序集合是按照分数(score)排序的,所以zscan返回的元素是按照分数排序的。另外,sscan和zscan都支持分批次扫描,可以通过指定游标(c
力扣每日一题【算法学习day.128】
南宫生
算法 # 动态规划 leetcode 学习 算法 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.区间内查询数字的频率题面:2080.区间内查询数字的频率-力扣(LeetCode)题面:分析:缓存每个数字的下标集合,然后通过二分快速算出满足区间的下标个数附上灵神代码:classRangeFreqQuery{privatefinal
「QT」布局类 之 QGridLayout 网格布局类
何曾参静谧
「QT」QT5程序设计 qt 开发语言
✨博客主页何曾参静谧的博客(✅关注、点赞、⭐收藏、转发)文章专栏「QT」QT5程序设计全部专栏(专栏会有变化,以最新发布为准)「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C++」C/C++程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制开发「Py」Python程序设计「Ma
芯麦GC1267R单相双极驱动电机预驱动器解析:变速功能与PWM兼容性设计
深圳市青牛科技实业有限公司 小芋圆
芯麦 单片机 智能马桶 摄像机 机器人技术 电动牙刷
一、芯片概述芯麦GC1267R是一款专为低电压单相双极步进电机或直流有刷电机设计的预驱动芯片,集成了高效的驱动逻辑和保护功能,支持PWM调速和外部信号控制,广泛应用于智能家居、工业设备、医疗仪器等领域。其核心特性包括:单相双极驱动架构:支持全桥驱动,适配低至2.5V的电机电压。PWM兼容性:可通过外部PWM信号实现精准调速(频率范围1kHz~100kHz)。低功耗设计:静态电流低至1μA(休眠模式
Spring Boot:Java开发的神奇加速器(二)
小周不想卷
艾思科蓝学术会议投稿 spring boot
目录四、深入理解SpringBoot配置4.1配置文件类型4.2常用配置项4.3自定义配置五、数据访问与持久化5.1集成SpringDataJPA5.2编写数据访问层代码5.3事务管理四、深入理解SpringBoot配置4.1配置文件类型在SpringBoot应用中,主要有两种配置文件类型,即application.properties和application.yml(或application.y
Python HTTP 请求工具类 HttpUtils:简化 HTTP 请求的高效工具
FinkGO小码
人工智能的基石 python http 网络 开发语言 pycharm 后端 经验分享
在现代的Web开发和API集成中,HTTP请求是最常见的操作之一。无论是获取数据、提交表单,还是与RESTfulAPI交互,我们都需要频繁地发送HTTP请求。为了简化这些操作,提升代码的可读性和可维护性,我们可以使用一个高效的工具类——HttpUtils。本文将详细介绍HttpUtils的设计思路、功能实现以及实际应用场景,帮助你快速掌握这一工具的使用方法。1.HttpUtils简介HttpUti
如何发起http的请求,在系统中集成
红豆和绿豆
java http 网络协议 网络
在Java中发起HTTP请求,有多种开源框架可供选择。以下是一些常用的开源框架及其特点:1.ApacheHttpClientApacheHttpClient是一个功能强大的HTTP客户端库,支持同步和异步请求,广泛用于各种Java应用。2.OkHttpOkHttp是一个高效的HTTP客户端,支持HTTP/2和WebSocket,具有自动重试和恢复功能。3.UniRestUniRest是一个简单易用
GitLab 概念
百里自来卷
gitlab
GitLab是一个基于Git的DevOps平台,提供了版本控制、持续集成/持续交付(CI/CD)、代码审查、项目管理等一系列功能。它帮助开发团队在整个软件生命周期中进行协作和管理。具体来说,GitLab提供以下功能:版本控制:GitLab基于Git进行代码管理,允许团队成员进行版本控制和分支管理。CI/CD:GitLab内建了强大的持续集成和持续交付功能,能够自动化代码的构建、测试和部署。问题跟踪
探索 Open WebUI:功能全面的开源交互平台
gs80140
基础知识科谱 AI 人工智能
目录探索OpenWebUI:功能全面的开源交互平台轻松部署兼容多API集成精细权限和用户组管理跨设备响应式设计移动渐进式Web应用(PWA)全面支持Markdown和LaTeX免提语音/视频通话模型构建器原生Python函数调用工具本地RAG集成RAG网络搜索网页浏览功能图像生成集成多模型对话基于角色的访问控制(RBAC)多语言支持插件支持与管道集成持续更新探索OpenWebUI:功能全面的开源交
从零开始部署DeepSeek:基于Ollama+Flask的本地化AI对话系统
arbboter
flask 人工智能 python ollama deepseek
从零开始部署DeepSeek:基于Ollama+Flask的本地化AI对话系统一、部署背景与工具选型在AI大模型遍地开花的2025年,DeepSeekR1凭借其出色的推理能力和开源特性成为开发者首选。本文将以零基础视角,通过以下工具链实现本地化部署:1.Ollama:轻量级模型管理工具,支持一键拉取、运行模型Ollama是一个功能强大的大语言模型管理端,专为下载、运行和调用大型语言模型(如Deep
JAVA中的Enum
周凡杨
java enum 枚举
Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。 例如,一个星期内只有七天 我们通常这样实现上面的定义:
public String monday;
public String tuesday;
public String wensday;
public String thursday
赶集网mysql开发36条军规
Bill_chen
mysql 业务架构设计 mysql调优 mysql性能优化
(一)核心军规 (1)不在数据库做运算 cpu计算务必移至业务层; (2)控制单表数据量 int型不超过1000w,含char则不超过500w; 合理分表; 限制单库表数量在300以内; (3)控制列数量 字段少而精,字段数建议在20以内
Shell test命令
daizj
shell 字符串 test 数字 文件比较
Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
实例演示:
num1=100
num2=100if test $[num1]
XFire框架实现WebService(二)
周凡杨
java webservice
有了XFire框架实现WebService(一),就可以继续开发WebService的简单应用。
Webservice的服务端(WEB工程):
两个java bean类:
Course.java
package cn.com.bean;
public class Course {
private
重绘之画图板
朱辉辉33
画图板
上次博客讲的五子棋重绘比较简单,因为只要在重写系统重绘方法paint()时加入棋盘和棋子的绘制。这次我想说说画图板的重绘。
画图板重绘难在需要重绘的类型很多,比如说里面有矩形,园,直线之类的,所以我们要想办法将里面的图形加入一个队列中,这样在重绘时就
Java的IO流
西蜀石兰
java
刚学Java的IO流时,被各种inputStream流弄的很迷糊,看老罗视频时说想象成插在文件上的一根管道,当初听时觉得自己很明白,可到自己用时,有不知道怎么代码了。。。
每当遇到这种问题时,我习惯性的从头开始理逻辑,会问自己一些很简单的问题,把这些简单的问题想明白了,再看代码时才不会迷糊。
IO流作用是什么?
答:实现对文件的读写,这里的文件是广义的;
Java如何实现程序到文件
No matching PlatformTransactionManager bean found for qualifier 'add' - neither
林鹤霄
java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match!
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是
Row size too large (> 8126). Changing some columns to TEXT or BLOB
aigo
column
原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large
异常信息:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM
JS 格式化时间
alxw4616
JavaScript
/**
* 格式化时间 2013/6/13 by 半仙 alxw4616@msn.com
* 需要 pad 函数
* 接收可用的时间值.
* 返回替换时间占位符后的字符串
*
* 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
* 如 YYYY 4占4位 YY 占2位<p></p>
* MM DD hh mm
队列中数据的移除问题
百合不是茶
队列移除
队列的移除一般都是使用的remov();都可以移除的,但是在昨天做线程移除的时候出现了点问题,没有将遍历出来的全部移除, 代码如下;
//
package com.Thread0715.com;
import java.util.ArrayList;
public class Threa
Runnable接口使用实例
bijian1013
java thread Runnable java多线程
Runnable接口
a. 该接口只有一个方法:public void run();
b. 实现该接口的类必须覆盖该run方法
c. 实现了Runnable接口的类并不具有任何天
oracle里的extend详解
bijian1013
oracle 数据库 extend
扩展已知的数组空间,例:
DECLARE
TYPE CourseList IS TABLE OF VARCHAR2(10);
courses CourseList;
BEGIN
-- 初始化数组元素,大小为3
courses := CourseList('Biol 4412 ', 'Psyc 3112 ', 'Anth 3001 ');
--
【httpclient】httpclient发送表单POST请求
bit1129
httpclient
浏览器Form Post请求
浏览器可以通过提交表单的方式向服务器发起POST请求,这种形式的POST请求不同于一般的POST请求
1. 一般的POST请求,将请求数据放置于请求体中,服务器端以二进制流的方式读取数据,HttpServletRequest.getInputStream()。这种方式的请求可以处理任意数据形式的POST请求,比如请求数据是字符串或者是二进制数据
2. Form
【Hive十三】Hive读写Avro格式的数据
bit1129
hive
1. 原始数据
hive> select * from word;
OK
1 MSN
10 QQ
100 Gtalk
1000 Skype
2. 创建avro格式的数据表
hive> CREATE TABLE avro_table(age INT, name STRING)STORE
nginx+lua+redis自动识别封解禁频繁访问IP
ronin47
在站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误时,可利用nginx+lua+redis实现在指定的时间段 内,若单IP的请求量达到指定的数量后对该IP进行封禁,nginx返回403禁止访问。利用redis的expire命令设置封禁IP的过期时间达到在 指定的封禁时间后实行自动解封的目的。
一、安装环境:
CentOS x64 release 6.4(Fin
java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class BinTreeTraverse {
//private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private int[] array={ 10,6,
Spring源码学习-XML 配置方式的IoC容器启动过程分析
bylijinnan
java spring IOC
以FileSystemXmlApplicationContext为例,把Spring IoC容器的初始化流程走一遍:
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml&q
[科研与项目]民营企业请慎重参与军事科技工程
comsci
企业
军事科研工程和项目 并非要用最先进,最时髦的技术,而是要做到“万无一失”
而民营科技企业在搞科技创新工程的时候,往往考虑的是技术的先进性,而对先进技术带来的风险考虑得不够,在今天提倡军民融合发展的大环境下,这种“万无一失”和“时髦性”的矛盾会日益凸显。。。。。。所以请大家在参与任何重大的军事和政府项目之前,对
spring 定时器-两种方式
cuityang
spring quartz 定时器
方式一:
间隔一定时间 运行
<bean id="updateSessionIdTask" class="com.yang.iprms.common.UpdateSessionTask" autowire="byName" />
<bean id="updateSessionIdSchedule
简述一下关于BroadView站点的相关设计
damoqiongqiu
view
终于弄上线了,累趴,戳这里http://www.broadview.com.cn
简述一下相关的技术点
前端:jQuery+BootStrap3.2+HandleBars,全站Ajax(貌似对SEO的影响很大啊!怎么破?),用Grunt对全部JS做了压缩处理,对部分JS和CSS做了合并(模块间存在很多依赖,全部合并比较繁琐,待完善)。
后端:U
运维 PHP问题汇总
dcj3sjt126com
windows2003
1、Dede(织梦)发表文章时,内容自动添加关键字显示空白页
解决方法:
后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。
后台>系统>系统基本参数>其他选项>自动提取关键字,这里选择“是”。
2、解决PHP168超级管理员上传图片提示你的空间不足
网站是用PHP168做的,反映使用管理员在后台无法
mac 下 安装php扩展 - mcrypt
dcj3sjt126com
PHP
MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展,具体如下:
下载并解压libmcrypt-2.5.8.tar.gz。
在终端执行如下命令: tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --disable-posix-threads --
MongoDB更新文档 [四]
eksliang
mongodb Mongodb更新文档
MongoDB更新文档
转载请出自出处:http://eksliang.iteye.com/blog/2174104
MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。
语法结构如下:
db.collection.update( criteria, objNew, upsert, multi)
参数含义 参数
Linux下的解压,移除,复制,查看tomcat命令
y806839048
tomcat
重复myeclipse生成webservice有问题删除以前的,干净
1、先切换到:cd usr/local/tomcat5/logs
2、tail -f catalina.out
3、这样运行时就可以实时查看运行日志了
Ctrl+c 是退出tail命令。
有问题不明的先注掉
cp /opt/tomcat-6.0.44/webapps/g
Spring之使用事务缘由(3-XML实现)
ihuning
spring
用事务通知声明式地管理事务
事务管理是一种横切关注点。为了在 Spring 2.x 中启用声明式事务管理,可以通过 tx Schema 中定义的 <tx:advice> 元素声明事务通知,为此必须事先将这个 Schema 定义添加到 <beans> 根元素中去。声明了事务通知后,就需要将它与切入点关联起来。由于事务通知是在 <aop:
GCD使用经验与技巧浅谈
啸笑天
GC
前言
GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。
dispatch_once_t必须是全局或static变量
这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下: 1
linux(Ubuntu)下常用命令备忘录1
macroli
linux 工作 ubuntu
在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls
ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:
ls / 显示/.下的所有文件和目录
ls -l 给出文件或者文件夹的详细信息
ls -a 显示所有文件,包括隐藏文
nodejs同步操作mysql
qiaolevip
学习永无止境 每天进步一点点 mysql nodejs
// db-util.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host: 'localhost',
user: 'root',
password: '',
database: 'test',
port: 3306
});
一起学Hive系列文章
superlxw1234
hive Hive入门
[一起学Hive]系列文章 目录贴,入门Hive,持续更新中。
[一起学Hive]之一—Hive概述,Hive是什么
[一起学Hive]之二—Hive函数大全-完整版
[一起学Hive]之三—Hive中的数据库(Database)和表(Table)
[一起学Hive]之四-Hive的安装配置
[一起学Hive]之五-Hive的视图和分区
[一起学Hive
Spring开发利器:Spring Tool Suite 3.7.0 发布
wiselyman
spring
Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。
在3.7.0版本主要做了如下的更新:
将eclipse版本更新至Eclipse Mars 4.5 GA
Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,