四、redis数据类型

redis可以理解成一个全局的大字典,key就是数据的唯一标识符。根据key对应的值不同,可以划分成5个基本数据类型。
1. string类型:
字符串类型,是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,也就是byte类型。
单个数据的最大容量是512M。
key: 值 2. hash类型:
哈希类型,用于存储对象/字典,对象/字典的结构为键值对。key、域、值的类型都为string。域在同一个hash中是唯一的。
key:{
域(属性): 值,
域:值,
域:值,
域:值,
...
}
3. list类型:
列表类型,它的子成员类型为string。
key: [值1,值2, 值3.....]
4. set类型:
无序集合,它的子成员类型为string类型,元素唯一不重复,没有修改操作。
key: {值1, 值4, 值3, ...., 值5} 5. zset类型(sortedSet):
有序集合,它的子成员值的类型为string类型,元素唯一不重复,没有修改操作。权重值(score,分数)从小到大排列。
key: {
值1 权重值1(数字);
值2 权重值2;
值3 权重值3;
值4 权重值4;
}

针对各种数据类型它们的特性,使用场景如下:

字符串string: 用于保存项目中普通数据,只要键值对都可以保存,例如,保存 session/jwt,定时记录状态,倒计时、验证码、防灌水答案 哈希hash:用于保存项目中的一些结构体/map类型数据,但是不能保存多维结构,例如,商城的购物车,文章信息,json结构数据 列表list:用于保存项目中的列表/切片数据,但是也不能保存多维结构,例如,消息队列,秒杀系统,排队, 无序集合set: 用于保存项目中的一些不能重复的数据,可以用于过滤,例如,候选人名单, 作者名单, 有序集合zset:用于保存项目中一些不能重复,但是需要进行排序的数据,例如:分数排行榜, 海选人排行榜,热搜排行,

4.1. string(字符串)

  • GET/MGET
  • SET/SETEX/MSET/MSETNX
  • INCR/DECR
  • GETSET
  • DEL

1. 设置键值

set 设置的数据没有额外操作时,是不会过期的。

1
set key value

设置键为name值为yuan的数据

1
2
set name yuan
set name rain # 一个变量可以设置多次

注意:redis中的所有数据操作,如果设置的键不存在则为添加,如果设置的键已经存在则修改。

设置一个键,当键不存在时才能设置成功,用于一个变量只能被设置一次的情况。

1
setnx  key  value

一般用于给数据加锁(分布式锁)

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> setnx goods_1 101
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 0 # 表示设置不成功 127.0.0.1:6379> del goods_1
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 1

2. 设置键值的过期时间

redis中可以对一切的数据进行设置有效期。以秒为单位

1
setex key seconds value

设置键为goods_1值为101过期时间为10秒的数据

1
setex name goods_1 10

3. 关于设置保存数据的有效期

setex 添加保存数据到redis,同时设置有效期,格式:

1
setex key time value

4. 设置多个键值

1
mset key1 value1 key2 value2 ...

例3:设置键为a1值为goland、键为a2值为java、键为a3值为c

1
mset a1 goland a2 java a3 c

5. 字符串拼接值

常见于大文件上传

1
append key value

向键为a1中拼接值haha

1
2
3
set title "我的"
append title "redis"
append title "学习之路"

6. 根据键获取值

根据键获取值,如果不存在此键则返回nil

1
get key

获取键name的值

1
get name

根据多个键获取多个值

1
mget key1 key2 ...

获取键a1、a2、a3的值

1
mget a1 a2 a3

getset:设置key的新值,返回旧值

 1
2
3
4
5
6
7
8
9
10
redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)
redis> GET db
"mongodb" redis> GETSET db redis # 返回旧值 mongodb
"mongodb" redis> GET db
"redis"

7. 自增自减

web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
set id 1
incr id # 相当于id+1
get id # 2
incr id # 相当于id+1
get id # 3 set goods_id_1 10
decr goods_id_1 # 相当于 id-1
get goods_id_1 # "9"
decr goods_id_1 # 相当于id-1
get goods_id_1 # 8 set age 22
incrby age 2 # 自增自减大于1的值时候用incrby

