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

redis原理(四)redis命令

目录

一、字符串命令:

二、列表命令:

三、集合命令:

四、散列命令:

五、有序集合命令:

六、redis发布与订阅命令:

七、事务命令

 八、其他命令

1、排序:SORT 

2、键的过期时间:

九、地理位置查询:


命令官网:Commands | Redis

一、字符串命令:

1、字符串基本操作:

(1)SET:执行成功时返回OK:

(2)GET:获取value值

(3)DEL:返回被成功删除的值的数量

(4)strlen,exists,,,setex,expire key 60;ttl key 【设置过期时间+查看指定key的过期时间】 等等;

2、自增自减 :如果一个值可以被解释为十进制整数或者浮点数,redis允许用户对这个字符串进行INCR*、DECR*操作。

(1)INCR key:将键存储的值的值加1。

(2)DECR key:将键存储的值减1。

(3)INCRBY key increment:将键存储的值加上整数 increment。

(4)DECRBY key decrement:将键存储的值减去整数 decrement。

(5)INCRBYFLOAT key decrement:将键存储的值加上浮点数decrement。这个命令在redis2.6及以上可以使用。

127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> INCR age
(integer) 2
127.0.0.1:6379> get age
"2"
127.0.0.1:6379> DECR age
(integer) 1
127.0.0.1:6379> get age
"1"
127.0.0.1:6379> INCRBY age 3
(integer) 4
127.0.0.1:6379> get age
"4"
127.0.0.1:6379> DECRBY age 1
(integer) 3
127.0.0.1:6379>

3、处理子串和二进制位:

(1)APPEND

(2)GETRANGE:

(3)SETRANGE:

(4)GETBIT:

(5)SETBIT:

(6)BITCOUNT:

(7)BITOP:

二、列表命令:

1、基础命令:

(1)LPUSH 命令:在 列表 的左侧添加元素,成功返回当前列表的长度。 

127.0.0.1:6379> lpush key java
(integer) 1

   LPUSH 一次可以给 key 添加多个 value

127.0.0.1:6379> lpush key python php c
(integer) 4

  (2)RPUSH 命令:将元素推入列表的右端,用法和 lpush 相同。

127.0.0.1:6379> rpush key rust
(integer) 6
127.0.0.1:6379> rpush key asm scala
(integer) 8

(3)LPOP 命令:从列表的左端弹出元素

(4)RPOP命令:从列表的右端弹出元素

(5)llen 命令:  返回列表的当前长度

127.0.0.1:6379> llen key
(integer) 8

(6)LINDEX 命令: 获取列表在给定位置上的一个元素;

127.0.0.1:6379> lindex key  1
"python"

(7)LRANGE 命令: 获取列表在给定范围内的所有元素

127.0.0.1:6379> lrange key 0 3
1) "c++"
2) "c"
3) "php"
4) "python"

(8)ltrim 命令:用于截取列表内元素

127.0.0.1:6379> ltrim key 0 5
OK
127.0.0.1:6379> lrange key 0 -1
1) "c++"
2) "c"
3) "php"
4) "python"
5) "java"
6) "rust"

2、阻塞式命令:这组命令常用于消息传递、任务队列。

(1)blpop 命令:从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现。

blpop key [key ...] timeout

demo:同时开两个 Redis 的客户端,然后在客户端一输入如下命令:

#在 key1 和 key2 列表中弹出一个值,如果两个列表都为空则阻塞 5 秒,因为现在 key1 和 key2 都为空,因此 blpop 阻塞了 5 秒。
127.0.0.1:6379> blpop key1 key2 5
(nil)
(5.06s)

再次在客户端一输入如下命令:

127.0.0.1:6379> blpop key1 key2 20

  由于 key1 和 key2 同样什么都没有,因此 blpop 命令进入 20 秒的阻塞状态,此时,我们在客户端二输入如下命令:

127.0.0.1:6379> lpush key1 java
(integer) 1

观察客户端一,客户端一输出如下:

1) "key1"
2) "java"
(9.51s)

也就是客户端一的 blpop 阻塞了 9.51 秒 以后 key1 列表弹出一个值 java。

(2)brpop 命令: 从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现。

(3)rpoplpush 命令:

(4)brpoplpush 命令 :

三、集合命令:

1、基本命令:

(1)SADD:将元素添加到集合;

(2)SREM:从集合中移除元素

