Ykuri98
文章46
标签14
分类1
学习总结(2022.05.24-2022.05.26)

学习总结(2022.05.24-2022.05.26)

Redis

Redis是一个NoSQL数据库,因为它基于内存存储,有很高的读取性能,但同时也不能存储大量数据,无法有SQL的容量,所以一般作为SQL的缓存使用。使用方式是:Java应用首先在Redis中查询数据,如果没有获得结果再去SQL中查询。

放在内存中意味着Redis的数据并不能一直储存,且随着机器故障或者重启有丢失数据的风险,所以Redis有将内存中的数据存储至硬盘的功能,这种功能叫做持久化。

Redis的持久化有两种:RDB和AOF。

RDB

RDB,即通过快照技术(保存某一时刻内存中数据的状态)保存数据的一种持久化策略。由于保存的是内存状态,所以保存的文件是比较小的,且是不可读的二进制文件。RDB默认是开启的

RDB默认的保存策略如下。

1
2
3
4
5
6
# 每900秒内key存在1次变化,触发RDB
save 900 1
# 每300秒内key存在10次变化,触发RDB
save 300 10
# 每60秒内key存在10000次变化,触发RDB
save 60 10000

但是RDB并不是完全的策略,因为在两次RDB触发事件间发生数据丢失则无法恢复,所以需要另外一种策略填补。

AOF

AOF是通过不断往日志文件中写入Redis的写操作相关命令,通过命令恢复数据的一种持久化策略。

AOF默认的保存策略如下。AOF默认是关闭的。

1
2
3
4
5
6
# always:只要收到一条写命令,就保存至日志
appendfsync always
# everysec:每秒保存一次至日志
appendfsync everysec
# no:从不保存
appendfsync no

AOF和RDB的区别如下:

  1. RDB恢复数据的速度较快,AOF因为要读取日志文件的命令来恢复数据,所以速度较慢。
  2. RDB存储的数据文件较小,而AOF因为会不断在日志文件中写入命令,日志文件会越来越大。

所以RDB适合用于容灾备份,AOF适合用于日常备份。

数据结构

Redis常用的有五种数据结构,分别是string,hash,list,set,sortset。

string:存储的是一对键值对,一般用于需要计数的场景,如用户的访问次数,文章转发数等。

常用命令如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 设置一个键值对
set
# 获取一个键对应的值
get
# 给整数类型的值+1
incr
# 给整数类型的值加指定的值
incrby
# 设置多个键值对
mset
# 获取多个键的值
mget
# 设置一个键值对,并设置过期时间
setex

hash:存储的是一个二维表,适合存储对象,所以一般用于存储商品信息,用户信息等。

常用命令如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 设置一个键值对
hset
# 获取一个field对应的值
hget
# 设置多个键值对
hmset
# 获取多个field对应的值
hmget
# 获取表中所有field和value
hgetall
# 获取表中所有field
hkeys
# 获取表中所有value
hvals

list:是一个有序,可重复的线性表,可以从两头插入和删除,但不支持随机查找,一般用于消息队列。

常用命令如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 列表左边推入元素
lpush
# 列表右边推入元素
rpush
# 列表左边弹出元素
lpop
# 列表右边弹出元素
rpop
# 计算元素个数
llen
# 获取指定下标的值,最左边元素index为0
lindex
# 插入一个元素
linsert
# 查询范围内元素
lrange
# 删除指定的前几个元素
lrem

set:是一个无序的集合,但不可存储重复的键值对。因为Redis支持通过多个set查询它们的交/并/差集,所以一般用于查找共同好友、发现共同关注等。

常用命令如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 添加元素
sadd
# 查询所有元素
smembers
# 判断一个元素是否在集合中
sismember
# 查询元素数量
scard
# 移动元素至另一集合
smove
# 删除元素
srem
# 随机取出一个元素并删除
spop
# 随机取出一个元素,不删除
srandmember
# 求集合交集
sinter
# 求集合并集
sunion
# 求集合差集
sdiff

zset:是一个有序的集合,可以根据集合中的score对数据进行排序,一般用于直播礼物排行榜、游戏积分排行榜等。

常用命令如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 添加成员及分数
zadd
# 统计成员个数
zcard
# 统计一个分数区间内成员的数量
zcount
# 获取一个成员的分数
zscore
# 为成员增加分数
zincrby
# 获取一个成员的升序排名
zrank
# 获取一个成员的降序排名
zrevrank
# 查找指定排名区间的成员
zrange
# 查找指定排名区间的成员,倒序排列
zrevrange
# 查找指定分数区间的成员
zrangebyscore
# 查找指定分数区间的成员,倒序排列
zrevrangebyscore
# 删除指定成员
zrem

