Redis篇之五大数据类型
1、五大数据类型
4.1、String(字符串)
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
127.0.0.1:6379> set key1 redis # 设置值
OK
127.0.0.1:6379> get key1 # 获取值
"redis"
127.0.0.1:6379> APPEND key1 "hello" # 追加key1的字符串,如果当前的key不存在,则默认set该key
(integer) 10
127.0.0.1:6379> get key1
"redishello"
127.0.0.1:6379> STRLEN key1 # 获取当前key的字符串的长度
(integer) 10
127.0.0.1:6379> APPEND key1 ",redis is so intersting!"
(integer) 34
127.0.0.1:6379> STRLEN key1 # 获取当前key的字符长度
(integer) 34
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 加一
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> DECR views # 减一
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> type views # 获取该key的类型
string
127.0.0.1:6379> INCRBY views 5
(integer) 6
127.0.0.1:6379> get views
"6"
127.0.0.1:6379> INCRBY views 10 # 指定增加的步长
(integer) 16
127.0.0.1:6379> get views
"16
127.0.0.1:6379> DECRBY views 10 # 指定减少的步长
(integer) 6
127.0.0.1:6379> get views
"6"# 操作key的值
127.0.0.1:6379> FLUSHDB # 清空当前库
OK
127.0.0.1:6379> set key1 "hello liangtl" # 设置key1的值
OK
127.0.0.1:6379> get key1 # 获取key1的值
"hello liangtl"
127.0.0.1:6379> GETRANGE key1 0 3 # 截取key1的指定字符:0,1,2,3(左闭右开)
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1 # 截取key1的所有字符(java的substring)
"hello liangtl"
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> SETRANGE key2 1 cb # 替换指定位置开始的字符(java的replace)
(integer) 7
127.0.0.1:6379> get key2
"acbdefg"# SETEX(set with expire) 设置该键的过期时间
127.0.0.1:6379> SETEX key3 30 "hello"
OK
127.0.0.1:6379> ttl key3
(integer) 10
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> keys *
1) "key2"
2) "key1"# SETNX(set with not exist) 不存在时设置该键的值,否则设置失败
127.0.0.1:6379> setnx key4 "redis"
(integer) 1
127.0.0.1:6379> get key4
"redis"
127.0.0.1:6379> SETNX key4 "mongoDB"
(integer) 0
127.0.0.1:6379> get key4
"redis"
127.0.0.1:6379> # 批量添加key:mset、mset
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> MGET k1 k2 k3 # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 v2 k4 v4 # 原子性,只会全部成功或者全部失败,所以get时为空
(integer) 0
127.0.0.1:6379> get k4
(nil)# 对象
127.0.0.1:6379> set user:1 {name:zhangsan,age:3}
OK
127.0.0.1:6379> keys *
1) "k1"
2) "user:1"
3) "k2"
4) "k3"
127.0.0.1:6379> get user:1
"{name:zhangsan,age:3}"
# 这里的key是一个巧妙的设计:user:{id}:{filed},这种设计在redis上看是完全OK的!
127.0.0.1:6379> MSET user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> KEYS *
1) "user:1:age"
2) "k1"
3) "user:1:name"
4) "k2"
5) "user:1"
6) "k3"
127.0.0.1:6379> get user:1:name
"zhangsan"# getset 先获取值在设置值
127.0.0.1:6379> getset db reids # 如果该键没有值,则返回null,并且设置为新的值
(nil)
127.0.0.1:6379> get db
"reids"
127.0.0.1:6379> getset db mongodb # 如果有值,返回原来的值,并且设置新的值
"reids"
127.0.0.1:6379> get db
"mongodb"
List(列表)
List介绍:Redis列表是简单字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头或则尾
它的底层是一个双向链表,对两端操作的性能很高,通过索引下标操作中间节点的性能很差
# 往列表的头部Left/尾部Right插入元素
127.0.0.1:6379> lpush list one # 往名为list的列表中加入一个value:one,如果list不存在,则为新建操作。lpush为从左边插入,所以输出为倒叙,Rpush同理。
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 # 输出list中的所有元素
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> RPUSH list four # 从列表的尾部插入元素
(integer) 4
127.0.0.1:6379> lrange list 0 -1 # 输出
1) "three"
2) "two"
3) "one"
4) "four"# 往列表的头部Left/尾部Right移除元素
127.0.0.1:6379> LPOP list # 移除列表第一个元素
"three"
127.0.0.1:6379> RPOP list # 移除列表最后一个元素
"four"
127.0.0.1:6379> LRANGE list 0 -1 # 输出列表中的元素
1) "two"
2) "one"# 获取列表指定索引位置的值
127.0.0.1:6379> LINDEX list 0 # 获取索引位置为0的值
"two"
127.0.0.1:6379> LINDEX list 1 # 获取索引位置为1的值
"one"# 获取列表长度
127.0.0.1:6379> LLEN list
(integer) 2
127.0.0.1:6379> LPUSH list five
(integer) 3
127.0.0.1:6379> LLEN list
(integer) 3
127.0.0.1:6379> # 移除列表中的指定元素
127.0.0.1:6379> LRANGE list 0 -1
1) "seven"
2) "six"
3) "two"
4) "five"
5) "two"
6) "one"
127.0.0.1:6379> LREM list 1 five # 移除一个five元素
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "seven"
2) "six"
3) "two"
4) "two"
5) "one"
127.0.0.1:6379> LREM list 2 two # 移除两个two元素
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "seven"
2) "six"
3) "one"# 截取列表中的指定下标长度的元素
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "seven"
5) "six"
6) "one"
127.0.0.1:6379> LTRIM list 1 3 # 截取list中索引从[1,3)
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "seven"# 移除就列表中的一个元素并且将这个被移除的元素加入新的列表
127.0.0.1:6379> keys *
1) "list"
2) "list1"
127.0.0.1:6379> RPOPLPUSH list list2 #将list中的最后一个元素移除,并且将这个被移除的元素加入list2,如果list2不存在则新增list2
"seven"
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> LRANGE list2 0 -1
1) "seven"# 更新列表中指定位置的value
127.0.0.1:6379> EXISTS list # 判断list是否存在,存在返回1不存在返回0
(integer) 1
127.0.0.1:6379> LSET list 0 three2 # 将list中的第一个元素设置为three2
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three2"
2) "two"
127.0.0.1:6379> LSET list 3 haha # 如果下标不存在,则会报错
(error) ERR index out of range# 插入一个值到列表的某个value的前面或者后面
127.0.0.1:6379> LRANGE list 0 -1
1) "three2"
2) "two"
127.0.0.1:6379> LINSERT list before two one # 往list中第一个值为two的元素前面插入一个值为one的元素
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "three2"
2) "one"
3) "two"
Set(集合)
Set介绍:set对外提供的功能与list类似是一个列表的功能。特殊在于set可以自动排重。当需要保存一个list数据时,又不希望list里的元素重复时,则set是一个很好的选择;并且set提供了判断某个成员是否在set中的一个接口,这是list不能提供的。
Redis的set是String类型的无序集合,它的底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都为O(1)
127.0.0.1:6379> FLUSHDB # 清空当前数据库
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD set1 one two three four # 新增一个set1,放入后面这四个值
(integer) 4
127.0.0.1:6379> SMEMBERS set1 # 获取set1中的所有元素
1) "four"
2) "three"
3) "one"
4) "two"
127.0.0.1:6379> SISMEMBER set1 one # 判断set1中是否存在one这个元素
(integer) 1
127.0.0.1:6379> SISMEMBER set1 five
(integer) 0
127.0.0.1:6379> SADD set1 one # 往set1中插入一个重复的值,不会报错,但是也不会插入,set是一个不重复的无序集合
(integer) 0
127.0.0.1:6379> SMEMBERS set1
1) "four"
2) "three"
3) "one"
4) "two"
127.0.0.1:6379> SREM set1 four # 删除set1中的four元素
(integer) 1
127.0.0.1:6379> SMEMBERS set1 five # 判断five元素是否是set1的成员
(integer) 1# 随机抽取或者删除set中的一个或多个元素
127.0.0.1:6379> SADD set2 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> SMEMBERS set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> SRANDMEMBER set2 # 随机抽取set2中的一个元素
"3"
127.0.0.1:6379> SRANDMEMBER set2 2 # 随机抽取set2中的两个元素
1) "4"
2) "6"
127.0.0.1:6379> SPOP set2 # 随机删除set2中的一个元素
"3"
127.0.0.1:6379> SPOP set2 2 # 随机删除set2中的两个元素
1) "2"
2) "6"
127.0.0.1:6379> SMEMBERS set2
1) "1"
2) "4"
3) "5"
4) "7"
5) "8"
6) "9"# 将一个set中的值移动至另一个set中
127.0.0.1:6379> SMEMBERS set1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> SMEMBERS set2
1) "1"
2) "4"
3) "5"
4) "7"
5) "8"
6) "9"
127.0.0.1:6379> SMOVE set1 set2 three
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "two"
2) "one"
127.0.0.1:6379> SMEMBERS set2
1) "8"
2) "7"
3) "5"
4) "4"
5) "three"
6) "9"
7) "1"# 取两个或两个以上set集合的交集、并集、差集(此处以两个为例)
127.0.0.1:6379> SADD set3 a b c # 新增set3
(integer) 3
127.0.0.1:6379> SADD set4 c d e # 新增set4
(integer) 3
127.0.0.1:6379> SDIFF set3 set4 # 以set3为主,取set3和set4的差集
1) "a"
2) "b"
127.0.0.1:6379> SINTER set3 set4 # 取set3、set4的交集
1) "c"
127.0.0.1:6379> SUNION set3 set4 # 取set3、set4的并集
1) "c"
2) "b"
3) "d"
4) "e"
5) "a"
闲聊时间
多聊一嘴,其实这些命令都可以在英语单词中找到一些规律
把SDIFF、SINTER还有SUNION这三个单词首字母去掉,可以得到
DIFF:different,它代表不同的,用一句Redis官网的翻译来描述:返回的集合元素是第一个key的集合与后面所有key的集合的差集
INTER:intersection,翻译过来为交叉,同样的,意指数学关系中的交集
UNION:union,翻译为联合,与数学关系中的并集也是可以沾边的
Hash(哈希)
Hash介绍:hash是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash最适合用来存储对象。类似java里面的Map<String,Object>
127.0.0.1:6379> HSET hash1 age 23 name tl high 178 # 新建hash1,并且以键值对的形式存储后面的这些值
(integer) 3
127.0.0.1:6379> HLEN hash1 # 获取hash1的长度
(integer) 3
127.0.0.1:6379> HEXISTS hash1 name # 判断hash1是否存在键name
(integer) 1
127.0.0.1:6379> HEXISTS hash1 weight
(integer) 0
127.0.0.1:6379> HGETALL hash1 # 获取hash1中的所有键和值
1) "age"
2) "23"
3) "name"
4) "tl"
5) "high"
6) "178"
127.0.0.1:6379> HKEYS hash1 # 获取hash1中的所有键
1) "age"
2) "name"
3) "high"
127.0.0.1:6379> HVALS hash1 # 获取hash1中的所有值
1) "23"
2) "tl"
3) "178"
127.0.0.1:6379> HINCRBY hash1 age 2 # 将hash1中的age对应的value+2
(integer) 25
127.0.0.1:6379> HGET hash1 age # 获取hash1中age对应的值
"25"
127.0.0.1:6379> HINCRBY hash1 age -2 # 将hash1中的age对应的value-2
(integer) 23
127.0.0.1:6379> HGET hash1 age # 获取hash1中age对应的值
"23"
127.0.0.1:6379> HSETNX hash1 name haha # 如果键name不存在则新增,存在则返回0,不对原值做变动
(integer) 0
127.0.0.1:6379> HSETNX hash1 add jx
(integer) 1
127.0.0.1:6379> HGETALL hash1
1) "age"
2) "23"
3) "name"
4) "tl"
5) "high"
6) "178"
7) "add"
8) "jx"
Zset(有序集合)
Zset介绍:Zset是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分( score) ,这个评分( score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。
因为元素是有序的,所以你也可以很快的根据评分( score )或者次序( position )来获取一个范围的元素。
访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
127.0.0.1:6379> ZADD zset 1 one 3 three 7 four 2 two 5 five # 新增zset1,并添加后面跟随的键值
(integer) 5
127.0.0.1:6379> ZREVRANGEBYSCORE zset -inf +inf
(empty array)
127.0.0.1:6379> ZRANGE zset 0 -1
1) "one"
2) "two"
3) "three"
4) "five"
5) "four"
127.0.0.1:6379> ZADD zset1 1 one 2 two 3 three 4 four # 新增zset1,并添加后面跟随的键值
(integer) 4
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> ZADD zset1 5 five # 给zset新增值
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# -inf:负无穷 +inf:正无穷 score:每个元素value被赋予的一个权重值
127.0.0.1:6379> ZRANGEBYSCORE zset1 -inf +inf # 根据score从小到大排序输出
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> ZRANGEBYSCORE zset1 0 2 # 从小到大输出权重在[0,2]之间的值
1) "one"
2) "two"
127.0.0.1:6379> ZREVRANGE zset1 1 3
1) "four"
2) "three"
3) "two"
127.0.0.1:6379> ZRANGEBYSCORE zset1 -inf +inf withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "four"8) "4"9) "five"
10) "5"
127.0.0.1:6379> ZCOUNT zset 2 5 # 统计zset中权重值为2-5之间的个数
(integer) 3
127.0.0.1:6379> ZRANK zset five # 输出zset中five元素对应的排名(从0开始)
(integer) 3
相关文章:
Redis篇之五大数据类型
1、五大数据类型 4.1、String(字符串) String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象…...