8. 获取字符串的长度

1
2
set name xiaoming
strlen name # 8

9. 比特流操作

1字节=8比特 1kb = 1024字节 1mb = 1024kb 1gb = 1024mb

1个int8就是一个字节,一个中文:3个字节

签到记录

1
2
3
4
SETBIT     # 设置一个bit数据的值
GETBIT # 获取一个bit数据的值
BITCOUNT # 统计字符串被设置为1的bit数.
BITPOS # 返回字符串里面第一个被设置为1或者0的bit位。

终端操作:

 1
2
3
4
5
6
7
8
9
10
11
12
SETBIT mykey 7 1
# 00000001
getbit mykey 7
# 00000001
SETBIT mykey 4 1
# 00001001
SETBIT mykey 15 1
# 0000100100000001
BITCOUNT mykey
# 3
BITPOS mykey 1
# 4

4.2. key操作

redis中所有的数据都是通过key(键)来进行操作,这里我们学习一下关于任何数据类型都通用的命令。

(1)查找键

参数支持简单的正则表达式

1
keys pattern

查看所有键

1
keys *

例子:

1
2
3
4
5
6
# 查看名称中包含`a`的键
keys *a*
# 查看以a开头的键
keys a*
# 查看以a结尾的键
keys *a

(2)判断键是否存在

如果存在返回1,不存在返回0

1
exists key1

判断键title是否存在

1
exists title

(3)查看键的的值的数据类型

1
2
3
4
5
6
7
type key

# string    字符串
# hash 哈希类型
# list 列表类型
# set 无序集合
# zset 有序集合

查看键的值类型

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type a1
# string
sadd member_list xiaoming xiaohong xiaobai
# (integer) 3
type member_list
# set
hset user_1 name xiaobai age 17 sex 1
# (integer) 3
type user_1
# hash
lpush brothers zhangfei guangyu liubei xiaohei
# (integer) 4
type brothers
# list zadd achievements 61 xiaoming 62 xiaohong 83 xiaobai 78 xiaohei 87 xiaohui 99 xiaolong
# (integer) 6
type achievements
# zset

(4)删除键以及键对应的值

1
del key1 key2 ...

(5)查看键的有效期

1
2
3
4
5
ttl key

# 结果结果是秒作为单位的整数
# -1 表示永不过期
# -2 表示当前数据已经过期,查看一个不存在的数据的有效期就是-2

(6)设置key的有效期

给已有的数据重新设置有效期,redis中所有的数据都可以通过expire来设置它的有效期。有效期到了,数据就被删除。

1
expire key seconds

(7)清空所有key

慎用,一旦执行,则redis所有数据库0~15的全部key都会被清除

1
flushall

(8)key重命名

1
rename  oldkey newkey

把name重命名为username

1
2
3
set name yuan
rename name username
get username

select切换数据库

1
2
redis的配置文件中,默认有0~15之间的16个数据库,默认操作的就是0号数据库
select <数据库ID>

操作效果:

 1
2
3
4
5
6
7
8
9
10
11
# 默认处于0号库
127.0.0.1:6379> select 1
OK
# 这是在1号库
127.0.0.1:6379[1]> set name xiaoming
OK
127.0.0.1:6379[1]> select 2
OK
# 这是在2号库
127.0.0.1:6379[2]> set name xiaohei
OK

4.3. list(数组)

队列,列表的子成员类型为string

(1)添加子成员

1
2
3
4
5
6
7
8
9
# 在左侧(前)添加一条或多条数据
lpush key value1 value2 ... # 在右侧(后)添加一条或多条数据
rpush key value1 value2 ... # 在指定元素的左边(前)/右边(后)插入一个或多个数据
linsert key before 指定元素 value1 value2 ....
linsert key after 指定元素 value1 value2 ....

从键为brother的列表左侧添加一个或多个数据liubei、guanyu、zhangfei

