redis数据类型详解

redis是基于键值对来存储一系列信息的非关系型数据库,也就是说每条信息都一定有一个key。

使用的工具是StringRedisTemplate

一、基本数据类型

1.String(字符串):应用:计数器、分布式锁、共享session、缓存预热
  • SET key value:设置指定键的值。
  • GET key:获取指定键的值。
  • INCR key:将键的值增加1,如果键不存在则创建并设为0后再加1。
  • DECR key:将键的值减少1,如果键不存在则创建并设为0后再减1。
  • INCRBY key increment:将键的值增加指定的增量。
  • DECRBY key decrement:将键的值减少指定的减量。
设置和获取键值
@Service
public class RedisService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void setKeyValue(String key, String value) {stringRedisTemplate.opsForValue().set(key, value);}public String getKeyValue(String key) {return stringRedisTemplate.opsForValue().get(key);}
}
增加和减少数值
public void incrementKey(String key, long increment) {stringRedisTemplate.opsForValue().increment(key, increment);
}public void decrementKey(String key, long decrement) {stringRedisTemplate.opsForValue().decrement(key, decrement);
}
追加值
public void appendValue(String key, String value) {stringRedisTemplate.opsForValue().append(key, value);
}

2.Hash(哈希):结构是key:(key:value);应用:缓存用户信息
  • HSET key field value:设置哈希表中字段的值。
  • HGET key field:获取哈希表中字段的值。
  • HMSET key field1 value1 [field2 value2 ...]:同时设置哈希表中多个字段的值。
  • HMGET key field1 [field2 ...]:获取哈希表中多个字段的值。
  • HGETALL key:获取哈希表中所有字段和值。
  • HDEL key field1 [field2 ...]:删除哈希表中的一个或多个字段。
  • HEXISTS key field:检查哈希表中是否存在指定字段。
  • HLEN key:获取哈希表中字段的数量。
  • HKEYS key:获取哈希表中所有的字段。
  • HVALS key:获取哈希表中所有的值。
设置和获取哈希表字段
public void setHashField(String key, String field, String value) {stringRedisTemplate.opsForHash().put(key, field, value);
}public String getHashField(String key, String field) {return (String) stringRedisTemplate.opsForHash().get(key, field);
}
获取哈希表所有字段和值
public Map<Object, Object> getAllHashFields(String key) {
return stringRedisTemplate.opsForHash().entries(key);
}
删除哈希表字段
public void deleteHashField(String key, String field) {stringRedisTemplate.opsForHash().delete(key, field);
}

3.List(列表):有序可重复;应用:消息队列,文章列表
  • LPUSH key value1 [value2 ...]:将一个或多个值插入列表的头部。
  • RPUSH key value1 [value2 ...]:将一个或多个值插入列表的尾部。
  • LPOP key:移除并返回列表的第一个元素。
  • RPOP key:移除并返回列表的最后一个元素。
  • LRANGE key start stop:获取列表中指定范围的元素。
  • LLEN key:获取列表的长度。
  • LINDEX key index:获取列表中指定位置的元素。
  • LSET key index value:设置列表中指定位置的元素值。
  • LREM key count value:从列表中移除指定数量的值。
插入值到列表头部和尾部
public void pushToListHead(String key, String value) {stringRedisTemplate.opsForList().leftPush(key, value);
}public void pushToListTail(String key, String value) {stringRedisTemplate.opsForList().rightPush(key, value);
}
移除并返回列表的第一个和最后一个元素
public String popFromListHead(String key) {return stringRedisTemplate.opsForList().leftPop(key);
}public String popFromListTail(String key) {
return stringRedisTemplate.opsForList().rightPop(key);
}
获取列表中指定范围的元素
public List<String> getListRange(String key, long start, long end) {return stringRedisTemplate.opsForList().range(key, start, end);
}

4.集合(Set):无序且不重复;应用:关注列表,共同关注,生成随机数抽奖
  • SADD key member1 [member2 ...]:将一个或多个成员添加到集合中。
  • SMEMBERS key:获取集合中的所有成员。
  • SISMEMBER key member:检查成员是否存在于集合中。
  • SREM key member1 [member2 ...]:从集合中移除一个或多个成员。
  • SCARD key:获取集合中成员的数量。
  • SINTER key1 [key2 ...]:获取多个集合的交集。
  • SUNION key1 [key2 ...]:获取多个集合的并集。
  • SDIFF key1 [key2 ...]:获取多个集合的差集。
  • SRANDMEMBER key [count]:随机返回集合中的一个或多个成员。
