redis是一个开源的用c语言编写的、可用于网络、基于内存亦可实现持久化的日志型、key-value数据库。
使用场景:数据高并发读写,海量数据读写。
缓存数据、分布式锁、事务、持久化、消息队列
个人感觉没啥用,这个不背了。
redis它性能高,普通笔记本每秒都能处理几十万请求,而且单线程还好实现,所以没必要用多线程。
用户的请求的数据在缓存和数据库里面没查到,导致后续大量同类的请求直达数据库,形成了穿透现象。
解决方案:添加布隆过滤器、将查询到的空值存入缓存中
string、list、hash、set、zset。
redis一般都是用在linux系统下的,客户端没啥大用吧,这个不用记了。
客户端的知识,没啥大用,不用记了。
合理设置缓存的过期时间;在更新、删除、新增数据时同步更新redis。
rdb和aof。
rdb:指定的时间间隔对你的数据进行快照存储。(数据存在.rdb文件中)
aof:每收到一个写命令就通过write函数写到文件中(io操作)
使用watch监控对象,multi开启事务,exec执行事务。
redis分布式锁不能解决锁的超时问题,一旦程序的运行超出了锁的超时时间就会出问题。
之前没接触过,面试问到直接说不会。
一共有六个,太多了记不住,面试问的话就说从数据集中淘汰使用次数少的数据或者随机淘汰数据。
这个东西随便说上个就行,不至于问到了一个说不上来很尴尬。
比如:
性能问题:主从复制的复制速度和主机从机连接的稳定性。
解决方案:让主机和从机在同一局域网下。
补:redis的基本数据类型有哪些?特殊数据类型有哪些?
基本数据类型有五个,特殊数据类型有三个。
基本数据类型是string、list、hash、set、zset。
特殊数据类型是geospatial、hyperloglog
geospatial可以存储经纬度、获取存储的两经纬度之间距离和附近有哪些经纬度及城市。
hyperloglog可以统计网站从uv和dav,获取不重复基数的数量,但是会有误差。
补:redis怎么实现乐观锁?
通过watch监察某对象,然后multi开启事务,最后exec执行事务。
补:说一说redis主从复制?
redis主从复制,读写分离。一主二从或多从+哨兵集群,主机只负责写,从机只负责读,一旦主机宕机了,哨兵们就会投票选举新的主机。
补:说一说缓存穿透、缓存击穿和缓存雪崩?
缓存穿透(查不到):大量请求在缓存查不到,并且去数据库查询时也查不到,因此会导致接下来类似的请求直达数据库,形成了缓存穿透。
解决方案是:在缓存前添加布隆过滤器、将查询返回的值设为空值存入缓存中。
缓存击穿(大量请求、key失效):有大量请求持续请求某一点,此时key失效,会直接击穿缓存让大量请求直达数据库。
解决方案:设置热点数据永不过期,数据库加分布式锁
缓存雪崩(所有缓存同时失效):某一时间端,缓存服务器宕机,导致所有缓存失效,所有请求直达数据库,出现雪崩现象。
解决方案:增加缓存服务器的个数,降流限级(加分布式锁),数据预热(提前加载数据到缓存,将数据过期时间错开)