1
2
3
4
lpush brother liubei
# [liubei]
lpush brother guanyu zhangfei xiaoming
# [xiaoming,zhangfei,guanyu,liubei]

从键为brother的列表右侧添加一个或多个数据,xiaohong,xiaobai,xiaohui

1
2
3
4
rpush brother xiaohong
# [xiaoming,zhangfei,guanyu,liubei,xiaohong]
rpush brother xiaobai xiaohui
# [xiaoming,zhangfei,guanyu,liubei,xiaohong,xiaobai,xiaohui]

从key=brother,key=xiaohong的列表位置左侧添加一个数据,xiaoA,xiaoB

1
2
3
4
linsert brother before xiaohong xiaoA
# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaobai,xiaohui]
linsert brother before xiaohong xiaoB
# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaoB,xiaohong,xiaobai,xiaohui]

从key=brother,key=xiaohong的列表位置右侧添加一个数据,xiaoC,xiaoD

1
2
3
4
linsert brother after xiaohong xiaoC
# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaoC,xiaobai,xiaohui]
linsert brother after xiaohong xiaoD
# [xiaoming,zhangfei,guanyu,liubei,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]

注意:当列表如果存在多个成员值一致的情况下,默认只识别第一个。

1
2
3
4
5
6
127.0.0.1:6379> linsert brother before xiaoA xiaohong
# [xiaoming,zhangfei,guanyu,liubei,xiaohong,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]
127.0.0.1:6379> linsert brother before xiaohong xiaoE
# [xiaoming,zhangfei,guanyu,liubei,xiaoE,xiaohong,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]
127.0.0.1:6379> linsert brother after xiaohong xiaoF
# [xiaoming,zhangfei,guanyu,liubei,xiaoE,xiaohong,xiaoF,xiaoA,xiaohong,xiaoD,xiaoC,xiaobai,xiaohui]

(2)获取列表成员

根据指定的索引(下标)获取成员的值,负数下标从右边-1开始,逐个递减

1
lindex key index

获取brother下标为2以及-2的成员

1
2
3
4
5
6
del brother
lpush brother guanyu zhangfei xiaoming
lindex brother 2
# "guanyu"
lindex brother -2
# "zhangfei"

移除并获取列表的第一个成员或最后一个成员

1
2
lpop key  # 第一个成员出列
rpop key # 最后一个成员出列

获取并移除brother中的第一个成员

1
2
lpop brother
# 开发中往往使用rpush和lpop实现队列的数据结构->实现入列和出列

(3)获取列表的切片

闭区间[包括stop]

1
lrange key start stop

操作:

1
2
3
4
5
6
7
8
del brother
rpush brother liubei guanyu zhangfei xiaoming xaiohong
# 获取btother的全部成员
lrange brother 0 -1
# 获取brother的前2个成员
lrange brother 0 1
# 获取brother的后2个成员
lrange brother -2 -1

(4)获取列表的长度

1
llen key

获取brother列表的成员个数

1
llen brother

(5)按索引设置值

1
2
3
4
lset key index value
# 注意:
# redis的列表也有索引,从左往右,从0开始,逐一递增,第1个元素下标为0
# 索引可以是负数,表示尾部开始计数,如`-1`表示最后1个元素

修改键为brother的列表中下标为4的元素值为xiaohongmao

1
lset brother 4 xiaohonghong

(6)删除指定成员

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
lrem key count value

# 注意:
# count表示删除的数量,value表示要删除的成员。该命令默认表示将列表从左侧前count个value的元素移除
# count==0,表示删除列表所有值为value的成员
# count >0,表示删除列表左侧开始的前count个value成员
# count <0,表示删除列表右侧开始的前count个value成员 del brother
rpush brother A B A C A
lrem brother 0 A
["B","C"] del brother
rpush brother A B A C A
lrem brother -2 A
["A","B","C"] del brother
rpush brother A B A C A
lrem brother 2 A
["B","C","A"]

4.4. hash(哈希)