(3)SISMEMBER:检查一个元素是否存在于集合中;

(4)SCARD:

(5)SMEMBERS:获取集合包含的所有元素(谨慎使用,如果数据量大会很慢)

(6)SRANDMEMBER:

(7)SPOP:

(8)SMOVE:

2、用于组合和处理多个集合的redis命令:

(1)SDIFF:

(2)SDIFFSTORE:

(3)SINTER:

(4)SINTERSTORE:

(5)SUNION:

(6)SUNIONSTORE:

四、散列命令:

1、基本命令:

(1)HSET:在散列里面关联起给定的键值对;

(2)HGET:获取指定散列键的值;

(3)HGETALL:获取散列包含的所有键值对

(4)HDEL:如果给定键存在于散列里面,则移除这个键。

(5)HLEN:返回散列包含的键值对数量

2、其他命令:

(1)HMSET:同时将多个 field-value (域-值)对设置到哈希表 key 中。此命令会覆盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并执行 hmset 操作。如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。

注意:在官方文档中关于hmset的描述如下:As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.(根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。)

hmset key field value [field value …]

(2) HMGET:按照给出顺序返回哈希表 key 中一个或多个域的值。:如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 hmget 操作将返回一个只带有 nil 值的表。

hmget key field [field …]

(3) HEXISTS:查看哈希表 key 中给定域 field 是否存在。如果哈希表含有给定域,返回 1 。如果不含有给定域,或 key 不存在,返回 0 。

hexists key field

(4)HKEYS与  hvals: 返回哈希表 key 中的所有域/值。当 key 不存在时,返回一个空表。尽管有HGETALL存在,当散列包含的值非常大时可以像遍历HashMap一样先HKEYS取出所有的key,再根据key使用HGET一个个获取键值,避免一次获取多个大体积的值导致服务器阻塞。

[ hkeys / hvals ] key

(5)hincrby 与 hincrbyfloat:为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新的哈希表被创建并执行 hincrby 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。

[ hincrby / hincrbyfloat ] key field increment
五、有序集合命令:

1、基本命令:

(1)ZADD:将一个带有给定分值的成员添加到有序集合里面;

(2)ZREM:如果给定成员存在于有序集合,则移除这个成员;

(3)zcard:获取有序集合包含的成员数量

 ZCARD key

(4) ZINCRBY :对有序集合中指定成员的分值执行自增操作,为其加上指定的增量(可以是负数)。

 ZINCRBY key increment member

(5)ZCOUNT :统计出有序集合中分值介于指定范围之内的成员数量

ZCOUNT key min max

 (6)ZSCORE :获取与给定成员相关联的分值

ZSCORE key member

   

2、范围查询、交并集等:

(1)zrank/zrevrank:获得成员的升序排列 / 降序排列排名

 ZRANK key member

(2)zrange/zrevrange

zrange sorted_set start end: 获取正序排列排名[start,end]范围内的元素
zrevrange sorted_set start end: 获取逆序排列排名[start,end]范围内的元素

 ZREVRANGE key start stop [WITHSCORES]

(3)zrangebyscore / zrevrangebyscore:
zrangebyscore sorted_set min max: 获取分数在[min,max]内的成员
zrevrangebyscore sorted_set max min: 获取分数在[max,min]内的成员
min参数和max参数分别用于指定用户想要获取的成员的最小分值和最大分值

(4)ZREMRANGEBYRANK :从升序排列的有序集合中移除位于指定排名范围内的成员,然后返回被移除成员的数量

 ZREMRANGEBYRANK key start stop

(5)zremrangebyscore:

zremrangebyscore sorted_set min max

从有序集合中移除位于指定分值范围内的成员,并在移除操作执行完毕返回被移除成员的数量

(6)ZINTERSTORE :number个有序集合的并集,并集存储到destination中。destination的成员为共同的key,score为各个score的总和\最小\最大(默认为总和)。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
127.0.0.1:6379> ZADD dbs 1 bj
(integer) 1
127.0.0.1:6379> ZADD dbs 2 tj
(integer) 1
127.0.0.1:6379> ZADD dbs 3 ah
(integer) 1127.0.0.1:6379> ZADD centers 1 bj
(integer) 1
127.0.0.1:6379> ZADD centers 3 ah1
(integer) 1127.0.0.1:6379> ZINTERSTORE thesame 2 dbs centers
(integer) 1
127.0.0.1:6379> ZRANGE thesame 0 -1 withscores
1) "bj"
2) "2"
127.0.0.1:6379> ZRANGE dbs 0 -1 withscores
1) "bj"
2) "1"
3) "tj"
4) "2"
5) "ah"
6) "3"
127.0.0.1:6379> ZRANGE centers 0 -1 withscores
1) "bj"
2) "1"
3) "ah1"
4) "3"
127.0.0.1:6379>

 (7)zunionstore:number个有序集合的交集,交集存储到destination中

