redis 命令

Redis是用C语言实现的,一般来说C语言实现的程序”距离”操作系统更近,执行速度相对会更快。

Redis使用了单线程架构,预防了多线程可能产生的竞争问题。

作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的集性能和优雅于一身的开源代码。

本文比较详细且全面的梳理了Redis使用过程中涉及的全部增删改查!

1.字符串

1.设置键

<span class="hljs-keyword">set <span class="hljs-keyword">key <span class="hljs-keyword">value [ex seconds] [px milliseconds] [nx|xx]

setex <span class="hljs-keyword">key seconds <span class="hljs-keyword">value
setnx <span class="hljs-keyword">key <span class="hljs-keyword">value</span></span></span></span></span></span></span>
  • ex seconds:为键设置秒级过期时间。
  • px milliseconds:为键设置毫秒级过期时间。
  • nx:键必须不存在,才可以设置成功,用于添加。
  • xx:与nx相反,键必须存在,才可以设置成功,用于更新。

2.批量设置值

mset <span class="hljs-keyword">key value [<span class="hljs-keyword">key value ...]</span></span>

3.批量获取值

mget <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]</span></span>

4.计数

<span class="hljs-attribute">incr key</span>
  • 值不是整数,返回错误。
  • 值是整数,返回自增后的结果。
  • 键不存在,按照值为0自增,返回结果为1

decr(自减)、incrby(自增指定数字)、
decrby(自减指定数字)、incrbyfloat(自增浮点数)

4.追加值

<span class="hljs-built_in">append key value</span>

5.字符串长度

<span class="hljs-attribute">strlen key</span>

6.设置并返回原值

<span class="hljs-attribute">getset key value</span>

7.设置指定位置的字符

<span class="hljs-attribute">setrange key offeset value</span>

8.获取部分字符串

getrange <span class="hljs-keyword">key start <span class="hljs-keyword">end</span></span>

2.哈希

1.设置值

<span class="hljs-attribute">hset key field value</span>

2.获取值

<span class="hljs-attribute">hget key field</span>

3.删除filed

hdel key field [field <span class="hljs-keyword">...]</span>

4.计算field个数

<span class="hljs-attribute">hlen key</span>

5.批量设置或获取field-value

hmget key field [field <span class="hljs-keyword">...]
hmset key field value [field value <span class="hljs-keyword">...]</span></span>

6.判断field是否存在

<span class="hljs-attribute">hexists key field</span>

7.获取所有field

<span class="hljs-attribute">hkeys key</span>

8.获取所有value

<span class="hljs-attribute">hvals key</span>

9.获取所有的field-value

<span class="hljs-attribute">hgetall key</span>

10.hincrby hincrbyfloat

hincrby <span class="hljs-keyword">key field
hincrbyfloat <span class="hljs-keyword">key field</span></span>

11.计算value的字符串长度

<span class="hljs-attribute">hstrlen key field</span>

3.列表

1)添加

left/right

1.从右边插入元素

rpush key <span class="hljs-keyword">value [<span class="hljs-keyword">value ...]</span></span>

lrange listkey 0 -1 可以从左到右获取列表的所有元素

2.从左边插入元素

lpush key <span class="hljs-keyword">value [<span class="hljs-keyword">value ...]</span></span>

3.向某个元素前或者后插入元素

<span class="hljs-attribute">linsert key before|after pivot value</span>

2)查找

1.获取指定范围内的元素列表

lrange <span class="hljs-keyword">key start <span class="hljs-keyword">end</span></span>

2.获取列表指定索引下标的元素

<span class="hljs-attribute">lindex key index</span>

3.获取列表长度

<span class="hljs-attribute">llen key</span>

3)删除

1.从列表左侧弹出元素

<span class="hljs-attribute">lpop key</span>

2.从列表右侧弹出

<span class="hljs-attribute">rpop key</span>

3.删除指定元素

<span class="hljs-attribute">lrem key count value</span>
  • count>0,从左到右,删除最多count个元素。
  • count

4.按照索引范围修剪列表

<span class="hljs-built_in">ltrim key start <span class="hljs-keyword">end</span></span>

4)修改

修改指定索引下标的元素

<span class="hljs-attribute">lset key index newValue</span>

5)阻塞操作

blpop <span class="hljs-keyword">key [<span class="hljs-keyword">key ...] timeout
brpop <span class="hljs-keyword">key [<span class="hljs-keyword">key ...] timeout</span></span></span></span>
  • key[key…]:多个列表的键
  • timeout:阻塞时间(单位:秒)

开发技巧

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpsh+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

4.集合

