java从入门到熟练servlet到ssm的面试参考记录

Redis五种数据类型

Redis五种数据类型
1.String:key-value(做缓存)
常用命令:
get /set /incr 加一/decr 减

2.Hash:key-fields-values(做缓存)
(相当于一个 key 对应一个 map,map 中还有 key-value)
常用命令:
hset:从 hash 中添加内容/hget:从 hash 中取内容
hset hash1 field3 3 /hget hash1 field3

3.List:有顺序可重复
常用命令:
添加:lpush/rpush/
查看:lrange list1 0 -1/
取删:lpop/ rpop

4.Set:无顺序,不能重复
常用命令:
添加:sadd set1 a b c c c d
查看:smembers set1
删除:srem set1 a

5.SortedSet(zset):有顺序,不能重复
常用命令:
分数添加:zadd zset1 2 a 5 b 1 c 6 d
分数查看:zrange zset1 0 -1
删除:zrem zset1 a
反过来顺序查看:zrevrange zset1 0 -1
??? 颠倒顺序

Redis持久化
RDB 持久化(默认方式)
该机制是指在制定的时间间隔内将内存中的数据集快照写入磁盘。
优点: 1.只有一份 rdb 文件,可随时备份
2.比 AOF 文件小,加载效率高
3.只提供 fork 子进程,不阻塞主进程,IO 操作比较少
AOF 持久化
该机制将以日志的形式记录服务器所处理的每一个写操作,在 Redis 服务器启动之初会读取该文件来重新
构建数据库,以保证启动后数据库中的数据是完整的。
优点: 1.每次改动同步数据安全性好
2.APPEND 方式追加日志,不会对旧日志文件产生影响
无持久化
我们可以通过配置的方式禁用 Redis 服务器的持久化功能,这样我们就可以将 Redis 视为一个功能加强版
的 memcached 了
同时应用 AOF 和 RDB(推荐用) 用 AOF 来保证数据不丢失,作为恢复数据的第一选择;用 RDB 来做不同程度的冷备,在 AOF 文件都丢失
或损坏不可用的时候,可以使用 RDB 进行快速的数据恢复。

Redis的优缺点
Redis 的优点:
性能极高 – Redis 能支持超过 100K+ 每秒的读写频率。
丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 相比其它缓存,他有两种持久化机制,RDB 和 AOF,数据更安全。
Redis 的缺点:
是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较
小数据量的高性能操作和运算上

使用redis做异步队列,如何用,有什么缺点?
一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再
重试。
缺点:
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 rabbitmq 等。

什么是缓存穿透?怎么避免?什么是缓存雪崩?如何避免?
缓存穿透
一般的缓存系统,都是按照 key 去缓存查询,如果不存在对应的 value,就应该去后端系统查找(比如 DB)。
一些恶意的请求会故意查询不存在的 key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

如何避免?
1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该 key 对应的数据 insert 了之后清理缓存。
2:对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中,查询时通过该 bitmap
过滤。

缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。
导致系统崩溃。

如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个 key 只允许一个线程查
询数据和写缓存,其他线程等待。
2:做二级缓存,A1 为原始缓存,A2 为拷贝缓存,A1 失效时,可以访问 A2,A1 缓存失效时间设置为短期,
A2 设置为长期
3:不同的 key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

如何提高缓存利用率?
做数据的缓存时,因为数据量很大,而且缓存是把数据保存到内存中,此时不可能把所有的数据都放到缓存中。
所以需要设置数据缓存的有效期,当用户访问到非热点数据后,此数据放到缓存中,当缓存到期后就从缓
存中删除,而且长时间不会添加到缓存。而热点数据一旦从缓存中删除会马上又添加到缓存。这样可以提
高缓存的利用率,同时也减轻了数据库的压力。

在你的项目中如何实现缓存同步?
缓存同步其实就是当缓存的信息发生变化,也就是对后台对缓存的
数据进行增、删、改操作后,数据库中的数据发生了变化同时要把缓存中的数据对应删除即可。当页面再
次请求数据时,缓存中不能命中就会从数据库中查询并且添加到缓存中,即实现了缓存同步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值