当前位置: 首页 > article >正文

Redis-常用命令

目录

1、Redis数据结构

2、命令简介

2.1、通用命令

DEL

EXISTS

EXPIRE

2.2、String命令

SET和GET

MSET和MGET

INCR和INCRBY和DECY

SETNX

SETEX

2.3、Key的层级结构

2.4、Hash命令

HSET和HGET

HMSET和HMGET

HGETALL

HKEYS和HVALS

HINCRBY

HSETNX

2.5、List命令

LPUSH和RPUSH

LPOP和RPOP

LRANGE

2.6、Set命令

2.7、SortedSet类型


1、Redis数据结构

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:

贴心小建议:命令不要死记,学会查询就好啦

Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( https://redis.io/commands )可以查看到不同的命令:

不同类型的命令称为一个group,我们也可以通过help命令来查看各种不同group的命令:

2、命令简介

2.1、通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个KEY的剩余有效期

通过help [command] 可以查看一个命令的具体用法,例如:

127.0.0.1:6379> keys *1) "\"unique_visitor_count\""2) "sys_config:sys.index.skinName"3) "sys_dict:sys_common_status"4) "sys_dict:sys_normal_disable"5) "sys_config:sys.login.blackIPList"# 查询以a开头的key
127.0.0.1:6379> keys a*
1) "age"

小提示:在生产环境下,不推荐使用keys 命令,因为这个命令在key过多的情况下,效率不高

DEL
127.0.0.1:6379> help delDEL key [key ...]summary: Delete a keysince: 1.0.0group: generic127.0.0.1:6379> del name #删除单个
(integer) 1  #成功删除1个127.0.0.1:6379> keys *
1) "age"127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加数据
OK127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "age"127.0.0.1:6379> del k1 k2 k3 k4
(integer) 3   #此处返回的是成功删除的key,由于redis中只有k1,k2,k3 所以只成功删除3个,最终返回
127.0.0.1:6379>127.0.0.1:6379> keys * #再查询全部的key
1) "age"	#只剩下一个了
127.0.0.1:6379>
EXISTS
127.0.0.1:6379> help EXISTSEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic127.0.0.1:6379> exists age
(integer) 1127.0.0.1:6379> exists name
(integer) 0
EXPIRE
127.0.0.1:6379> expire age 10
(integer) 1127.0.0.1:6379> ttl age
(integer) 8127.0.0.1:6379> ttl age
(integer) 6127.0.0.1:6379> ttl age
(integer) -2127.0.0.1:6379> ttl age
(integer) -2  #当这个key过期了,那么此时查询出来就是-2 127.0.0.1:6379> keys *
(empty list or set)127.0.0.1:6379> set age 10 #如果没有设置过期时间
OK127.0.0.1:6379> ttl age
(integer) -1  # ttl的返回值就是-1
2.2、String命令

String类型,也就是字符串类型,是Redis中最简单的存储类型。

Redis Strings存储字节序列,包括文本、序列化对象和二进制数组。因此,字符串是最基本的 Redis 数据类型。它们通常用于缓存,但它们支持额外的功能,让您也可以实现计数器并执行按位操作。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string: 普通字符串
  • int: 整数类型,可以做自增.自减操作
  • float: 浮点类型,可以做自增.自减操作

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

注意: 默认情况下,单个 Redis 字符串最大为 512 MB。

案例:

SET和GET

小提示: 如果key不存在则是新增,如果存在则是修改

127.0.0.1:6379> set name Rose  //原来不存在
OK127.0.0.1:6379> get name 
"Rose"127.0.0.1:6379> set name Jack //原来存在,就是修改
OK127.0.0.1:6379> get name
"Jack"
MSET和MGET
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK127.0.0.1:6379> MGET name age k1 k2 k3
1) "Jack" //之前存在的name
2) "10"   //之前存在的age
3) "v1"
4) "v2"
5) "v3"
INCR和INCRBY和DECY
127.0.0.1:6379> get age 
"10"127.0.0.1:6379> incr age //增加1
(integer) 11127.0.0.1:6379> get age //获得age
"11"127.0.0.1:6379> incrby age 2 //一次增加2
(integer) 13 //返回目前的age的值127.0.0.1:6379> incrby age 2
(integer) 15127.0.0.1:6379> incrby age -1 //也可以增加负数,相当于减
(integer) 14127.0.0.1:6379> incrby age -2 //一次减少2个
(integer) 12127.0.0.1:6379> DECR age //相当于 incr 负数,减少正常用法
(integer) 11127.0.0.1:6379> get age 
"11"
SETNX
127.0.0.1:6379> help setnxSETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string127.0.0.1:6379> set name Jack  //设置名称
OK
127.0.0.1:6379> setnx name lisi //如果key不存在,则添加成功
(integer) 0
127.0.0.1:6379> get name //由于name已经存在,所以lisi的操作失败
"Jack"
127.0.0.1:6379> setnx name2 lisi //name2 不存在,所以操作成功
(integer) 1
127.0.0.1:6379> get name2 
"lisi"
SETEX
127.0.0.1:6379> setex name 10 jack
OK127.0.0.1:6379> ttl name
(integer) 8127.0.0.1:6379> ttl name
(integer) 7127.0.0.1:6379> ttl name
(integer) 5
2.3、Key的层级结构

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:

	项目名:业务名:类型:id