集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中 不允许有重复元素,并且集合中的元素是 无序的,不能通过索引下标获取元素。

1.添加元素

sadd key element [element <span class="hljs-keyword">...]</span>

2.删除元素

srem key element [element <span class="hljs-keyword">...]</span>

3.计算元素个数

<span class="hljs-attribute">scard key</span>

4.判断元素是否在集合中

<span class="hljs-attribute">sismember key element</span>

5.随机从集合返回指定个数元素

<span class="hljs-selector-tag">srandmember <span class="hljs-selector-tag">key <span class="hljs-selector-attr">[count]</span></span></span>

6.从集合随机弹出元素

<span class="hljs-attribute">spop key</span>

7.获取所有元素

<span class="hljs-attribute">smembers key</span>

8.求多个集合的交集

sinter <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]</span></span>

9.求多个集合的并集

suinon <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]</span></span>

10.求多个集合的差集

sdiff <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]</span></span>

11.将交集、并集、差集的结果保存

sinterstore destination <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]
suionstore destination <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]
sdiffstore destination <span class="hljs-keyword">key [<span class="hljs-keyword">key ...]</span></span></span></span></span></span>

三个命令(原命令+store)将集合间交集、并集、差集的结果保存在destination中

5.有序集合

1.添加成员

zadd key score <span class="hljs-keyword">member [score <span class="hljs-keyword">member ...]</span></span>

Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项:

  • nx:member必须不存在,才可以设置成功,用于添加。
  • xx:member必须存在,才可以设置成功,用于更新。
  • ch:返回此次操作后,有序集合元素和分数发生变化的个数。
  • incr:对score做增加,相当于后面介绍的zincrby。

2.计算成员个数

<span class="hljs-attribute">zcard key</span>

3.计算某个成员的分数

<span class="hljs-attribute">zscore key member</span>

4.计算成员的排名

zrank <span class="hljs-keyword">key member
zrevrank <span class="hljs-keyword">key member</span></span>

5.删除成员

zrem key <span class="hljs-keyword">member [<span class="hljs-keyword">member ...]</span></span>

6.增加成员的分数

<span class="hljs-selector-tag">zincrby <span class="hljs-selector-tag">key <span class="hljs-selector-tag">increment <span class="hljs-selector-tag">member
<span class="hljs-selector-tag">zincrby <span class="hljs-selector-tag">user<span class="hljs-selector-pseudo">:ranking <span class="hljs-selector-tag">9 <span class="hljs-selector-tag">tom</span></span></span></span></span></span></span></span></span>

7.返回指定排名范围的成员

zrange key <span class="hljs-keyword">start <span class="hljs-keyword">end [withscores]
zrevrange <span class="hljs-keyword">key <span class="hljs-keyword">start <span class="hljs-keyword">end [withscores]</span></span></span></span></span>

zrange是从低到高返回,zrevrange反之。

8.返回指定分数范围的成员

zrangebyscore key <span class="hljs-built_in">min <span class="hljs-built_in">max [withscores] [limit offset <span class="hljs-built_in">count]
zrevrangebyscore key <span class="hljs-built_in">max <span class="hljs-built_in">min [withscores] [limit offset <span class="hljs-built_in">count]</span></span></span></span></span></span>

其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。

同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大。

9.返回指定分数范围成员个数

zcount key <span class="hljs-built_in">min <span class="hljs-built_in">max</span></span>

10.删除指定排名内的升序元素

zremrangebyrank <span class="hljs-keyword">key start <span class="hljs-keyword">end</span></span>

11.删除指定分数范围的成员

zremrangebyscore key <span class="hljs-built_in">min <span class="hljs-built_in">max</span></span>

12.交集

<span class="hljs-selector-tag">zinterstore <span class="hljs-selector-tag">destination <span class="hljs-selector-tag">numkeys <span class="hljs-selector-tag">key <span class="hljs-selector-attr">[key ...] <span class="hljs-selector-attr">[weights weight [weight ...]]
<span class="hljs-selector-attr">[aggregate sum|min|max]</span></span></span></span></span></span></span>
  • destination:交集计算结果保存到这个键。
  • numkeys:需要做交集计算键的个数。
  • key[key…]:需要做交集计算的键。
  • weights weight[weight…]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
  • aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum。
<span class="hljs-selector-tag">zinterstore <span class="hljs-selector-tag">user<span class="hljs-selector-pseudo">:ranking<span class="hljs-selector-pseudo">:1_inter_2 2 <span class="hljs-selector-tag">user<span class="hljs-selector-pseudo">:ranking<span class="hljs-selector-pseudo">:1
<span class="hljs-selector-tag">user<span class="hljs-selector-pseudo">:ranking<span class="hljs-selector-pseudo">:2 <span class="hljs-selector-tag">weights 1 0<span class="hljs-selector-class">.5 <span class="hljs-selector-tag">aggregate <span class="hljs-selector-tag">max</span></span></span></span></span></span></span></span></span></span></span></span></span></span>