六、redis发布与订阅命令:

1、SUBSCRIBE :订阅给定的一个或多个频道

SUBSCRIBE channel [channel1 channel2 ······ ]

2、UNSUBSCRIBE :Redis 客户端退订指定的一个或多个频道。如果没有频道被指定,也就是一个无参数的 UNSUBSCRIBE 命令被执行,那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。

UNSUBSCRIBE channel [channel1 channel2 ······ ]

3、PUBLISH :向给定频道发送消息,返回值为接收到该消息的订阅者数量。

PUBLISH channel message

4、PSUBSCRIBE :

(1)功能:订阅一个或多个符合给定模式的频道。

PSUBSCRIBE pattern [pattern1 pattern2 ······ ]

(2)说明:这里的模式可以是全局通配符 * ,也可以使用选择匹配符 [ ]。例如,news.* 模式可以匹配所有以 news 开头的频道,像 news.music、news.blog、news.sport 等;而 news.[ie]t 模式则可以匹配news.it频道和news.et频道。
(3)demo:

5、PUNSUBSCRIBE :

(1)功能:退订一个或多个符合给定模式的频道。

PUNSUBSCRIBE pattern [pattern1 pattern2 ······ ]

(2)说明:这里的模式可以是全局通配符 * ,也可以使用选择匹配符 [ ]。如果没有频道被指定,其效果与 SUBSCRIBE 命令相同,客户端将退订所有订阅的频道。

****************************查看发布与订阅的相关信息*************************

6、PUBSUB CHANNELS:列出当前所有的活跃频道。活跃频道指的是那些至少有一个订阅者的频道。pattern 参数是可选的。如果不给出 pattern 参数,将会列出订阅/发布系统中的所有活跃频道。如果给出 pattern 参数,那么只列出和给定模式 pattern 相匹配的那些活跃频道。

PUBSUB CHANNELS [pattern]

7、PUBSUB NUMSUB :返回给定频道的订阅者数量。不给定任何频道则返回一个空列表。

PUBSUB NUMSUB [channel1 channel2 ······ ]

8、PUBSUB NUMPAT :查询当前 Redis 所有客户端订阅的所有频道模式的数量总和。

七、事务命令

1、介绍  :Redis事务的本质是一组命令的集合,一个事务中所有命令会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。Redis有5个命令可以让用户在不被打断的情况下对多个键执行操作。事务执行的三个阶段

1) 以 MULTI 开始一个事务;2)入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面;3)执行:由 EXEC 命令触发事务。

2、命令

命令描述
MULTI开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列
EXEC执行事务中的所有操作命令
DISCARD取消事务,放弃执行事务块中的所有命令
WATCH监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令,上乐观锁
UNWATCH取消WATCH对所有key的监视,但是需要注意的是:每次提交执行EXEC后都会自动释放锁,不管是否成功,所以UNWATCH无需在EXEC后执行
# 标准事务执行
127.0.0.1:6379> MULTI # 开启事务
OK
127.0.0.1:6379> set k1 hello # 命令入队
QUEUED
127.0.0.1:6379> set k2 redis # 命令入队
QUEUED
127.0.0.1:6379> EXEC # 执行事务
1) OK
2) OK
127.0.0.1:6379> get k1 # 验证是否执行
"hello"
127.0.0.1:6379> get k2
"redis"# 事务取消
127.0.0.1:6379> MULTI # 开始事务
OK
127.0.0.1:6379> set k3 test1
QUEUED
127.0.0.1:6379> set k4 test2
QUEUED
127.0.0.1:6379> DISCARD # 取消事务
OK
127.0.0.1:6379> EXEC # 因为事务被取消了,所以执行报错
(error) ERR EXEC without MULTI# 事务出现从错误处理
# 1、语法错误(编译器错误)
# 语法错误会使得事务提交失败,数据恢复原样
127.0.0.1:6379> MULTI # 开启事务
OK
127.0.0.1:6379> set k1 11
QUEUED
127.0.0.1:6379> set k2 22
QUEUED
127.0.0.1:6379> error k3 33 # 执行一条错误的命令
(error) ERR unknown command `error`, with args beginning with: `k3`, `33`, 
127.0.0.1:6379> exec # 执行事务,报错,命令皆未执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k1 # 验证是否执行
"hello" # 值未变
127.0.0.1:6379> get k2
"redis"# 2、类型错误(运行时错误)
# 触发运行时错误时,事务将会跳过错误的命令继续执行,其他正常的命令可以被执行成功
# 此处可以说明:Redis单条指令保证原子性,但是Redis事务不能保证原子性
127.0.0.1:6379> MULTI # 开启事务
OK
127.0.0.1:6379> set k1 11
QUEUED
127.0.0.1:6379> INCR k2 # 类型错误,对string类型进行自增操作
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> EXEC # 执行事务,可以发现虽然第二条命令报错了,但是其他的命令正常执行了
1) OK
2) (error) ERR value is not an integer or out of range
3) "redis"
127.0.0.1:6379> get k1 # 获取k1的值为事务中修改后的值
"11"

