Java开发者必知必会的50个Redis知识点,面试/学习都无所畏惧
2021-01-07 00:29
标签:second 交互 推荐 两种 源代码 redis高可用 最新 需要 命令行 Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都有必要掌握。 Redis是一个开放源代码(BSD许可)的内存中数据结构存储,可用作数据库,缓存和消息代理,是一个基于键值对的NoSQl数据库。 MongoDB、MemcacheDB、Cassandra、CouchDB、Hypertable、Leveldb。 支持的存储类型不同,memcached只支持简单的k/v结构。redis支持更多类型的存储结构类型(详见问题6)。 memcached数据不可恢复,redis则可以把数据持久化到磁盘上。 新版本的redis直接自己构建了VM 机制 ,一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 redis当物理内存用完时,可以将很久没用到的value交换到磁盘。 基础:字符串(String)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)。 还有HyperLogLog、流、地理坐标等。 消息队列、自动过期删除、事务、数据持久化、分布式锁、附近的人、慢查询分析、Sentinel 和集群等多项功能。 下载Redis指定版本源码安装包压缩到当前目录。 1.默认配置 : 2.运行启动: redis-server 加上要修改配置名和值(可以是多对),没有配置的将使用默认配置。 例如: 3.指定配置文件启动: redis目录下有一个redis.conf的模板配置。所以只需要复制模板配置然后修改即可。 一般来说大部分生产环境都会用指定配置文件的方式启动redis。 1.交互方式: 连接到redis后,后面执行的命令就可以通过交互方式实现了。 2.命令行方式: Kill -9 pid (粗暴,请不要使用,数据不仅不会持久化,还会造成缓存区等资源不能被优雅关闭) 可以用redis 的shutdown 命令,可以选择是否在关闭前持久化数据。 512MB 16 RDB、AOF、混合持久化。 RDB(Redis DataBase)持久化是把当前进程数据生成快照保存到硬盘的过程。 Tips:是以二进制的方式写入磁盘。 手动触发: 自动触发: 一般来说生成环境不会用到,了解一下也有好处的。 AOF(append only file)为了解决rdb不能实时持久化的问题,aof来搞定。以独立的日志方式记录把每次命令记录到aof文件中。 命令行方式: 实时生效,但重启后失效。 配置文件:需要重启生效,重启后依然生效。 Redis使用单线程响应命令,如果每次写入文件命令都直接追加到硬盘,性能就会取决于硬盘的负载。如果使用缓冲区,redis提供多种缓冲区策略,在性能和安全性方面做出平衡。 自动触发:满足设置的策略和满足重写触发。 策略:(在配置文件中配置) 手动触发:(执行命令) 一般来说我们的线上都会采取混合持久化。redis4.0以后添加了新的混合持久化方式。 优点: 缺点: 官方推荐的有3种:Jedis、Redisson和lettuce。 一般来说用的比较多的有:Jedis|Redisson。 Jedis:更轻量、简介、不支持读写分离需要我们来实现,文档比较少。API提供了比较全面的Redis命令的支持。 Redisson:基于Netty实现,性能高,支持异步请求。提供了很多分布式相关操作服务。高级功能能比较多,文档也比较丰富,但实用上复杂度也相对高。和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。 事务提供了一种将多个命令请求打包,一次性、按顺序的执行多个命令的机制。并且在事务执行期间,服务器不会中断事务而改去执行其他客户端命令请求,它会 设置key的生存时间为n秒 设置key的生存时间为nmilliseconds 设置过期时间为timestamp所指定的秒数时间戳 设置过期时间为timestamp毫秒级时间戳 命令批处理技术,对命令进行组装,然后一次性执行多个命令。 可以有效的节省RTT(Round Trip Time 往返时间)。 经过测试验证: 获取最大内存: 设置最大内存: 命令设置: 当Redis所用内存达到maxmemory上限时,会出发相应的溢出策略。 noeviction(默认策略):拒绝所有写入操作并返回客户端错误信息(error) OOM command not allowed when used memory,只响应读操作。 Redis Sentinel(哨兵)能自动完成故障发现和转移。 Twemproxy、Redis Cluster、Codis。 0~16383 setnx (set if not exists),如果创建成功则表示获取到锁。 setnx lock true 创建锁 del lock 释放锁 如果中途崩溃,无法释放锁? 此时需要考虑到超时时间的问题。比如 :expire lock 300 由于命令是非原子的,所以还是会死锁,如何解决? Redis 支持 set 并设置超时时间的功能。 比如: set lock true ex 30 nx 是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 Tips:当判断一定存在时,可能会误判,当判断不存在时,就一定不存在。 缓存穿透:缓存层不命中,存储层不命中。 处理方式1:缓存空对象,不过此时会占用更多内存空间,所以根据大家业务特性去设置超时时间来控制内存占用的问题。 处理方式2:布隆过滤器。 就是系统上线后,提前将相关数据加载到缓存系统,避免用户先查库,然后在缓存。 缓存雪崩:由于缓存层承载着大量请求,有效的保护了存储层,但如果存储层由于某些原因不能提供服务,存储层调用暴增,造成存储层宕机。 处理: Java开发者必知必会的50个Redis知识点,面试/学习都无所畏惧 标签:second 交互 推荐 两种 源代码 redis高可用 最新 需要 命令行 原文地址:https://blog.51cto.com/14799494/2498979关于"高并发系统设计"看这篇就够了,阿里、百度、美团都在用
1.Redis是什么?
2.Redis特性?
3.Redis合适的应用场景?
4.除了Redis你还知道哪些NoSQL数据库?
5.Redis和Memcache区别?
6.Redis的有几种数据类型?
7.Redis有哪些高级功能?
8.安装过Redis吗,简单说下步骤?
9.redis几个比较主要的可执行文件?分别是?