13.并集

zunionstore destination numkeys key [<span class="hljs-string">key ...] [<span class="hljs-string">weights weight [weight ...]][aggregate sum|min|max]</span></span>

6.键管理

键重命名

<span class="hljs-keyword">rename <span class="hljs-keyword">key newkey</span></span>

随机返回一个键

randomkey

7.键过期

  • expire key seconds:键在seconds秒后过期。
  • expireat key timestamp:键在秒级时间戳timestamp后过期。
<span class="hljs-keyword">set hello world

<span class="hljs-keyword">expire hello <span class="hljs-number">10

ttl hello</span></span></span>

通过ttl观察它的过期剩余时间(s),返回结果为-2时,代表已被删除。

ttl 和 ptll都可以查询键的剩余时间,但是pttl的精度可以达到毫秒级别,有3种返回值:

  • 大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)
  • -1:键没有设置过期时间
  • -2:键不存在

expireat命令可以设置键的秒级过期时间戳,例如如果需要将键hello在2016-08-0100:00:00(秒级时间戳为1469980800)过期,可以执行如下操作:

<span class="hljs-attribute">expireat hello <span class="hljs-number">1469980800</span></span>

除此之外,Redis2.6版本后提供了毫秒级的过期方案:

  • pexpire key milliseconds:键在milliseconds毫秒后过期。
  • pexpireat key milliseconds-timestamp键在毫秒级时间戳timestamp后过
    期。

但无论是使用过期时间还是时间戳,秒级还是毫秒级,在Redis内部最终使用的都是pexpireat。

8.迁移键

1)move key db

仅限于内部数据库的迁移

2)dump+restore

dump key
<span class="hljs-keyword">restore <span class="hljs-keyword">key ttl <span class="hljs-keyword">value</span></span></span>

分为两步:

1.在源Redis上,dump命令会将键值序列化,格式采用的是RDB格式。

2.在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间。

示例:

1在源Redis上执行dump:

127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1<span class="hljs-selector-pseudo">:6379> <span class="hljs-selector-tag">set <span class="hljs-selector-tag">hello <span class="hljs-selector-tag">world
<span class="hljs-selector-tag">OK
127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1<span class="hljs-selector-pseudo">:6379> <span class="hljs-selector-tag">dump <span class="hljs-selector-tag">hello
"\<span class="hljs-selector-tag">x00\<span class="hljs-selector-tag">x05world\<span class="hljs-selector-tag">b\<span class="hljs-selector-tag">x00\<span class="hljs-selector-tag">xa0\<span class="hljs-selector-tag">xfc\<span class="hljs-selector-tag">xd0;<span class="hljs-selector-tag">y\<span class="hljs-selector-tag">xb0\<span class="hljs-selector-tag">xf8\<span class="hljs-selector-tag">xfa"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

2在目标Redis上执行restore

127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1<span class="hljs-selector-pseudo">:6379> <span class="hljs-selector-tag">get <span class="hljs-selector-tag">hello
(<span class="hljs-selector-tag">nil)
127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1<span class="hljs-selector-pseudo">:6379> <span class="hljs-selector-tag">restore <span class="hljs-selector-tag">hello 0 "\<span class="hljs-selector-tag">x00\<span class="hljs-selector-tag">x05world\<span class="hljs-selector-tag">b\<span class="hljs-selector-tag">x00\<span class="hljs-selector-tag">xa0\<span class="hljs-selector-tag">xfc\<span class="hljs-selector-tag">xd0;<span class="hljs-selector-tag">y\<span class="hljs-selector-tag">xb0\<span class="hljs-selector-tag">xf8\<span class="hljs-selector-tag">xfa"
<span class="hljs-selector-tag">OK
127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1<span class="hljs-selector-pseudo">:6379> <span class="hljs-selector-tag">get <span class="hljs-selector-tag">hello
"<span class="hljs-selector-tag">world"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

上面两步对应的伪代码为

Redis sourceRedis = <span class="hljs-keyword">new Redis(<span class="hljs-string">"sourceMachine", <span class="hljs-number">6379);
Redis targetRedis = <span class="hljs-keyword">new Redis(<span class="hljs-string">"targetMachine", <span class="hljs-number">6379);
targetRedis.restore(<span class="hljs-string">"hello", <span class="hljs-number">0, sourceRedis.dump(<span class="hljs-keyword">key));</span></span></span></span></span></span></span></span></span>