专门用于结构化的数据信息。对应的就是map/结构体

结构:

1
2
3
4
5
键key:{
域field: 值value,
域field: 值value,
域field: 值value,
}

(1)设置指定键的属性/域

设置指定键的单个属性

1
hset key field value

设置键 user_1的属性namexiaoming

 1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> hset user_1 name xiaoming   # user_1没有会自动创建
(integer) 1
127.0.0.1:6379> hset user_1 name xiaohei # user_1中重复的属性会被修改
(integer) 0
127.0.0.1:6379> hset user_1 age 16 # user_1中不存在的属性会被新增
(integer) 1
127.0.0.1:6379> hset user:1 name xiaohui # user:1会在redis界面操作中以:作为目录分隔符
(integer) 1
127.0.0.1:6379> hset user:1 age 15
(integer) 1
127.0.0.1:6379> hset user:2 name xiaohong age 16 # 一次性添加或修改多个属性

(2)获取指定键的域/属性的值

获取指定键所有的域/属性

1
hkeys key

获取键user的所有域/属性

1
2
3
4
5
6
7
127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
127.0.0.1:6379> hkeys user:3
1) "name"
2) "age"
3) "sex"

获取指定键的单个域/属性的值

hget key field

获取键user:3属性name的值

1
2
127.0.0.1:6379> hget user:3 name
"xiaohong"

获取指定键的多个域/属性的值

1
hmget key field1 field2 ...

获取键user:2属性nameage的值

1
2
3
127.0.0.1:6379> hmget user:2 name age
1) "xiaohong"
2) "16"

获取指定键的所有值

1
hvals key

获取指定键的所有域值对

1
2
3
4
127.0.0.1:6379> hvals user:3
1) "xiaohong"
2) "17"
3) "1"

(3)获取hash的所有域值对

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> hset user:1 name xiaoming age 16 sex 1
(integer) 3
127.0.0.1:6379> hgetall user:1
1) "name"
2) "xiaoming"
3) "age"
4) "16"
5) "sex"
6) "1"

(4)删除指定键的域/属性

1
hdel key field1 field2 ...

删除键user:3的属性sex/age/name,当键中的hash数据没有任何属性,则当前键会被redis删除

1
hdel user:3 sex age name

(5)判断指定属性/域是否存在于当前键对应的hash中

1
hexists   key  field

判断user:2中是否存在age属性

1
2
3
4
5
127.0.0.1:6379> hexists user:3 age
(integer) 0
127.0.0.1:6379> hexists user:2 age
(integer) 1
127.0.0.1:6379>

(6)属性值自增自减

1
hincrby key field number

给user:2的age属性在原值基础上+/-10,然后在age现有值的基础上-2

 1
2
3
4
5
6
7
8
9
10
# 按指定数值自增
127.0.0.1:6379> hincrby user:2 age 10
(integer) 77
127.0.0.1:6379> hincrby user:2 age 10
(integer) 87 # 按指定数值自减
127.0.0.1:6379> hincrby user:2 age -10
(integer) 77
127.0.0.1:6379> hincrby user:2 age -10

4.5. set(集合)

无序集合,重点就是去重和无序。

(1)添加元素

1
sadd key member1 member2 ...

向键authors的集合中添加元素zhangsanlisiwangwu

1
sadd authors zhangsan lisi wangwu

(2)获取集合的所有的成员

1
smembers key

获取键authors的集合中所有元素

1
smembers authors

(3)获取集合的长度

1
scard keys

获取s2集合的长度

1
2
3
4
sadd s2 a b c d e

127.0.0.1:6379> scard s2
(integer) 5

(4)随机抽取一个或多个元素

抽取出来的成员被删除掉

1
2
3
4
spop key [count=1]

# 注意:
# count为可选参数,不填则默认一个。被提取成员会从集合中被删除掉

随机获取s2集合的成员

1
2
3
4
5
6
sadd s2 a c d e

127.0.0.1:6379> spop s2
"d"
127.0.0.1:6379> spop s2
"c"