10.启动Redis的几种方式?
./redis-serverredis-server ———port 7359./redis-server /opt/redis/redis.conf11.Redis配置需要自己写?如何配置?
12.Redis客户端命令执行的方式?
redis-cli -h 127.0.0.1 -p 6379redis-cli -h 127.0.0.1 -p 6379 get value13.如何停止redis服务?
redis-cli shutdown nosave|save14.如何查看当前键是否存在?
exists key15.如何删除数据?
del key16.redis为什么快?单线程?
17.字符串最大不能超过多少?
18.redis默认分多少个数据库?
19.redis持久化的几种方式?
20.RDB持久化?
21.RDB的持久化是如何触发的?
22.RDB的优点?
23.RDB的缺点?
24.如何禁用持久化?
config set save ""25.AOF持久化?
26.如何查询AOF是否开启?
config get appendonly27.如何开启AOF?
config set appendonlyappendonly yes28.AOF工作流程?
29.为什么AOF要先把命令追加到缓存区(aof_buf)中?
30.AOF持久化如何触发的?

bgrewriteaof31.AOF优点?
32.AOF缺点?
33.混合持久化?优缺点?
34.Redis的Java客户端官方推荐?实际选择?
35.Redis事务?
36.Redis事务开始到结束的几个阶段?
37.Redis中key的过期操作?
expire key nsecondspxpire key millisecondsexpireat key timespamppexpireat key millisecondsTimestamp38.Redis过期键删除策略?
39.Pipeline是什么?为什么要它?
40.如何获取当前最大内存?如何动态设置?
config get maxmemoryconfig set maxmemory 1GB41.Redis内存溢出控制?
42.Redis内存溢出策略?
43.Redis高可用方案?
44.Redis集群方案?
45.Redis Cluster槽范围?
46.Redis锁实现思路?
47.什么是布隆过滤器?
48.什么是缓存穿透?处理问题?
49.什么是缓存预热?
50.什么是缓存雪崩?处理问题?
上一篇:spring cloud
下一篇:Java中方法的重载与重写
文章标题:Java开发者必知必会的50个Redis知识点,面试/学习都无所畏惧
文章链接:http://soscw.com/index.php/essay/40588.html