添加和移除集合成员
public void addSetMember(String key, String member) {stringRedisTemplate.opsForSet().add(key, member);
}public void removeSetMember(String key, String member) {stringRedisTemplate.opsForSet().remove(key, member);
}
获取集合中的所有成员
public Set<String> getSetMembers(String key) {
return stringRedisTemplate.opsForSet().members(key);
}
检查成员是否存在于集合中
public boolean isSetMember(String key, String member) {return stringRedisTemplate.opsForSet().isMember(key, member);
}

5.有序集合(Sorted Set):有序且不重复,分数可以相同。点赞排行榜()
  • ZADD key score1 member1 [score2 member2 ...]:将一个或多个成员及其分数添加到有序集合中。
  • ZRANGE key start stop [WITHSCORES]:按分数从小到大返回有序集合中指定范围的成员。
  • ZREVRANGE key start stop [WITHSCORES]:按分数从大到小返回有序集合中指定范围的成员。
  • ZRANK key member:返回成员在有序集合中的排名,分数从小到大。
  • ZREVRANK key member:返回成员在有序集合中的排名,分数从大到小。
  • ZREM key member1 [member2 ...]:从有序集合中移除一个或多个成员。
  • ZCARD key:获取有序集合中成员的数量。
  • ZCOUNT key min max:统计有序集合中分数在指定范围内的成员数量。
  • ZSCORE key member:获取成员在有序集合中的分数。
  • ZINCRBY key increment member:将成员的分数增加指定的增量。
  • ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在新的有序集合中。
  • ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在新的有序集合中。

添加和移除有序集合成员
public void addSortedSetMember(String key, String member, double score) {stringRedisTemplate.opsForZSet().add(key, member, score);
}public void removeSortedSetMember(String key, String member) {stringRedisTemplate.opsForZSet().remove(key, member);
}
获取有序集合中指定范围的成员
public Set<String> getSortedSetRange(String key, long start, long end) {return stringRedisTemplate.opsForZSet().range(key, start, end);
}public Set<String> getSortedSetReverseRange(String key, long start, long end) {return stringRedisTemplate.opsForZSet().reverseRange(key, start, end);
}
获取成员的排名
public Long getSortedSetRank(String key, String member) {return stringRedisTemplate.opsForZSet().rank(key, member);
}public Long getSortedSetReverseRank(String key, String member) {return stringRedisTemplate.opsForZSet().reverseRank(key, member);
}

6.通用命令
  • DEL key:删除键。
  • EXISTS key:检查键是否存在。
  • EXPIRE key seconds:设置键的过期时间(秒)。
  • TTL key:获取键的剩余生存时间(秒)。
  • TYPE key:获取键的类型。
  • KEYS pattern:查找符合给定模式的键。
  • FLUSHDB:清空当前数据库中的所有键。
  • FLUSHALL:清空所有数据库中的所有键。
删除键
public void deleteKey(String key) {
stringRedisTemplate.delete(key);
}
检查键是否存在
public boolean existsKey(String key) {
return stringRedisTemplate.hasKey(key);
}
设置键的过期时间
public void expireKey(String key, long timeout, TimeUnit unit) {stringRedisTemplate.expire(key, timeout, unit);
}
获取键的剩余生存时间
public Long getKeyTTL(String key) {
return stringRedisTemplate.getExpire(key);
}
清空当前数据库
public void flushDatabase() {stringRedisTemplate.getConnectionFactory().getConnection().flushDb();
}
清空所有数据库
public void flushAllDatabases() {stringRedisTemplate.getConnectionFactory().getConnection().flushAll();
}

二、高级数据类型

1. Bitmaps(位图)

特点

  • 位图是一种特殊的字符串类型,每个位可以存储 0 或 1。
  • 位图操作可以用于高效地存储和检索二进制数据。

应用场景

  • 用户签到:记录用户每天是否签到,每个位表示一天,1 表示签到,0 表示未签到。
  • 统计分析:记录某个时间段内用户的活跃情况,如每日登录用户数。
  • 权限控制:记录用户的权限,每个位表示一种权限。