3、Watch监控:使用watch key监控指定数据,相当于乐观锁加锁,其执行流程如下

# 正常执行
127.0.0.1:6379> set money 100 # 设置初始金额
OK
127.0.0.1:6379> set use 0 # 设置已消费金额
OK
127.0.0.1:6379> WATCH money # 监控money,相当于给money上锁
OK
127.0.0.1:6379> MULTI # 开启事务
OK
127.0.0.1:6379> DECRBY money 20 # 消费20,初始金额-20
QUEUED
127.0.0.1:6379> INCRBY use 20 # 消费金额+20
QUEUED
127.0.0.1:6379> EXEC # 执行事务,正常无报错
1) (integer) 80
2) (integer) 20# 模拟多线程修改值
# 开启两个Xshell客户端连接同一个redis
# 在第一个客户端1开始操作
127.0.0.1:6379> WATCH money
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY money 20
QUEUED
127.0.0.1:6379> INCRBY use 20
QUEUED
127.0.0.1:6379> # 执行到此处,停止操作,模拟另一个线程修改数据,切换到另一个客户端2127.0.0.1:6379> INCRBY money 500 # 操作money,改变其值+500
(integer) 580
127.0.0.1:6379> # 无需再操作,切回客户端1执行事务127.0.0.1:6379> EXEC # 发现事务执行返回空,即所有命令都未执行
(nil)
127.0.0.1:6379> get money # 查询money,发现和客户端2增加后的值一致,说明客户端1后来的事务并未执行
"580"
127.0.0.1:6379> get use # 同理
"20"
 八、其他命令
1、排序:SORT 

(1)介绍:是Redis中唯一一个可以同时处理3种不同类型结构的命令,当然Redis事务也可以在一连串不间断执行的命令里操作不同类型的数据。

(2)功能 :可以实现以下功能

根据降序而不是默认的升序来排列元素;

将元素看做是数字、或者将元素看做是二进制字符串来排序;

使用被排序元素之外的其他值作为权重来排序,还可以从输入的列表、集合、有序集合以外的其他地方进行取值。

返回或保存给定列表、集合、有序集合key中经过排序的元素。
排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。

 SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
2、键的过期时间:

(1)EXPIRE :设置键的过期时间

 EXPIRE key seconds

注意:对于列表、集合、散列、有序集合这样的容器,只能为整个键设置过期时间,无法为键里面某个元素设置过期时间(可以通过存储时间戳的有序集合来实现针对单个元素的过期操作)。 

作用:为缓存清理key降低内存占用;原子性操作。

(2)TTL:

(3)PTTL:这个命令在Redis2.6或以上版本可用

(4)PERSIST:

(5)EXPIREAT :

EXPIREAT key timestamp

(6)PEXPIRE :这个命令在Redis2.6或以上版本可用

 PEXPIRE key milliseconds

(7)PEXPIREAT :这个命令在Redis2.6或以上版本可用

 PEXPIREAT key milliseconds-timestamp
九、地理位置查询:

1、介绍:Redis的GEO操作是一种基于地理位置信息进行操作的功能。它使用经度和纬度坐标来表示地理位置,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。

2、应用场景:

(1)地理围栏:通过设置地理位置的经纬度信息,可以将用户或者车辆等实体绑定在地理围栏内,当实体进出围栏时,可以触发相应的事件。

(2)附近的人:在类似于约会、社交、旅游等场景下,可以通过Redis GEO快速查询周围的人员或景点。

(3)配送服务:通过获取配送地址的经纬度信息,可以找到距离最近的配送员或仓库,并对订单进行分配。

(4)地址查找:在地图应用中,可以通过Redis GEO快速查询某个地址周围的商家或服务设施。

动态信息:在滴滴、Uber等打车应用中,可以实时更新车辆的位置信息,以提供更加准确的车辆推荐和路线规划服务

2、命令:

(1)GEOADD添加位置信息:将一个或多个指定的地理位置(经度、纬度、名称)添加到指定的键中。GEOADD命令对于经纬度是有要求的:

有效的经度从-180度到180度 ;有效的纬度从-85.05112878度到85.05112878度

GEOADD key longitude latitude member [longitude latitude member ...]

GEOADD cities  116.4074 39.9042 Beijing 121.4737 31.2304 Shanghai 113.2644 23.1291 Guangzhou

(2)GEODIST查询距离:返回两个位置之间的距离。可以选择以米或千米为单位。

GEODIST key member1 member2 [unit]

可选参数unit用于指定计算距离时的单位:

m 表示单位为米
km 表示单位为千米
mi 表示单位为英里
ft 表示单位为英尺

查询北京和上海之间的距离,单位为千米

GEODIST cities Beijing Shanghai km

(3)GEOHASH获取指定位置的Geohash值:返回一个或多个位置的Geohash值,该值用于对地理位置进行更快速的范围查找。

GEOHASH key member [member ...]

如 获取北京的Geohash值

GEOHASH cities Beijing

(4)GEOPOS查询地理位置坐标:返回一个或多个位置的经度和纬度。

GEOPOS key member [member ...]

如 查询广州的经纬度

GEOPOS cities Guangzhou

(5)GEORADIUS查找指定范围内的元素:查询给定坐标范围内的所有元素。可以通过设置排序选项来获取按距离排序的结果。

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]

如 查找距离北京1000公里以内的城市,并按距离升序排列

GEORADIUS cities 116.4074 39.9042 1000 km ASC

(6)GEORADIUSBYMEMBER查询给定成员周围的所有元素:查询给定成员周围的所有元素。可以通过设置排序选项来获取按距离排序的结果。

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]

如 查找距离上海最近的城市,并返回它们的名称和距离

GEORADIUSBYMEMBER cities Shanghai 100 km WITHDIST

(7)ZREM删除成员:从指定键中删除一个或多个成员。

相关文章:

redis原理(四)redis命令

目录 一、字符串命令: 二、列表命令: 三、集合命令: 四、散列命令: 五、有序集合命令: 六、redis发布与订阅命令: 七、事务命令 八、其他命令 1、排序:SORT 2、键的过期时间&#xff…...

FairGuard游戏安全2023年度报告

导 读:2023年,游戏行业摆脱了疫情带来诸多负面影响,国内游戏市场收入与用户规模双双实现突破,迎来了历史新高点。但游戏黑灰产规模也在迅速扩大,不少游戏饱受其侵扰,游戏厂商愈发重视游戏安全问题。 为帮助…...

进阶Docker4:网桥模式、主机模式与自定义网络

目录 网络相关 子网掩码 网关 规则 docke网络配置 bridge模式 host模式 创建自定义网络(自定义IP) 网络相关 IP 子网掩码 网关 DNS 端口号 子网掩码 互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP 地…...

Qt 状态机框架:The State Machine Framework (二)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 1、利用并行态避免态的组合爆炸 假设您想在单个状态机中对汽车的一组互斥属性进行建模。假设我们感兴趣的属性是干净与肮脏,以及移动与不移动。需要四个相互排斥的…...

【Redis】更改redis中的value值

今天继续进步一点点~~ 背景:今天有个前端的同事问我,能不能在Redis中他本人登录公众号的 sessionID 加上一列openID 于是我上网查了一堆在Redis里面的命令,以及不同的客户端怎么输入命令,但是后来问了下同事,他就给我…...

数据结构Java版(2)——栈Stack