(5)删除指定元素

1
srem key value

删除键authors的集合中元素wangwu

1
srem authors wangwu

(6)交集、差集和并集

推荐、(协同过滤,基于用户、基于物品)

1
2
3
sinter  key1 key2 key3 ....    # 交集、比较多个集合中共同存在的成员
sdiff key1 key2 key3 .... # 差集、比较多个集合中不同的成员
sunion key1 key2 key3 .... # 并集、合并所有集合的成员,并去重
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
del user:1 user:2 user:3 user:4
sadd user:1 1 2 3 4 # user:1 = {1,2,3,4}
sadd user:2 1 3 4 5 # user:2 = {1,3,4,5}
sadd user:3 1 3 5 6 # user:3 = {1,3,5,6}
sadd user:4 2 3 4 # user:4 = {2,3,4} # 交集
127.0.0.1:6379> sinter user:1 user:2
1) "1"
2) "3"
3) "4"
127.0.0.1:6379> sinter user:1 user:3
1) "1"
2) "3"
127.0.0.1:6379> sinter user:1 user:4
1) "2"
2) "3"
3) "4" 127.0.0.1:6379> sinter user:2 user:4
1) "3"
2) "4" # 并集
127.0.0.1:6379> sunion user:1 user:2 user:4
1) "1"
2) "2"
3) "3"
4) "4"
5) "5" # 差集
127.0.0.1:6379> sdiff user:2 user:3
1) "4" # 此时可以给user:3推荐4 127.0.0.1:6379> sdiff user:3 user:2
1) "6" # 此时可以给user:2推荐6 127.0.0.1:6379> sdiff user:1 user:3
1) "2"
2) "4"

4.6. zset(有序集合)

有序集合,去重并且根据score权重值来进行排序的。score从小到大排列。

(1)添加成员

1
zadd key score1 member1 score2 member2 score3 member3 ....

设置榜单achievements,设置成绩和用户名作为achievements的成员

1
2
3
4
5
127.0.0.1:6379> zadd achievements 61 xiaoming 62 xiaohong 83 xiaobai  78 xiaohei 87 xiaohui 99 xiaolan
(integer) 6
127.0.0.1:6379> zadd achievements 85 xiaohuang
(integer) 1
127.0.0.1:6379> zadd achievements 54 xiaoqing

(2)获取score在指定区间的所有成员

1
2
3
4
zrangebyscore key min max     # 按score进行从低往高排序获取指定score区间
zrevrangebyscore key min max # 按score进行从高往低排序获取指定score区间
zrange key start stop # 按scoer进行从低往高排序获取指定索引区间
zrevrange key start stop # 按scoer进行从高往低排序获取指定索引区间
1
zrange achievements 0 -1  # 从低到高全部成员

(3)获取集合长度

1
zcard key

获取users的长度

1
zcard achievements

(4)获取指定成员的权重值

1
zscore key member

获取users中xiaoming的成绩

1
2
3
4
5
6
127.0.0.1:6379> zscore achievements xiaobai
"93"
127.0.0.1:6379> zscore achievements xiaohong
"62"
127.0.0.1:6379> zscore achievements xiaoming
"61"

(5)获取指定成员在集合中的排名

排名从0开始计算

1
2
zrank key member      # score从小到大的排名
zrevrank key member # score从大到小的排名

获取achievements中xiaohei的分数排名,从大到小

1
2
127.0.0.1:6379> zrevrank achievements xiaohei
(integer) 4

(6)获取score在指定区间的所有成员数量

1
zcount key min max

获取achievements从0~60分之间的人数[闭区间]

1
2
3
4
127.0.0.1:6379> zcount achievements 0 60
(integer) 2
127.0.0.1:6379> zcount achievements 54 60
(integer) 2

(7)给指定成员增加增加权重值

1
zincrby key score member

给achievements中xiaobai增加10分

1
2
127.0.0.1:6379> ZINCRBY achievements 10 xiaobai
"93