这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

例如我们的项目名称叫 gcxy,有user和product两种不同类型的数据,我们可以这样定义key:

  • user相关的key:gcxy:user:1
  • product相关的key:gcxy:product:1

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEY

VALUE

gcxy:user:1

{"id":1, "name": "Jack", "age": 21}

gcxy:product:1

{"id":1, "name": "小米11", "price": 4999}

一旦我们向redis采用这样的方式存储,那么在可视化界面中,redis会以层级结构来进行存储,形成类似于这样的结构,更加方便Redis获取数据

2.4、Hash命令

Redis Hash是结构为字段值对集合的记录类型。可以使用散列来表示基本对象并存储计数器分组等。

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

Hash类型的常见命令

  • HSET key field value:添加或者修改hash类型key的field的值
  • HGET key field:获取一个hash类型key的field的值
  • HMSET:批量添加多个hash类型key的field的值
  • HMGET:批量获取多个hash类型key的field的值
  • HGETALL:获取一个hash类型的key中的所有的field和value
  • HKEYS:获取一个hash类型的key中的所有的field
  • HINCRBY:让一个hash类型key的字段值自增并指定步长
  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

案例:

HSET和HGET
127.0.0.1:6379> HSET gcxy:user:3 name Lucy//大key是 gcxy:user:3 小key是name,小value是Lucy
(integer) 1
127.0.0.1:6379> HSET gcxy:user:3 age 21// 如果操作不存在的数据,则是新增
(integer) 1
127.0.0.1:6379> HSET gcxy:user:3 age 17 //如果操作存在的数据,则是修改
(integer) 0
127.0.0.1:6379> HGET gcxy:user:3 name 
"Lucy"
127.0.0.1:6379> HGET gcxy:user:3 age
"17"
HMSET和HMGET
127.0.0.1:6379> HMSET gcxy:user:4 name ZhangSan
OK
127.0.0.1:6379> HMSET gcxy:user:4 name LiSi age 20 sex man
OK
127.0.0.1:6379> HMGET gcxy:user:4 name age sex
1) "LiSi"
2) "20"
3) "man"
HGETALL
127.0.0.1:6379> HGETALL gcxy:user:4
1) "name"
2) "LiSi"
3) "age"
4) "20"
5) "sex"
6) "man"
HKEYS和HVALS
127.0.0.1:6379> HKEYS gcxy:user:4
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS gcxy:user:4
1) "LiSi"
2) "20"
3) "man"
HINCRBY
127.0.0.1:6379> HINCRBY  gcxy:user:4 age 2
(integer) 22
127.0.0.1:6379> HVALS gcxy:user:4
1) "LiSi"
2) "22"
3) "man"
127.0.0.1:6379> HINCRBY  gcxy:user:4 age -2
(integer) 20
HSETNX
127.0.0.1:6379> HSETNX gcxy:user4 sex woman
(integer) 1
127.0.0.1:6379> HGETALL gcxy:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
127.0.0.1:6379> HSETNX gcxy:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL gcxy:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
5) "sex"
6) "woman"
2.5、List命令

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element ... :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element ... :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

LPUSH和RPUSH
127.0.0.1:6379> LPUSH users 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH users 4 5 6
(integer) 6
LPOP和RPOP
127.0.0.1:6379> LPOP users
"3"
127.0.0.1:6379> RPOP users
"6"
LRANGE
127.0.0.1:6379> LRANGE users 1 2
1) "1"
2) "4"
2.6、Set命令

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