一、概念 栈也是一种线性数据结构,最主要的特点是入栈顺序和出栈顺序是相反的,操作时只能从栈顶进行操作,在Java中给我们提供了一个泛型栈——Stack,其中最常用的方法有: void push(E):进栈E pop():退栈E peek():查看…...

tcpdump 用法

tcpdump 是一个用于捕获和分析网络数据包的命令行工具。它可以在网络上截取数据包,并以可读的格式输出,方便进行网络故障排除和协议分析 tcpdump -i interface # 指定网络接口: tcpdump host target_host # 过滤特定主机的流量 tcpdump port…...

JavaScript SEO:如何为搜索引擎优化 JS

什么是 JavaScript SEO? JavaScript SEO 是技术 SEO 的一部分,其重点是使使用 JavaScript 构建的网站更容易被搜索引擎抓取、呈现和索引。 常见任务包括以下内容: 优化通过 JavaScript 注入的内容正确实施懒加载遵循内部链接最佳实践预防、…...

深入探讨生产环境中秒杀接口并发量剧增、负载过高的情况该如何应对?

目录 引言 1. 实施限流措施 1.1 令牌桶算法: 1.2 漏桶算法: 1.3 使用限流框架: 2. 优化数据库操作 2.1. 索引优化 2.2. 批量操作减少交互次数: 2.3. 避免全表扫描: 2.4使用InnoDB引擎: 2.5优化事…...

C语言再学习 -- C语言搭建TCP服务器/客户端

TCP/UDP讲过~ 参看&#xff1a;UNIX再学习 – TCP/UDP 客户机/服务器 这里记录一下可用的TCP服务器和客户端代码。 参看&#xff1a;用C语言搭建TCP服务器/客户端 一、TCP服务器 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #inc…...

企业远程控制如何保障安全?向日葵“全流程安全远控闭环”解析

远程控制为企业带来的便利与业务上的赋能是显而易见的&#xff0c;但很多企业依然对广泛的使用远程控制持一个观望的态度&#xff0c;其中最主要的原因&#xff0c;就是安全。 由于远程控制的原理和特性&#xff0c;它天然地会成为一个企业信息安全敏感领域&#xff0c;企业在…...

为什么需要放行回源IP

为什么需要放行回源IP 网站以“独享模式”成功接入WAF后&#xff0c;所有网站访问请求将先经过独享引擎配置的ELB然后流转到独享引擎实例进行监控&#xff0c;经独享引擎实例过滤后再返回到源站服务器&#xff0c;流量经独享引擎实例返回源站的过程称为回源。在服务器看来&…...

2023一带一路暨金砖国家技能发展与技术创新大赛“网络安全”赛项省选拔赛样题卷②

2023金砖国家职业技能竞赛"网络安全" 赛项省赛选拔赛样题 2023金砖国家职业技能竞赛 省赛选拔赛样题第一阶段&#xff1a;职业素养与理论技能项目1. 职业素养项目1. 职业素养项目2. 网络安全项目3. 安全运营 第二阶段&#xff1a;安全运营项目1. 操作系统安全配置与加…...

C语言:预处理详解

创作不易&#xff0c;来个三连呗&#xff01; 一、预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编…...

一区优化直接写:KOA-CNN-BiLSTM-Attention开普勒优化卷积、长短期记忆网络融合注意力机制的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 KOA开普勒优化算法&#xff0c;于2023年5月发表在SCI、中科院1区Top顶级期刊《Knowledge-Based Systems》上。 该算法提出时间很短&#xff0c;目前还没有套用这个算法的文献。 同样的&#xff0c;我们利用该新鲜出炉的算法对我们的…...

高防IP如何有效应对网站DDOS攻击

高防IP如何有效应对网站DDOS攻击&#xff1f;随着互联网的发展&#xff0c;网站安全问题变得越来越重要。DDoS攻击作为一种常见的网络攻击方式&#xff0c;给网站的稳定性和可用性带来了巨大威胁。而高防IP作为一种专业的网络安全解决方案&#xff0c;能够有效地应对DDoS攻击&a…...

1.6 面试经典150题 - 跳跃游戏

跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 class Solution…...

Apache安全及优化

配置第一台虚拟机 VM1网卡 yum仓库 挂载磁盘 上传3个软件包到/目录 到/目录下进行解压缩 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar -xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.29/srclib/apr mv apr-util-1.6…...

【话题】边缘计算的挑战和机遇