常用命令

  • SETBIT key offset value:设置指定偏移量上的位值。
  • GETBIT key offset:获取指定偏移量上的位值。
  • BITCOUNT key [start] [end]:统计指定键中 1 的数量。
  • BITOP operation destkey key [key ...]:对多个位图进行按位操作(AND、OR、NOT、XOR)。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisBitMapService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 设置位图中的某一位** @param key 键* @param offset 位偏移量* @param value 位值(true 或 false)*/public void setBit(String key, long offset, boolean value) {stringRedisTemplate.getConnectionFactory().getConnection().setBit(key.getBytes(), offset, value);}/*** 获取位图中的某一位** @param key 键* @param offset 位偏移量* @return 位值(true 或 false)*/public boolean getBit(String key, long offset) {return stringRedisTemplate.getConnectionFactory().getConnection().getBit(key.getBytes(), offset);}/*** 计算位图中 1 的数量** @param key 键* @return 1 的数量*/public long bitCount(String key) {return stringRedisTemplate.execute((RedisConnection connection) -> connection.bitCount(key.getBytes()));}/*** 对多个位图进行按位操作并将结果存储到目标位图中** @param destKey 目标键* @param keys 源键数组* @return 结果位图中 1 的数量*/public long bitOpAndStore(String destKey, String... keys) {return stringRedisTemplate.execute((RedisConnection connection) -> connection.bitOp(RedisConnection.BitOperation.AND, destKey.getBytes(), toByteArrays(keys)));}/*** 将字符串数组转换为字节数组** @param keys 字符串数组* @return 字节数组*/private byte[][] toByteArrays(String[] keys) {byte[][] byteKeys = new byte[keys.length][];for (int i = 0; i < keys.length; i++) {byteKeys[i] = keys[i].getBytes();}return byteKeys;}
}

2. HyperLogLog

特点

  • 用于估计集合的基数(即集合中不重复元素的数量)。
  • 占用空间极小,每个 HyperLogLog 只占用 12 KB 内存。
  • 有一定的误差率,但误差率通常在 0.81% 以内。

应用场景

  • 独立访客统计:统计网站的独立访客数。
  • 日活用户:统计应用的每日活跃用户数。
  • 去重统计:统计某一时间段内的不重复事件数。

常用命令

  • PFADD key element [element ...]:添加一个或多个元素到 HyperLogLog。
  • PFCOUNT key [key ...]:返回一个或多个 HyperLogLog 的近似基数。
  • PFMERGE destkey sourcekey [sourcekey ...]:将多个 HyperLogLog 合并到一个新的 HyperLogLog 中。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisHyperLogLogService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 向 HyperLogLog 中添加一个或多个元素** @param key 键* @param elements 元素数组*/public void addElementToHyperLogLog(String key, String... elements) {stringRedisTemplate.execute((RedisConnection connection) -> {connection.pfAdd(key.getBytes(), toByteArrays(elements));return null;});}/*** 获取 HyperLogLog 的近似基数** @param key 键* @return 近似基数*/public long getApproximateCount(String key) {return stringRedisTemplate.execute((RedisConnection connection) -> connection.pfCount(key.getBytes()));}/*** 合并多个 HyperLogLog 并将结果存储到目标 HyperLogLog 中** @param destKey 目标键* @param sourceKeys 源键数组* @return 合并后的近似基数*/public long mergeHyperLogLogs(String destKey, String... sourceKeys) {return stringRedisTemplate.execute((RedisConnection connection) -> connection.pfMerge(destKey.getBytes(), toByteArrays(sourceKeys)));}/*** 将字符串数组转换为字节数组** @param elements 字符串数组* @return 字节数组*/private byte[][] toByteArrays(String[] elements) {byte[][] byteElements = new byte[elements.length][];for (int i = 0; i < elements.length; i++) {byteElements[i] = elements[i].getBytes();}return byteElements;}
}

3. GEO(地理信息)

特点

  • 用于存储和查询地理位置信息。
  • 支持基于经纬度的地理位置操作,如距离计算、半径查询等。

应用场景

  • 附近的人:查找附近的用户或地点。
  • 位置服务:提供基于地理位置的服务,如地图标注、导航等。
  • 物流配送:优化配送路径,计算配送距离。

常用命令

  • GEOADD key longitude latitude member [longitude latitude member ...]:添加一个或多个地理空间元素。