Set的常见命令有:

  • SADD key member ... :向set中添加一个或多个元素
  • SREM key member ... : 移除set中的指定元素
  • SCARD key: 返回set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于set中
  • SMEMBERS:获取set中的所有元素
  • SINTER key1 key2 ... :求key1与key2的交集

例如两个集合:s1和s2:

求交集:SINTER s1 s2

求s1与s2的不同:SDIFF s1 s2

具体命令

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem s1 a
(integer) 1127.0.0.1:6379> SISMEMBER s1 a
(integer) 0127.0.0.1:6379> SISMEMBER s1 b
(integer) 1127.0.0.1:6379> SCARD s1
(integer) 2

案例:

  • 将下列数据用Redis的Set集合来存储:
    • 张三的爱好:看书.睡觉.吃饭.打麻将
    • 李四的爱好:打麻将.爬山.打篮球
  • 利用Set的命令实现下列功能:
    • 计算张三的爱好有几个
    • 计算张三和李四有哪些共同爱好
    • 查询哪些人是张三的爱好却不是李四的爱好
    • 查询张三和李四的爱好总共有哪些
    • 判断看书是否是张三的爱好
    • 判断吃饭是否是李四的爱好
    • 将打麻将从张三的爱好列表中移除
127.0.0.1:6379> SADD zs kanshu shuijiao chifan damajiang
(integer) 4127.0.0.1:6379> SADD ls damajiang pashan dalanqiu
(integer) 3127.0.0.1:6379> SCARD zs
(integer) 4127.0.0.1:6379> SINTER zs ls
1) "damajiang"127.0.0.1:6379> SDIFF zs ls
1) "kanshu"
2) "shuijiao"
3) "chifan"127.0.0.1:6379> SUNION zs ls
1) "kanshu"
2) "shuijiao"
3) "chifan"
4) "damajiang"
5) "pashan"
6) "dalanqiu"127.0.0.1:6379> SISMEMBER zs kanshu
(integer) 1127.0.0.1:6379> SISMEMBER ls chifan
(integer) 0127.0.0.1:6379> SREM zs damajiang
(integer) 1127.0.0.1:6379> SMEMBERS zs
1) "kanshu"
2) "shuijiao"
3) "chifan"
2.7、SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF.ZINTER.ZUNION:求差集.交集.并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member
  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

感兴趣的小伙伴可以点个关注!后续将推出springboot整合redis,谢谢~

相关文章:

Redis-常用命令

目录 1、Redis数据结构 2、命令简介 2.1、通用命令 DEL EXISTS EXPIRE 2.2、String命令 SET和GET MSET和MGET INCR和INCRBY和DECY SETNX SETEX 2.3、Key的层级结构 2.4、Hash命令 HSET和HGET HMSET和HMGET HGETALL HKEYS和HVALS HINCRBY HSETNX 2.5、List命…...

树莓派5智能家居中控:HomeAssistant全配置指南

一、硬件选型与系统架构 1.1 树莓派5的硬件优势 2023年发布的树莓派5采用Broadcom BCM2712处理器(4核Cortex-A76架构),相比前代产品具有三大突破性改进: 接口升级:首次支持PCIe 2.0接口,可扩展万兆网卡或…...

从虚拟现实到可持续设计:唐婉歆的多维创新之旅

随着线上线下融合逐渐成为全球家居与建材行业的发展趋势,全球市场对高品质、个性化家居和建材产品的需求稳步攀升,也对设计师提出更高的要求。在这一背景下,设计师唐婉歆将以产品设计师的身份,正式加入跨国企业AmCan 美加集团,投身于备受行业瞩目的系列设计项目。她将负责Showr…...

scala基础学习-类(1.定义类)