内存淘汰策略

Redis是将数据存储在内存上的,如果内存已满,就需要淘汰一些不需要的数据,以保证之后的数据写入成功。Redis有八种内存淘汰策略。

  1. volatile-lru:从已经设置过期时间的数据集中,选择最近使用次数最少的数据淘汰。
  2. volatile-lfu:从已经设置过期时间的数据集中,选择一段时间内使用次数最少的数据淘汰。
  3. volatile-ttl:从已经设置过期时间的数据集中,选择最近将要过期的数据淘汰。
  4. volatile-random:从已经设置过期时间的数据集中,随机选择数据淘汰。
  5. allkeys-lru:从所有数据集中,选择最近使用次数最少的数据淘汰。
  6. allkeys-lfu:从所有数据集中,选择一段时间内使用次数最少的数据淘汰。
  7. allkeys-ttl:从所有数据集中,选择最近将要过期的数据淘汰。
  8. allkeys-random:从所有数据集中,随机选择数据淘汰。

理论上volatile-lru是最合理的,但也是最慢的,而allkeys-random是速度最快的,所以应对不同的业务场景,需要采取不同的内存淘汰策略。

Linux常用命令

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 基础命令
# 查看当前路径
pwd
# 进入指定路径(相对路径/绝对路径)
# .: 当前路径
# ..: 上一级路径
cd
# 显示路径下所有文件
# -a: 显示隐藏文件
# -l: 显示文件信息
ls

# 文件与目录管理
# 创建新的目录文件
mkdir
# 删除空目录文件
rmdir
# 复制文件或目录
# -r: 表示递归复制
# -f: 表示强制
cp
# 删除文件或目录
# -r: 表示递归删除
# -f: 表示强制
rm
# 移动文件或目录
mv
# 创建文件
touch
# 查看文件中的内容
cat
# 以分页形式查看文件内容
less
# 查看文件的前几行
head
# 查看文件的后几行
tail
# 重定向
>
# 追加
>>
# 压缩
tar -zxvf
# 解压
tar -zcvf

# 文本编辑
# 命令模式
# 删除光标所在字符
x
# 删除光标所在行
dd
# 删除光标所在行直到文件末尾
dG
# 删除光标所在位置直到文件末尾
D
# 插入模式
# 在光标所在位置编辑
i
# 在光标所在行末尾编辑
A
# 移动到下一行编辑
o
# 移动到上一行编辑
O
# 末行模式
# 退出
q
# 保存
w
# 强制
!

# 用户管理
# 添加用户
useradd
# 删除用户
userdel
# 修改用户
usermod
# 查看用户
id

# 组管理
# 添加组
groupadd

# 权限管理
# 修改权限
chmod

# 进程管理
# 查看父进程id
ps -ef | grep
# 查看资源使用情况
px aux | grep
# 终止进程
kill

# 网络管理
# 查看ip
ifconfig
# 查看端口占用情况
netstat -anp | grep

# 软件安装
sudo apt install

Git常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 下载远程仓库,并在本地创建一个同名文件夹
git clone
# 查看工作区和缓冲区变化
git status
# 将工作区的变化提交到缓冲区
git add
# 将缓冲区的变化提交到本地仓库
git commit
# 把本地仓库的变化推送到远程仓库
git push
# 拉取远程仓库的变化到本地仓库
git pull
# 查看仓库的所有版本信息
git log
# 将工作区的变化回退
git checkout
# 将缓冲区的变化回退到工作区
git reset
# 将本地仓库回退至历史版本
git reset --hard

Git处理冲突

如果push时发现本地仓库版本低于远程仓库版本,会push失败,只有使用pull将本地仓库版本更新,才能继续修改。

修改后推送到本地仓库时,如果修改的是同一个文件和同一个内容,会提示产生冲突,需要人为处理;如果不是同一文件或不是同一内容,则不会提示。

由上可知,使用git时应该注意尽量不要开发同一个文件,不然容易产生冲突;且push前最好pull一下,防止push失败。

Git忽略文件

git可以在push时忽略一些文件,不对这些文件进行版本控制。使用方式是将这些文件放在.gitignore文件夹下。

本文作者:Ykuri98
本文链接:https://ykuri98.github.io/2022/05/26/%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93%EF%BC%882022-05-24-2022-05-26%EF%BC%89/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×