学习总结(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
| save 900 1
save 300 10
save 60 10000
|
但是RDB并不是完全的策略,因为在两次RDB触发事件间发生数据丢失则无法恢复,所以需要另外一种策略填补。
AOF
AOF是通过不断往日志文件中写入Redis的写操作相关命令,通过命令恢复数据的一种持久化策略。
AOF默认的保存策略如下。AOF默认是关闭的。
1 2 3 4 5 6
| appendfsync always
appendfsync everysec
appendfsync no
|
AOF和RDB的区别如下:
- RDB恢复数据的速度较快,AOF因为要读取日志文件的命令来恢复数据,所以速度较慢。
- 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有八种内存淘汰策略。
- volatile-lru:从已经设置过期时间的数据集中,选择最近使用次数最少的数据淘汰。
- volatile-lfu:从已经设置过期时间的数据集中,选择一段时间内使用次数最少的数据淘汰。
- volatile-ttl:从已经设置过期时间的数据集中,选择最近将要过期的数据淘汰。
- volatile-random:从已经设置过期时间的数据集中,随机选择数据淘汰。
- allkeys-lru:从所有数据集中,选择最近使用次数最少的数据淘汰。
- allkeys-lfu:从所有数据集中,选择一段时间内使用次数最少的数据淘汰。
- allkeys-ttl:从所有数据集中,选择最近将要过期的数据淘汰。
- 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文件夹下。