// 添加几个城市的地理位置信息
geoService.addGeoLocation("cities", 116.4074, 39.9042, "北京");
geoService.addGeoLocation("cities", 121.4737, 31.2304, "上海");
geoService.addGeoLocation("cities", 113.2644, 23.1291, "广州");
  • GEOPOS key member [member ...]:获取一个或多个地理空间元素的经纬度。
  • GEODIST key member1 member2 [unit]:计算两个地理空间元素之间的距离。
  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]:查找指定半径内的地理空间元素。
  • GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]:查找指定元素周围的地理空间元素。
  • GEOHASH key member [member ...]:获取一个或多个地理空间元素的 Geohash 编码。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisGeoService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 向 GEO 数据集中添加地理位置信息** @param key 键* @param longitude 经度* @param latitude 纬度* @param member 成员*/public void addGeoLocation(String key, double longitude, double latitude, String member) {stringRedisTemplate.opsForGeo().add(key, new Point(longitude, latitude), member);}/*** 获取指定半径内的地理位置信息** @param key 键* @param longitude 经度* @param latitude 纬度* @param radius 半径* @param unit 单位* @return 地理位置信息*/public GeoResults<RedisGeoCommands.GeoLocation<String>> getGeoLocationsWithinRadius(String key, double longitude, double latitude, double radius, RedisGeoCommands.DistanceUnit unit) {RedisGeoCommands.Circle circle = new RedisGeoCommands.Circle(new Point(longitude, latitude), new RedisGeoCommands.Distance(radius, unit));RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates();return stringRedisTemplate.opsForGeo().radius(key, circle, args);}/*** 获取两个地理位置之间的距离** @param key 键* @param member1 成员1* @param member2 成员2* @param unit 单位* @return 距离*/public Double getDistanceBetweenGeoLocations(String key, String member1, String member2, RedisGeoCommands.DistanceUnit unit) {return stringRedisTemplate.opsForGeo().distance(key, member1, member2, unit);}/*** 获取指定成员周围的地理位置信息** @param key 键* @param member 成员* @param radius 半径* @param unit 单位* @return 地理位置信息*/public GeoResults<RedisGeoCommands.GeoLocation<String>> getGeoLocationsByMember(String key, String member, double radius, RedisGeoCommands.DistanceUnit unit) {RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates();return stringRedisTemplate.opsForGeo().radius(key, member, new RedisGeoCommands.Distance(radius, unit), args);}
}

4. Bloom Filter(布隆过滤器)

特点

  • 用于高效地判断某个元素是否在一个集合中。
  • 占用空间小,查询速度快,但有一定的误判率。

应用场景

  • 网页爬虫:判断某个 URL 是否已经被抓取过。
  • 黑名单:判断某个 IP 地址是否在黑名单中。
  • 缓存穿透:防止缓存穿透,判断某个键是否存在于缓存中。

