Redis测试题
1.怎么查看当前进程?怎么执行退出?怎么查看当前路径?
- 当前进程:ps
- 执行退出:exit
- 查看当前路径:pwd
2.复制文件用哪个命令?如果需要连同文件夹一块复制呢?如 果需要有提示功能呢?
- 复制文件:cp
- 连同文件夹一块复制:cp -r
- 查看当前路径:cp -v
3.删除文件用哪个命令?如果需要连目录及目录下文件一块删 除呢?删除空文件夹用什么命令?
- 删除文件:rm
- 目录下文件一块删:rm -r
- 删除空文件夹:rmdir
4.Linux 下命令有哪几种可使用的通配符?分别代表什么含 义?
- “?”可替代单个字符。
- “*”可替代任意多个字符。
- 方括号“[charset]”可替代 charset 集中的任何单个字符,如[a-z],[abABC]
5.介绍一下 redis 的 sorted set
- Sorted set是Redis的一种数据类型,同set类型一样,sorted set中的元素都是惟一的,不能重复的字作串元素.
- sorted set中的元素是按次序被取出的
6.简述 Redis 的持久化
由于redis的值放在内存中,为防止突然宕机发生,需要对数据进行持久化备份。即将内存数据保存到硬盘。
RDB持久化
rdb是以二进制文件,是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次的持久化的文件,达到数据恢复。
优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能。
缺点:rdb是间隔一段时间进程持久化,如果持久化之间redis发生故障,会发生数据丢失,所以这种方式更适合对数据要求不严谨的时候。
rdb持久化是默认开启的
AOF持久化
AOF是将 ‘操作+数据’以格式化指令的方式追加到操作日志文件的尾部,保存了历史所有操作数据。AOF相对可靠,AOF文件内容是字符串,容易阅读和解析。
优点:可以保持更高的数据完整性
缺点:AOF文件比RDB文件大,且恢复速度慢
AOF默认关闭,开启方法:修改配置文件redis.conf中的 appendonly yes
7.Redis 的哨兵机制
哨兵的作用就是对Redis系统的运行情况监控,它是一个独立进程,它的功能:
1:监控主数据库和从数据库是否运行正常
2:主数据库出现故障后自动将从数据库转化为主数据库
主从集群:主机有写入权限。从机没有,只有可读。
8.缓存的击穿,穿透和雪崩问题,是如何解决的?
缓存雪崩产生的原因:
缓存雪崩简单的理解就是由于原有的缓存失效,本应该访问缓存的请求都去查询数据库了,从而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统崩溃
解决方案:
1:在缓存失效后,通过加锁或者队列来控制读取数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其它线程等待。这种方式能够在一定程度上缓解数据库的压力但是同时又降低了系统的吞吐量。
2:分析用户行为,不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
缓存穿透的原因:
缓存穿透是值用户查询数据,在数据库没有,自然在缓存中也不会有。这样就到时用户查询的时候,每一次都会去数据库查询,然后返回空,就会导致缓存击穿。
解决方案:
1:如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次就去缓存中获取了,而不去数据库了。
缓存击穿的原因:
对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。 这个时候,需要考虑一个问题:缓存被“击穿”的问题。
这个和缓存雪崩的区别在于这里针对某一key缓存,前者则是 很多key。
热点key: 某个key访问非常频繁,当key失效的时候有大量线程来构建缓存,导致负载增加,系统崩溃。
解决方案:
1:使用锁,单机用synchronized,lock等;分布式用分布式锁。
2:缓存过期时间不设置,而是设置在key对应的value里。如果检测到存的时间超过过期时间则异步更新缓存。
9.什么是分布式锁?
- 线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码 段。
- 进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程 的资源,因此无法通过synchronized等线程锁实现进程锁。
- 分布式锁:当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。
10.redis 是单线程执行的,为什么性能这么高?
- Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争 关系。
- 使用多路I/O复用模型,非阻塞IO;
最后,如果有问题,希望指正,一起进步。