3)migrate(推荐)

migrate host port key|<span class="hljs-string">"" destination-db timeout <span class="hljs-string">[copy] <span class="hljs-string">[replace] <span class="hljs-string">[keys key [key]]</span></span></span></span>

下面对migrate的参数进行逐个说明:

  • host:目标Redis的IP地址。
  • port:目标Redis的端口。
  • key|””:在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处是
    要迁移的键,但Redis3.0.6版本之后支持迁移多个键,如果当前需要迁移多个键,此处为空字符串””。
  • destination-db:目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0。
  • timeout:迁移的超时时间(单位为毫秒)。
  • [copy]:如果添加此选项,迁移后并不删除源键。
  • [replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会
    正常迁移进行数据覆盖。
  • [keys key[key…]]:迁移多个键,例如要迁移key1、key2、key3,此处填
    写”keys key1 key2 key3″。

第一,整个过程是原子执行的,不需要在多个Redis实例上开启客户端的,只需要在源Redis上执行migrate命令即可。

第二,migrate命令的数据传输直接在源Redis和目标Redis上完成的。

第三,目标Redis完成restore后会发送OK给源Redis,源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。

示例:

1源Redis有,目标没有

<span class="hljs-selector-tag">migrate 127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1 6380 <span class="hljs-selector-tag">hello 0 1000</span></span></span></span></span>

2源Redis和目标Redis都有键hello

<span class="hljs-selector-tag">migrate 127<span class="hljs-selector-class">.0<span class="hljs-selector-class">.0<span class="hljs-selector-class">.1 6379 <span class="hljs-selector-tag">hello 0 1000 <span class="hljs-selector-tag">replace</span></span></span></span></span></span>

源Redis批量添加多个键

<span class="hljs-attribute">mset key1 value1 key2 value2 key3 value3</span>

源Redis执行如下命令完成多个键的迁移

<span class="hljs-attribute">migrate <span class="hljs-number">127.0.0.1 <span class="hljs-number">6380 <span class="hljs-string">"" <span class="hljs-number">0 <span class="hljs-number">5000 keys key1 key2 key3</span></span></span></span></span></span>

9.遍历键

1)全量遍历键

<span class="hljs-attribute">keys pattern</span>

示例:

<span class="hljs-attribute">keys *</span>
  • *代表任意字符
  • ?代表一个字符
  • []代表匹配部分字符,例如[1,3]代表匹配1,3
  • \x用来做转义,例如要匹配星号、问号需要进行转义

如果Redis包含了大量的键,执行keys命令很可能会造成Redis阻塞,所以一般建议不要在生产环境下使用keys命令。

2)渐进式遍历

每次执行scan,可以想象成只扫描一个字典中的一部分键,直到将字典中的所有键遍历完毕。

scan <span class="hljs-attribute">cursor <span class="hljs-selector-attr">[match pattern] <span class="hljs-selector-attr">[count number]</span></span></span>
  • cursor是必需参数,实际上cursor是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束。
  • match pattern是可选参数,它的作用的是做模式的匹配,这点和keys的模式匹配很像。
  • count number是可选参数,它的作用是表明每次要遍历的键个数,默认值是10,此参数可以适当增大。

10.数据库管理

1.切换数据库

<span class="hljs-keyword">select dbIndex</span>

默认有16个

2.flushdb/flushall

flushdb只清除当前数据库,flushall会清除所有数据库。

11.慢查询分析

所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来。慢查询功能可以有效地帮助我们找到Redis可能存在的瓶颈.

12.Pipeline

Pipeline(流水线)机制它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端。

13.事务

熟悉关系型数据库的读者应该对事务比较了解,简单地说,事务表示一组动作,要么全部执行,要么全部不执行。

Redis提供了简单的事务功能,将一组需要一起执行的命令放到multi和exec两个命令之间。如果要停止事务的执行,可以使用discard命令代替exec命令即可。

14.关机

<span class="hljs-keyword">shutdown</span>

Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式。

也可以kill掉,但不要kill -9,shutdown参数有nosave|save

15.安全

设置密码(“”:无)

<span class="hljs-built_in">config set requirepass <span class="hljs-string">"password"</span></span>
<span class="hljs-attribute">auth <span class="hljs-string">"password"</span></span>

获取密码

<span class="hljs-built_in">config get requirepass</span>

16.持久化

所有的数据都存在内存中,从内存当中同步到硬盘上,这个过程叫做持久化过程。
持久化操作,两种方式:rdb方式、aof方式,可以单独使用或者结合使用。

RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.

AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。

