Linux指令+Redis的几个常见知识点

1.怎么查看当前进程? 怎么执行退出? 怎么查看当前路径?

ps: -axu 显示当前进程的快照
查看Java进程: ps -axu | grep java
查看MySQL进程 ps - axu | grep mysql

执行退出: exit
查看当前路径: pwd

2.复制文件用哪个命令? 如果需要连同文件夹一块复制呢? 如果需要有提示功能呢?

格式为: cp 被复制文件 目标文件

连同文件夹一起复制: cp -r
需要有提示功能 : cp -v

3.删除文件用哪个命令? 如果需要连目录及目录下文件一块删除呢? 删除空文件夹用什么命令?

删除文件:rm
连同目录及目录下文件删除:rm -r
删除空文件夹: rmdir

4.Linux 下命令有哪几种可使用的通配符? 分别代表什么含义?

“?”可替代单个字符。

“*”可替代任意多个字符。

方括号“[charset]”可替代 charset 集中的任何单个字符,如[a-z],[abABC]

5.介绍一下 redis 的 sorted set

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

6.简述 Redis 的持久化

RDB持久化
指在指定的时间间隔内将内存中的数据集快照写入磁盘,(实际操作过程fork一个子进程,快照持久化完全交给子进程处理,父进程继续处理客户端请求。子进程刚产生时,子进程和父进程共享内存里面的代码段和数据段。先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。)
在这里插入图片描述

AOF持久化
AOF 持久化记录服务器执行的所有写操作命令(AOF日志存储redis服务器的顺序指令序列,只记录对你存进行修改的指令记录),并在服务器启动时,通过重新执行这些命令来还原数据集。
以日志的形式记录服务器所处理的每一个写删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细操作记录。
在这里插入图片描述

Redis 还可以同时使用 AOF 持久化和 RDB 持久化。
重启Redis时,很少用rdb恢复内存状态(会丢失大量数据),通常使用AOF日志重放,但是很慢。所以使用混合持久化:重启时先加载rdb的内容,然后重放增量AOF日志
在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。

7.Redis 的哨兵机制

哨兵模式:给集群分配一个站岗的。

哨兵有两个作用
1.通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
2.当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

哨兵的作用就是对Redis系统的运行情况监控,它是一个独立进程,它的功能:

  1. 监控主数据库和从数据库是否运行正常;
  2. 主数据出现故障后自动将从数据库转化为主数据库;
    在这里插入图片描述
    哨兵模式的原理:哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

8.redis cluster 集群原理

redis-cluster架构图:
在这里插入图片描述
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测有效时整个集群才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
总之:
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
上文描述的示意图:
在这里插入图片描述

9.缓存的穿透、击穿和雪崩问题,是如何解决的?

正常情况下:
在这里插入图片描述

缓存雪崩:

指缓存由于某些原因(比如宕机、cache服务挂了或者不响应)整体crash掉了,导致大量请求到达后端数据库,从而导致数据库宕机,造成系统的崩溃。
比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。
缓存雪崩示意图:
在这里插入图片描述

解决缓存雪崩:
1.分析用户的行为,不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀(热门的商品缓存时间久一点,冷门的商品缓存时间短一点)
2.创建多个集群实例防止集群宕机。
3.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。(比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。但是缓存重建期间,会导很多请求阻塞,用户请求等待超时)

缓存穿透:

缓存穿透, 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。

缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空。请求绕过缓存直接查数据库。

解决缓存穿透:
①如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴
②把空结果,也给缓存起来,这样下次同样的请求就可以直接返回空了,既可以避免当查询的值为空时引起的缓存穿透。
③也可以单独设置个缓存区域存储空值,对要查询的key进行预先校验,然后再放行给后面的正常缓存处理逻辑。(接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截)

缓存击穿:

缓存击穿,是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

解决缓存击穿:
①使用锁,单机用synchronized,lock等,分布式用分布式锁。
②缓存过期时间不设置(设置热点数据永远不过期),而是设置在key对应的value里。如果检测到存的时间超过过期时间则异步更新缓存。

10.redis 是单线程执行的,为什么性还高?

Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。

10单线程 Redis 为什么性能高?

①Redis 的大部分操作在内存上完成
②采用了高效的数据结构
③采用了多路复用机制使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率

11 有人说Redis只适合用来做缓存,当数据库来用则不合适,你怎么看?

Redis能否做数据库用取决于以下几个条件:
1.数据量: redis是内存数据库,要受限于内存的容量
2. 数据的结构:是否能够将关系型数据结构都转换成key/value的形式
3. 查询的效率:对范围查询等,是否能转换为高效的hash索引查询

Redis能不能用来当数据库,取决于你想要存储什么数据
如果你打算存储一些临时数据,数据规模不大,不需要太复杂的查询,但是要求性能比较高,这种情况下是可以当数据库使用的。
能否用来做数据库,要看具体的需求
1.redis的持久化有问题,如果使用的是aof模式,并且设置的是fsync always方式,那么性能会很低,如果数据结构非常适用于适用redis存储并且对性能要求不高,或者对性能要求很高但允许一定程度的丢失数据,则可以。
2.redis数据都是存储在内存中的,如果内存满了,数据就不会存储到硬盘上了。
redis是一种key/value的内存数据库,项目里基本上都是用来做缓存的,可以对数据设置过期时间,时间到了之后就会被清理掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值