Linux->文件系统磁盘文件管理
目录 1 磁盘结构 2 逻辑抽象管理磁盘 2.1 逻辑抽象 2.2 管理磁盘 2.3 补充知识 3 软硬连接 1 磁盘结构 本篇的学习需要建立在大家在脑海中有一副磁盘的结构才能进行下去,所以我会以图解的方式为大家简单讲解一下,注:博主对这一部分并不是…...

echarts tooltip文字太长换行
tooltip文字太长换行,设置了宽度也没有换行,加上一句: extraCssText: ‘max-width:300px; white-space:pre-wrap’, 没加之前是这样: 加上之后 extraCssText: ‘max-width:300px; white-space:pre-wrap’, tooltip: {trigger: &…...

Docker 部署Jira8.1.0
Jira与Confluence一样,都需要用到独立的数据库,对于数据库的安装我们不做介绍,主要介绍如何用Docker部署Jira以及对Jira进行破解的操作。 1、数据库准备 关于数据库官方文档说明:https://confluence.atlassian.com/adminjiraserv…...
枚举、模拟法(蓝桥杯卡片、数的分解为例)
枚举和模拟算法是计算机领域常用的两种基本算法。枚举算法是一种通过列举所有可能的情况来解决问题的方法。模拟算法则是通过模拟真实场景来解决问题。 枚举、模拟法 枚举算法是指将问题分解为一系列离散的情况,通过枚举所有可能的情况,逐一检查每种情…...

DC-DC升压变换器直流隔离高压输出稳压电源模块5v12v24v48v转50v110v150v220v250v300v350v500v
HRB 系列隔离宽电压输入高电压稳压输出 特点 效率高达 80%以上1*1英寸标准封装单电压输出稳压输出工作温度: -40℃~85℃阻燃封装,满足UL94-V0 要求温度特性好可直接焊在PCB 上应用 HRB 0.2~10W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#…...
jQuery创建、添加、删除元素
一、创建元素 语法: $("<li></li>"); 动态的创建了一个 <li> 二、添加元素 1. 内部添加 1、element.append(内容) 把内容放入匹配元素内部最后面,类似原生 appendChild。 2、element.prepend(内容) 把内容放入匹…...

产品快讯丨神策数据 A/B 测试试验指标管理重磅升级
神策数据:为了更好地帮助企业管理试验指标,神策数据 A/B 测试完善了指标类型、配置方式、计算原理等,帮助分析师、运营同学等明确计算逻辑,并最大程度减少歧义以及与技术同学沟通的成本,以实现企业内部信息的有效统一。…...

游戏开发之Unity2021URP项目场景的构建
地面的修改和编辑:地面插件的使用 打开包管理器,在左边的包那里选择“Unity注册表”,在右边进行搜索“Polybrush”,之后选择右下角的安装 安装完之后要选择样本中的URP进行导入,因为我们的项目是URP渲染管线的&#x…...

数学分析:多元微积分1
卓里奇的数学分析的好处在于直接从多元函数来入手多元微积分,引出矩阵,十分自然。 紧集的概念,感觉直接用闭集去理解就行,(对于图形学来说)。 多元函数的极限,其实和单元函数并没有什么区别。 这…...
STC32G 三轮车负压电磁
文章目录前言整车效果控制思路循迹环岛处理障碍处理关键代码部分差比和以及当前速度计算角速度环速度环环岛处理障碍处理前言 年后就没怎么碰车了,到3月中旬换三轮了,可算有一点成效了,做个记录。 整车效果 三轮负压电磁慢速元素识别控制思…...
【编程小记】位运算 x -x 表示含义
位运算 x & -x 表示含义一、原码反码补码二、位运算 x & -x 表示含义三、最终结论一、原码反码补码 在计算机中,整数的数据的存储是按照补码的方式进行存储的 按照数据与0的大小,数据又被分为正数与负数 正数的原码反码补码相同。负数的原码&…...
信创PC利旧管理新模式,麒麟信安助力国家某部委实现高效云办公
2022年,国家某部委所有桌面终端均已完成信创PC替换,并将日常办公所需的办公Office套件、OA无纸化办公系统、即时通讯系统等全部迁移至信创PC,但在进行生产业务系统迁移时,该单位信创PC仍存在业务系统与不同芯片PC难适配、应用难兼…...
【玩转RT-Thread】RT-Thread内核宏定义详解(rtdef.h)
文章目录1.RT-Thread版本信息2.RT-Thrad基础数据类型定义3.RT-Thread基本数据类型的范围4.RT-Thread系统滴答时钟最大计数值5.RT-Thread IPC数据类型范围6.RT-Thread避免未使用变量警告7.编译器相关定义8.编译器相关定义9.RT-Thread错误码定义1.RT-Thread版本信息 /* RT-Threa…...

PDF转化器免费版有哪些?这几款办公达人们都在用
在现代办公中,文件的排版和格式是非常重要的,无论是发布通知或提交策划书、投档简历或是发表论文、宣传海报或是产品说明书等,我们经常使用PDF文件格式发送给他人。然而,很多人需要对PDF进行编辑修改,通常会先将其转换…...

2022MathorCup赛题B
以下所有文字均基于作者的实际经验,并不具有完全的合理性,请谨慎参考 目录 一、问题分析 (一)问题一 (二)问题二 二、预处理 (一)训练集预处理 (二)测…...

适合销售使用的CRM系统特点
销售人员抱怨CRM系统太复杂,这是一个很重要的问题。毕竟,如果系统太难使用,会导致CRM实用率和效率下降,最终影响公司的运作。在这篇文章中,我们来探讨当销售抱怨crm客户系统太复杂了,企业该如何解决。 缺少…...
项目中获取resource下文件路径的方法
String filepathrequest.getServletContext().getRealPath("/")"files\\"; 获取的当前文件在实际运行的tomcat地址目录 String path ClassUtils.getDefaultClassLoader().getResource("").getPath()"tmp/files/"; 获取的是当前文件…...

Air32F103CBT6|CCT6|KEIL-uVsion5|本地编译|STClink|(6)、Air32F103编译下载
目录 一、环境搭建 准备工作 安装支持包 二、新建工程 添加外设库支持 测试代码 三、下载烧录 一、环境搭建 准备工作 安装MDK5,具体方法请百度,安装后需要激活才能编译大文件 下载安装AIR32F103的SDK:luatos-soc-air32f103: Air32f…...
结构(c的数据类型)
我们知道数组是相同类型元素的集合,那么结构就是不同类型的元素的集合,这些不同元素叫结构中的成员。是因为这些集合都有一定的联系才会归为一类的。 形式:我们知道,平时学习的int,double都叫类型,而结构是…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...