(8)删除成员

1
zrem key member1 member2 member3 ....

从achievements中删除xiaoming的数据

1
zrem achievements xiaoming

(9)删除指定数量的成员

1
2
3
4
# 删除指定数量的成员,从最低score开始删除
zpopmin key [count]
# 删除指定数量的成员,从最高score开始删除
zpopmax key [count]

例子:

 1
2
3
4
5
6
7
8
9
10
11
12
13
# 从achievements中提取并删除成绩最低的2个数据
127.0.0.1:6379> zpopmin achievements 2
1) "xiaoqing"
2) "54"
3) "xiaolv"
4) "60" # 从achievements中提取并删除成绩最高的2个数据
127.0.0.1:6379> zpopmax achievements 2
1) "xiaolan"
2) "99"
3) "xiaobai"
4) "93"

四、redis数据类型的更多相关文章

  1. Redis(四):常用数据类型和命令

    命令手册网址 http://doc.redisfans.com/ Redis数据类型 l String l Hash l List l Set l Sorted Set Redis中还有3种特殊的数据 ...

  2. redis数据类型-散列类型

    Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...

  3. 深入理解redis数据类型

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9720033.html redis的存储模型 redis不是普通的键值对存储,它实际上是一个数据结构存储服务器 ...

  4. 二:Redis数据类型

    一.nosql(非关系性数据库): mongoDB hbase redis nulch hive pig mahout zookeeper 二:redis 数据类型 1.存储string: 常用命令 ...

  5. redis深入学习(一)-----CAP、redis数据类型

    NoSQL数据库的四大分类 KV键值: memcache+redis 文档型数据库(bson格式比较多): MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在 ...

  6. redis教程(一)-----redis数据类型、基本命令、发布订阅以及持久化

    简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMwa ...

  7. 《Redis内存数据库》Redis数据类型和基本操作

    前言 redis 有多种数据类型,兼容应用的开发. 说明 第一种数据类型:string(字符串) set key value     -- 设置key和key对应的value值 get key    ...

  8. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  9. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

随机推荐

  1. Word 分页符怎么使用

    当一页内容输入完之后,还留有很多空白区域没有填写,一直按回车键跳转到下一页显得复杂,并且回车键经过的地方都是段落. 可以手动添加分页符,使当前页跳转到下一页. 也可以使用快捷键Ctrl + Enter ...

  2. 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过多个版本迭代,目前最新版 ...

  3. 你言我语 By Twikoo

    主要做了两件事: 一是前端魔改 二是首页调用(替代原 bber) 注明:以下样式.功能代码基于 Twikoo v1.6.4 前端魔改 "管理面板"按钮同步隐藏输入框.先到twiko ...

  4. KingbaseES R6 集群repmgr witness 手工配置案例

    使用见证服务器: 见证服务器是一个正常的KingbaseES实例,不是流复制群集的一部分; 其目的是,如果发生故障转移情况,则提供证明它是主服务器本身不可用的证据,而不是例如在不同物理位置之间的网络分 ...

  5. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  6. P8539 「Wdoi-2」来自地上的支援 题解

    思路 根据题意,如果每次询问选中的为第 \(x\) 个数,那么前 \(x-1\) 次操作一定不会选中第 \(x\) 个数.(感觉在说废话.) 同样,因为第 \(x\) 个数必须被选中 \(k\) 次, ...

  7. 【问题解决】Debian更新源提示InRelease已过期

    问题 本人日常用 Debian10 今天在更新源(apt update) 时,出现InRelease文件过期的问题 E: http://mirrors.163.com/debian/dists/bus ...

  8. Promtail 配置文件说明

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492163&idx=1&sn=56b26aa387 ...

  9. Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 四)

  10. linux软链接的创建、修改和删除

    创建 ln -s [源文件或目录] [目标文件或目录] 修改 ln –snf [新的源文件或目录] [目标文件或目录] 删除 rm –rf 软链接名称 注意,上面这种形式可能会让人产生担忧,害怕删除的 ...