注意

  • Redis 本身并不直接支持 Bloom Filter,但可以通过 Redis 模块(如 RedisBloom)来实现。
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class RedisBloomFilterService {@Autowiredprivate RedissonClient redissonClient;/*** 创建一个 Bloom Filter** @param name 布隆过滤器的名称* @param expectedInsertions 预期插入的元素数量* @param probabilityOfFalsePositives 误判概率* @return 布隆过滤器*/public RBloomFilter<String> createBloomFilter(String name, long expectedInsertions, double probabilityOfFalsePositives) {RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter(name);bloomFilter.tryInit(expectedInsertions, probabilityOfFalsePositives);return bloomFilter;}/*** 向布隆过滤器中添加元素** @param name 布隆过滤器的名称* @param element 元素*/public void addElementToBloomFilter(String name, String element) {RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter(name);bloomFilter.add(element);}/*** 检查元素是否可能存在于布隆过滤器中** @param name 布隆过滤器的名称* @param element 元素* @return 是否可能存在*/public boolean mightContain(String name, String element) {RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter(name);return bloomFilter.contains(element);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478531.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鱼眼相机模型-MEI

参考文献&#xff1a; Single View Point Omnidirectional Camera Calibration from Planar Grids 1. 相机模型如下&#xff1a; // 相机坐标系下的点投影到畸变图像// 输入&#xff1a;相机坐标系点坐标cam 输出&#xff1a; 畸变图像素点坐标disPtvoid FisheyeCamAdapter::…

Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理

1. 概述 本文介绍了在spring boot框架下&#xff0c;使用validation数据校验注解&#xff0c;针对不同请求链接的前端传参数据&#xff0c;进行分层视图对象的校验&#xff0c;并通过配置全局异常处理器捕获传参校验失败异常&#xff0c;自动返回校验出错的异常数据。 2. 依赖…

20241125复盘日记

昨日最票&#xff1a; 南京化纤 滨海能源 广博股份 日播时尚 众源新材 返利科技 六国化工 丰华股份 威领股份 凯撒旅业 华扬联众 泰坦股份 高乐股份高均线选股&#xff1a; 理邦仪器高乐股份日播时尚领湃科技威领股份资金最多的票&#xff1a; 资金攻击最多的票&#xff1a; …

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…

游戏引擎学习第23天

实时代码编辑功能的回顾 当前实现的实时代码编辑功能已经取得了显著的成功&#xff0c;表现出强大的性能和即时反馈能力。该功能允许开发者在修改代码后几乎立即看到变化在运行中的程序中体现出来&#xff0c;极大提升了开发效率。尽管目前的演示内容较为简单&#xff0c;呈现…

ARM CCA机密计算安全模型之概述

安全之安全(security)博客目录导读 目录 1、CCA的要素 2、CCA平台 2.1 CCA 系统安全域 2.2 监控安全域 2.3 领域管理安全域 3、与系统平台安全服务的关系 3.1 安全配置 3.2 平台认证 1、CCA的要素 高层次的 CCA 架构如下图中概述。 在硬件层面,CCA 系统安全域包括可…

2024 java大厂面试复习总结(一)(持续更新)

10年java程序员&#xff0c;2024年正好35岁&#xff0c;2024年11月公司裁员&#xff0c;记录自己找工作时候复习的一些要点。 java基础 hashCode()与equals()的相关规定 如果两个对象相等&#xff0c;则hashcode一定也是相同的两个对象相等&#xff0c;对两个对象分别调用eq…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

系统设计时应时刻考虑设计模式基础原则

目录 :star2:单一职责原则 (Single Responsibility Principle, SRP):star2:开放-封闭原则 (Open-Closed Principle, OCP):star2:依赖倒转原则 (Dependency Inversion Principle, DIP):star2:里氏代换原则 (Liskov Substitution Principle, LSP):star2:迪米特原则 (Law of Demet…

Spring 中的 ProxyFactory 创建代理对象

一、jdk 动态代理 和 cglib动态代理 简单介绍 1.jdk动态代理 public interface AService {public String serviceA(String param);public String serviceAA(String param); } public interface BService {public String serviceB(String param);public String serviceBB(Str…

FreeRTOS之链表源码分析

文章目录 前言一、结构体1、链表List_t2、链表项xLIST_ITEM3、头节点xMINI_LIST_ITEM4、链表示意图 二、函数分析1、初始化函数vListInitialise2、初始化链表项vListInitialiseItem3、链表尾部添加节点vListInsertEnd4、按序插入节点vListInsert5、删除节点uxListRemove 总结 前…

【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…

Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程

clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…

51单片机-独立按键与数码管联动

独立键盘和矩阵键盘检测原理及实现 键盘的分类&#xff1a;编码键盘和非编码键盘 键盘上闭合键的识别由专用的硬件编码器实现&#xff0c;并产生键编码号或键值的称为编码键盘&#xff0c;如&#xff1a;计算机键盘。靠软件编程识别的称为非编码键盘&#xff1b;在单片机组成…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的&#xff0c;最近优化下无线网络&#xff0c;说新的设备用华为的&#xff0c;然后我是直到要部署的当天才知道用华为设备的&#xff0c;就很无语了&#xff0c;一点准备没有&#xff0c;以下为这次的实际操作记录吧&…

浅谈网络 | 传输层之TCP协议

目录 TCP 包头格式TCP 的三次握手TCP 的四次挥手TCP 的可靠性与"靠谱"的哲学TCP流量控制TCP拥塞控制 上一章我们提到&#xff0c;UDP 就像我们小时候一样简单天真&#xff0c;它相信“网之初&#xff0c;性本善&#xff0c;不丢包&#xff0c;不乱序”&#xff0c;因…

MongoDB相关问题

视频教程 【GeekHour】20分钟掌握MongoDB Complete MongoDB Tutorial by Net Ninja MongoDB开机后调用缓慢的原因及解决方法 问题分析&#xff1a; MongoDB开机后调用缓慢&#xff0c;通常是由于以下原因导致&#xff1a; 索引重建&#xff1a; MongoDB在启动时会重建索引…

嵌入式驱动开发详解3(pinctrl和gpio子系统)

文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话&#xff0c;我们开发驱动时需要先…

[模版总结] - 树的基本算法4 -最近公共祖先 LCA

什么是最近公共祖先LCA LCA&#xff1a;在一个树中&#xff0c;距离两个节点p,q最近可以是其本身并且同时包含这两个子节点的节点 题目连接 Leetcode 236 - LCA Leetcode 1644 - LCA II Leetcode 1650 - LCAIII Leetcode 1123 - LCA of Deepest leaves 基本思路 Leetcode 23…

永磁同步电机末端振动抑制(输入整形)

文章目录 1、前言2、双惯量系统3、输入整形3.1 ZV整形器3.2 ZVD整形器3.3 EI整形器 4、伺服系统位置环控制模型5、仿真5.1 快速性分析5.2 鲁棒性分析 参考 1、前言 什么是振动抑制&#xff1f;对于一个需要精确定位的系统&#xff0c;比如机械臂、塔吊、码头集装箱等&#xff…