RDB配置

在redis.conf中的配置

save <span class="hljs-number">900 <span class="hljs-number">1
save <span class="hljs-number">300 <span class="hljs-number">10
save <span class="hljs-number">60 <span class="hljs-number">10000
dbfilename <span class="hljs-built_in">dump.rdb
dir ./</span></span></span></span></span></span></span>

意思是在900秒内有1个key发生变化,就写一次硬盘。

Linux保存在 redis.conf 同级目录

AOF配置

配置完记得重启!

Original: https://www.cnblogs.com/yelongsan/p/10319214.html
Author: 蒂其之死
Title: redis 命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529164/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 我写的 Python 代码,同事都说好

    人生苦短,我用 Python。 程序员的追求就是不写代码,早日财务自由。不对,一不小心把实话说出来了,应该是将代码写得简洁,优雅。 Python 程序员的追求则是 Pythonic…

    Linux 2023年6月7日
    0101
  • Django补充

    django配置文件相关操作 django实际上有两个配置文件 一个是提供给用户可以自定义的基本配置 from 项目名 import settings 一个是全局的系统默认的配置 …

    Linux 2023年6月7日
    0101
  • WPF获取系统dpi

    WPF获取系统dpi var dpiX = (int)typeof(SystemParameters).GetProperty("DpiX", BindingF…

    Linux 2023年6月13日
    087
  • Redis集群-主从架构

    1.为什么需要集群? 互联网思维一向讲究的是三高,即高并发,高可用,高性能。高并发:系统能够同时并行处理的请求,主要度量指标有响应延时,吞吐量,每秒查询处理,每秒事务处理,并发用户…

    Linux 2023年6月7日
    0110
  • Docker容器镜像打成tar包

    简述需求: 在现在容器上保存镜像进行打包,在另一台服务上使用 首先查看下现有要打tar包的容器 接下来用commit参数进行保存镜像, -a 提交人的姓名 -m “提交…

    Linux 2023年6月8日
    085
  • JavaScript DOM操作(二)

    上机二 JavaScript DOM操作 目的: 熟练掌握JavaScript的文档对象模型DOM概念,以及各种节点类型和节点操作。 重点掌握元素节点的各种操作方法。 要求: 实现…

    Linux 2023年6月13日
    099
  • C语言练习:hackerrank十五关

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    089
  • 不自由的自由职业

    大家好。我叫梁旭,以前是农民,现在是自由职业者。 [En] Hello, everyone. I’m Liangxu, a former farmer, and now…

    Linux 2023年5月27日
    0120
  • Redis 集群

    三高架构:并发,性能,可用 主从复制 主从复制:将 master 中的数据即时、有效的复制到 slave 中 特征:一个 master 可以拥有多个 slave,一个 slave …

    Linux 2023年5月28日
    0105
  • HTML笔记整理–上节

    一、认识WEB 「网页」主要是由 &#x6587;&#x5B57;、 &#x56FE;&#x50CF;和 &#x8D85;&#x94…

    Linux 2023年6月13日
    094
  • Linux 最小安装与 Xshell 远程工具的使用

    写在前面:本篇文章介绍了CtenOS的最小安装方法,以及使虚拟机使用VMware的桥接模式的方法。桥接模式下的虚拟机,相当于和物理机处于同一物理网络(网线、WIFI等)下。在多台物…

    Linux 2023年6月8日
    0111
  • vue过滤器和生命周期——day02

    vue之过滤器和生命周期——day02 过滤器: 概念:Vue.js 允许你自定义过滤器, 可被用作一些常见的文本格式化。过滤器可以用在两个地方: mustache 插值和 v-b…

    Linux 2023年6月7日
    0125
  • Flask 易错点

    1.With上下文管理器 常用: with open("file_name","wb") as f: f.write("hello…

    Linux 2023年6月8日
    082
  • Linux基础学习(三)

    [root@ct7 ~]# grep -vc “/sbin/nologin” /etc/passwd [root@ct7 ~]# grep -v “/sbin/nologin” /…

    Linux 2023年6月8日
    086
  • Guava 内存缓存的使用

    一、概述 guava⽬前有三种刷新本地缓存的机制: expireAfterAccess:当缓存项在指定的时间段内没有被读或写就会被回收。 expireAfterWrite:当缓存项…

    Linux 2023年6月16日
    0112
  • Java分布式集群,使用synchronized和Redis保证Job的原子性

    1.使用synchronized保证并发时,同时只会有一个请求执行该代码段; 2.在执行前先设置并获取Reids标记,先设置然后获取确保是否已经执行;SetOption.SET_I…

    Linux 2023年5月28日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球