边缘计算是一种新的计算范式&#xff0c;其核心是在网络边缘处理数据&#xff0c;而不是传统的中心式云计算模式。这种计算方式的兴起得益于物联网&#xff08;IoT&#xff09;的普及和丰富的云服务的成功。 机遇&#xff1a; 响应时间优化&#xff1a;由于数据处理更接近数据…...

react之unpkg.com前端资源加载慢、加载不出

文章目录 react之unpkg.com前端资源加载慢什么是unpkg.com加载慢原因解决方案替换国内cdn在 package.json 中打包进来 react之unpkg.com前端资源加载慢 什么是unpkg.com unpkg 是一个内容源自 npm 的全球快速 CDN。 作为前端开发者&#xff0c;我们对 unpkg 都不陌生&#x…...

C++类与对象【对象模型和this指针】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 C对象模型和this指针&#x1f336;️1.1 成员变量和成员函数分开存储&#x1f336;️1.2 this指针概念&#x1f336;️1.3 空指针访问成员函数&#x1f336;…...

策略模式在工作中的运用

前言 在不同的场景下&#xff0c;执行不同的业务逻辑&#xff0c;在日常工作中是很寻常的事情。比如&#xff0c;订阅系统。在收到阿里云的回调事件、与收到AWS的回调事件&#xff0c;无论是收到的参数&#xff0c;还是执行的逻辑都可能是不同的。为了避免&#xff0c;每次新增…...

【go】依赖倒置demo

文章目录 前言1 项目目录结构&#xff1a;2 初始化函数3 router4 api5 service6 dao7 Reference 前言 为降低代码耦合性&#xff0c;采用依赖注入的设计模式。原始请求路径&#xff1a;router -> api -> service -> dao。请求的为实际方法&#xff0c;具有层层依赖的…...

C++ //练习 2.5 指出下述字面值的数据类型并说明每一组内几种字面值的区别:

C Primer&#xff08;第5版&#xff09; 练习 2.5 练习 2.5 指出下述字面值的数据类型并说明每一组内几种字面值的区别&#xff1a; ( a ) ‘a’, L’a’, “a”, L"a" ( b ) 10, 10u, 10L, 10uL, 012, 0xC ( c ) 3.14, 3.14f, 3.14L ( d ) 10, 10u, 10., 10e-2…...

必示科技助力中国联通智网创新中心通过智能化运维(AIOps)通用能力成熟度3级评估

2023年12月15日&#xff0c;中国信息通信研究院隆重公布了智能化运维AIOps系列标准最新批次评估结果。 必示科技与中国联通智网创新中心合作的“智能IT故障监控定位分析能力建设项目”通过了中国信息通信研究院开展的《智能化运维能力成熟度系列标准 第1部分&#xff1a;通用能…...

python数字图像处理基础(九)——特征匹配

目录 蛮力匹配&#xff08;ORB匹配&#xff09;RANSAC算法全景图像拼接 蛮力匹配&#xff08;ORB匹配&#xff09; Brute-Force匹配非常简单&#xff0c;首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行&#xff08;描述符&#xff09;距离测试&#x…...

k8s的对外服务ingress

1、service的作用体现在两个方面 &#xff08;1&#xff09;集群内部&#xff1a;不断跟踪pod的变化&#xff0c;更新deployment中的pod对象&#xff0c;基于pod的ip地址不断变化的一种服务发现机制 &#xff08;2&#xff09;集群外部&#xff1a;类似于负载均衡器&#xff…...

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-3+4

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-34 3. Step by step : Deriation of Kalmen Gain 卡尔曼增益/因数 详细推导4. Priori/Posterrori error Covariance Martix 误差协方差矩阵 3. Step by step :…...

关于前端面试中forEach方法的灵魂7问?

目录 前言 一、forEach方法支持处理异步函数吗&#xff1f; 二、forEach方法在循环过程中能中断吗&#xff1f; 三、forEach 在删除自己的元素后能重置索引吗&#xff1f; 四、forEach 的性能相比for循环哪个好&#xff1f; 五、使用 forEach 会不会改变原来的数组&#…...

AI小程序添加深度合成类目解决办法

基于文言一心和gpt等大模型做了一个ai助理小程序&#xff0c;在提交“一点AI助理”小程序时&#xff0c;审核如下&#xff1a; 失败原因1 审核失败原因 你好&#xff0c;你的小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务&#xff0c;请补充选择&#xff1a;深度…...