Java面试——Redis

1、redis简介
Redis是一个使用 C 语言编写的、开源的高性能非关系型(NoSQL)数据库。

Redis 为键值对数据库,键的类型只能为字符串,值支持五种数据类型:字符串、列表(link lists)、集合(sets)、散列表(hash tables)、有序集合(sorted sets)。

与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB(键值对数据库)。
Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

1.1、Hash tables类型的项目使用实例
场景:以用户id为键,将用户加购物车商品(信息包含pid、商品数量)放入redis缓存;查看购物车时全部取出展示。
1)存:redisTemplate.opsForHash().put(userId, productId, productNumber);
2)只取全部的商品idList<String> pIdList = redisTemplate.opsForHash().values("userId");
3)取全部商品信息Map<String, int> map = redisTemplate.opsForHash().entries("userId");

存的时候只能一条一条数据存、相互直接没有练习,但是取的时候可以像从一张表中取出的一样,这就是非关系型数据库“非关系”的核心奥义。

2、Redis有哪些优缺点?

1)优点:

读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。

支持数据持久化,支持AOF和RDB两种持久化方式。

支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。

数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。

支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

2)缺点
我能想到的缺点只有:受物理内存的限制,redis不能用作海量数据的高性能读写,只适应于,在数据量较小场景下的操作和运算,有些局限。

3、为什么要用 Redis /为什么要用缓存?
为了追求“高性能”,和适应“高并发”场景。
redis读写的高性能前边已经多次提到了,这里不再赘述;
在实际应用中,有很多请求结果是固定的,把这些结果存入redis缓存,当请求再次过来,我们就可以操作缓存而不是再次访问数据库查询,利用缓存的高速读写,可以适应高并发场景。

4、redis在实际开发中的应用场景
1)缓存
将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。
2)分布式锁实现
在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。
3)计数器
可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的数据。

4、Redis 的持久化机制是什么?分别做一些说明
1)Redis持久化的原因:如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。
Redis 的数据存储在内存中,如果 linux 宕机或重启,又或者 Redis 崩溃或重启,所有的内存数据都会丢失,为解决这个问题,Redis 提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。

2)Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制,
RDB就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。RDB 保存了在某个时间点的数据集(全部数据),存储在一个二进制文件中,默认叫 dump.rdb。RDB 技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据;保存数据是在单独的进程中写文件,不影响 Redis 的正常使用;RDB 恢复数据时比其他 AOF 速度快。
AOF就是Redis每次接收到一条改变数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。

两种持久化机制的实现方式,都是在redis.conf 文件中做相应配置即可。

3)两种持久化方式的优缺点:
RDB恢复方便,恢复速度也快;但是会丢失一部分数据看,而且会分出一个进程,如果数据库数据量大、服务器cpu也比较弱的时候,可能每次备份数据就会比较慢,可能达到1s。
AOF是一个可以提供完整数据的保障方案;缺点是,AOF 文件会在操作过程中变得越来越大,而且其中很多记录对最终的结果是无用的。

可以同时使用两种持久化方案,redis默认会用aof以保证数据的完整性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值