文章目录 类,对象定义类构造定义方法重写方法私有默认参数 类,对象 scala定义类的关键字是:class 使用类实例化对象使用关键字:new 定义类 class Point(var x: Int, var y: Int) {def move(dx: Int, dy: Int): Unit {x x dxy y dy}override def…...

音视频 四 看书的笔记 MediaPlayerService

Binder机制看这里 Binde机智 这是一个分割符 Binder机智 分割(goutou) Binder机制 MediaPlayerService多媒体框架中一个非常重要的服务。MediaPlayerService 我原称之为链接之王 图片来源 MediaPlayer 是客户端 C/S 中的CMediaPlayerService MediaPlayerService::Client 是服…...

vmware 创建win10 系统,虚拟机NAT网络设置

虚拟机设置: 物理机本机创建桥接: 如何创建桥接,请自行脑补~...

Python CSV 数据分析:问题排查与解决全记录

Python CSV 数据分析:问题排查与解决全记录 前段时间,我接到一个任务,需要对公司的销售数据进行分析。这些数据存储在 CSV 文件里,本想着用 Python 处理起来会很轻松,结果却状况百出。下面,就跟大家讲讲我…...

RabbitMQ高级特性--发送方确认

目录 1. confirm确认模式 1.配置RabbitMQ 2.设置确认回调逻辑并发送消息 2.Return退回模式 1.配置RabbitMQ 2.设置返回回调逻辑并发送消息 在使用RabbitMQ的时候, 可以通过消息持久化来解决因为服务器的异常崩溃而导致的消息丢失, 但是还有⼀个问题, 当消息的生产者将消息发送出…...

【初阶数据结构】线性表之双链表

文章目录 目录 一、双链表的概念 二、双链表的实现 1.初始化 2.尾插 3.头插 4.打印 5.判断双链表是否为空 6.尾删 7.头删 8.查找 9.在指定的位置之后插入数据 10.删除指定位置的数据 11.销毁 三、完整源码 总结 一、双链表的概念 链表的结构非常多样&#xff0…...

java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗

java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗 根据网盘系统的典型设计模式及搜索结果中的最佳实践,建议为文件夹创建独立的分享表。以下是具体分析及实施建议: 一、需要独立文件夹分享表的核心原因 权限控制差异 文件分享:通常基…...

智能路由系统-信息泄露漏洞挖掘

1.漏洞描述: Secnet-智能路由系统 actpt_5g.data 信息泄露,攻击者可利用此漏洞收集敏感信息,从而为下一步攻击做准备。 2.fofa搜索语句 title"安网-智能路由系统" || title"智能路由系统" || title"安网科技-智能…...

表格图表切换,图表无法展示问题复盘

项目背景 103项目CPC卡使用模块在原有的表格展示数据的基础之上&#xff0c;增加环状饼图图表展示&#xff0c;采用tab切换的方式实现 问题描述 图表无法设置宽高&#xff0c;导致饼图无法渲染 具体代码 // 入口页<el-tabs type"card" class"cts_flex_t…...

css 实现闪烁光标

要实现闪烁光标&#xff08;比如文本输入框内常见的闪烁效果&#xff09;&#xff0c;可以使用 CSS 动画。下面是一个简单的方法&#xff1a; 代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta n…...

AI赋能python数据处理、分析与预测操作流程

以数据集预测鱼类种类(Species)开展以下研究。数据格式如下: 以下是一个系统的分析思路及推荐的机器学习算法: 1. 数据预处理与探索性分析 缺失值与异常值处理: 检查数据完整性(如Roach类中Weight=0的记录需修正或删除)。 通过箱线图或Z-Score检测异常值,判断是否需…...

基于74LS192的十进制两位数正向计时器(proteus仿真)

在数字电路设计中&#xff0c;计时器是一个非常常见的应用。今天&#xff0c;我将分享一个基于 74LS192 双向计数器 的十进制两位数正向计时器电路设计。这个电路可以实现从 00 到 99 的十进制正向计数&#xff0c;并通过两个七段数码管显示结果。 最终效果如图&#xff1a; 各…...

#C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(二)

今天我们反思,然后总结。 一 先看代码 `timescale 1ns/1ps module tb_top;class Base;function void print(int a);$display("Base: int = %0d", a);endfunction endclassclass Sub extends Base;function void print(string s);$display("Sub: string = %s&…...

算法-前缀和与差分

一、前缀和&#xff08;Prefix Sum&#xff09; 1. 核心思想 前缀和是一种预处理数组的方法&#xff0c;通过预先计算并存储数组的前缀和&#xff0c;使得后续的区间和查询可以在**O(1)**时间内完成。 2. 定义 给定数组 nums&#xff0c;前缀和数组 prefixSum 的每个元素 p…...

React(六)React过渡动画-CSS编写方式

React过渡动画 react-transition-group介绍 在开发中&#xff0c;我们想要给一个组件的显示和消失添加某种过渡动画&#xff0c;提高用户体验→可通过react-transition-group实现。React曾为开发者提供过动画插件 react-addons-css-transition-group&#xff0c;后由社区维护…...

第十五章:Python的Pandas库详解及常见用法

在数据分析领域&#xff0c;Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具&#xff0c;使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法&#xff0c;并通过示例代码演示如何使用Pandas进行数据处理。最后&#xff0c;…...

Python自动化模块:开启高效编程新时代

一、写在前面 在数字化时代&#xff0c;自动化技术已成为提高效率、降低成本的关键手段。Python 作为一种简洁、高效且功能强大的编程语言&#xff0c;凭借其丰富的库和框架&#xff0c;在自动化领域占据了举足轻重的地位&#xff0c;成为众多开发者的首选工具之一。从简单的文…...

【蓝桥杯速成】| 15.完全背包

题目&#xff1a;携带研究材料 问题描述 52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研…...

C++:allocator类(动态数组续)

1.为什么需要 allocator&#xff1f; 在 C 中&#xff0c;动态内存管理通常通过 new 和 delete 完成&#xff1a; int* p new int; // 分配内存 构造对象 delete p; // 析构对象 释放内存 但 new 和 delete 有两个问题&#xff1a; 耦合性&#xff1a;将内…...

libva基础

Libva&#xff08;Lib Video Acceleration&#xff09;是一个开源的库&#xff0c;实现了 **VA-API**&#xff08;Video Acceleration API&#xff09;&#xff0c;旨在为视频处理提供跨平台的硬件加速支持。 1、核心功能与作用 硬件加速抽象层&#xff1a;Libva 作为中间层&…...

【C++20】format格式化输出

C20 format格式化输出 在C20之前&#xff0c;格式化能力都依赖于三方格式化库FMT&#xff0c; 而C20 标准委员会终于在C标准库引入了格式化功能&#xff0c;从使用方式和风格来看其实就是FMT库转正了 直接使用 包含<format.h>头文件既可以直接使用&#xff0c;类似pyt…...

c++游戏开发第一期

以后我将要发c游戏开发的教程&#xff0c;可能更得比较慢。&#xff08;目测几个星期一更&#xff09;。 今天先讲个配置编译器。 我用的是Visual studio 2022和EasyX。 安装studio&#xff1a; 首先找到下载链接&#xff08;点我&#xff09;下拉找到下面图片的东西。 下完…...

Elasticsearch:人工智能时代的公共部门数据治理

作者&#xff1a;来自 Elastic Darren Meiss 人工智能&#xff08;AI&#xff09;和生成式人工智能&#xff08;GenAI&#xff09;正在迅速改变公共部门&#xff0c;从理论探讨走向实际应用。正确的数据准备、管理和治理将在 GenAI 的成功实施中发挥关键作用。 我们最近举办了…...

Web开发:数据的加密和解密

一、常见通用术语解析 加盐&#xff1a;在密码中加入随机数据&#xff0c;提高安全性。摘要&#xff1a;固定长度的输出&#xff0c;用于数据完整性验证。加密&#xff1a;将数据转换为不可读形式&#xff0c;确保安全。撞库&#xff1a;通过暴力破解比对常见密码的攻击方式。…...

低功耗LPWAN模块开发指南:远距离无线通信与边缘计算融合实战‌

在远程资产追踪、野外环境监测等场景中&#xff0c;稳定可靠的长距离通信与超低功耗是系统设计的核心挑战。eFish-SBC-RK3576通过 ‌原生双UART接口 USB OTG扩展能力‌ &#xff0c;可无缝集成主流LPWAN模组&#xff08;LoRa/NB-IoT&#xff09;&#xff0c;实现“数据采集-边…...

RHCA核心课程技术解析5:红帽高可用性集群架构与深度实践

一、红帽高可用集群架构全景 1.1 核心组件交互逻辑 graph TD A[节点1] -->|Corosync 心跳| B[节点2] A -->|Pacemaker 资源管理| C[共享存储] B --> C D[Fencing设备] -->|STONITH| A D -->|STONITH| B C -->|GFS2锁管理| A C -->|GFS2锁管理| B 1.2 集…...

Python切片中的步长秘密

Python切片中的步长秘密 大家好&#xff01;今天我们来聊聊Python切片中一个有趣的话题 - 步长&#xff08;step&#xff09;。 基本格式回顾 Python切片的完整格式是: [起点:终点:步长] 但你是否注意到,很多代码里的切片都只写了起点和终点?没错,步长是可以省略的! 步长的默认…...