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 和集群等多项功能。 1.下载Redis指定版本源码安装包压缩到当前目录。 解压缩Redis源码安装包。 建立一个redis目录软链接,指向解压包。 进入redis目录 编译 安装 对于使用docker的童靴来说就比较容易了。 docker pull redis 1.默认配置 : ./redis-server 2.运行启动: redis-server 加上要修改配置名和值(可以是多对),没有配置的将使用默认配置。 例如: redis-server ———port 7359 3.指定配置文件启动: ./redis-server /opt/redis/redis.conf redis目录下有一个redis.conf的模板配置。所以只需要复制模板配置然后修改即可。 一般来说大部分生产环境都会用指定配置文件的方式启动redis。 1.交互方式: 连接到redis后,后面执行的命令就可以通过交互方式实现了。 2.命令行方式: Kill -9 pid (粗暴,请不要使用,数据不仅不会持久化,还会造成缓存区等资源不能被优雅关闭) 可以用redis 的shutdown 命令,可以选择是否在关闭前持久化数据。 exists key del key 512MB 16 RDB、AOF、混合持久化。 RDB(Redis DataBase)持久化是把当前进程数据生成快照保存到硬盘的过程。 Tips:是以二进制的方式写入磁盘。 手动触发: save: 阻塞当前Redis服务器,直到RDB过程完成为止,如果数据比较大的话,会造成长时间的阻塞, 线上不建议。 bgsave:redis进程执行 fork操作创作子进程,持久化由子进程负责,完成后自动结束,阻塞只发生在 fork阶段,一半时间很短。 自动触发: save xsecends n: 表示在x秒内,至少有n个键发生变化,就会触发RDB持久化。也就是说满足了条件就会触发持久化。 flushall : 主从同步触发 一般来说生成环境不会用到,了解一下也有好处的。 AOF(append only file)为了解决rdb不能实时持久化的问题,aof来搞定。以独立的日志方式记录把每次命令记录到aof文件中。 命令行方式: 实时生效,但重启后失效。 配置文件:需要重启生效,重启后依然生效。 1.所有写入命令追加到aof_buf缓冲区。 2.AOF缓冲区根据对应的策略向硬盘做同步操作。 3.随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。 4.当redis服务器重启时,可以加载AOF文件进行数据恢复。 Redis使用单线程响应命令,如果每次写入文件命令都直接追加到硬盘,性能就会取决于硬盘的负载。如果使用缓冲区,redis提供多种缓冲区策略,在性能和安全性方面做出平衡。 自动触发:满足设置的策略和满足重写触发。 策略:(在配置文件中配置) 手动触发:(执行命令) 一般来说我们的线上都会采取混合持久化。redis4.0以后添加了新的混合持久化方式。 优点: 缺点: 官方推荐的有3种:Jedis、Redisson和lettuce。 一般来说用的比较多的有:Jedis|Redisson。 Jedis:更轻量、简介、不支持读写分离需要我们来实现,文档比较少。API提供了比较全面的Redis命令的支持。 Redisson:基于Netty实现,性能高,支持异步请求。提供了很多分布式相关操作服务。高级功能能比较多,文档也比较丰富,但实用上复杂度也相对高。和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。 事务提供了一种将多个命令请求打包,一次性、按顺序的执行多个命令的机制。并且在事务执行期间,服务器不会中断事务而改去执行其他客户端命令请求,它会 设置key的生存时间为n秒 设置key的生存时间为nmilliseconds 设置过期时间为timestamp所指定的秒数时间戳 设置过期时间为timestamp毫秒级时间戳 定时删除:在设置的过期时间同时,创建一个定时器在键的过期时间来临时,立即执行队键的操作删除。 惰性删除:放任过期键不管,但每次从键空间中获取键时,都检查取得的键是否过期,如果过期就删除,如果没有就返回该键。 定期删除:每隔一段时间执行一次删除过期键操作,并通过先吃删除操作执行的时长和频率来减少删除操作对cpu时间的影响。 命令批处理技术,对命令进行组装,然后一次性执行多个命令。 可以有效的节省RTT(Round Trip Time 往返时间)。 经过测试验证: 获取最大内存: 设置最大内存: 命令设置: 当Redis所用内存达到maxmemory上限时,会出发相应的溢出策略。 1.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:布隆过滤器。 就是系统上线后,提前将相关数据加载到缓存系统,避免用户先查库,然后在缓存。 缓存雪崩:由于缓存层承载着大量请求,有效的保护了存储层,但如果存储层由于某些原因不能提供服务,存储层调用暴增,造成存储层宕机。 处理: 参考: 《Redis深度历险:核心原理和应用实践》 《Redis开发与运维》 《Redis设计与实现》 https://redis.io/ 百度百科 新人博主求三连,同时关注我的公众号【Java小咖秀】回复面试即可白嫖一份《Java全级别工程狮面试题.pdf》 持续更新,坚持✊✊✊
1.Redis是什么?
2.Redis特性?
3.Redis合适的应用场景?
4.除了Redis你还知道哪些NoSQL数据库?
5.Redis和Memcache区别?
6.Redis的有几种数据类型?
7.Redis有哪些高级功能?
8.安装过Redis吗,简单说下步骤?
9.redis几个比较主要的可执行文件?分别是?
10.启动Redis的几种方式?
11.Redis配置需要自己写?如何配置?
12.Redis客户端命令执行的方式?
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6379 get value
13.如何停止redis服务?
redis-cli shutdown nosave|save
14.如何查看当前键是否存在?
15.如何删除数据?
16.redis为什么快?单线程?
17.字符串最大不能超过多少?
18.redis默认分多少个数据库?
19.redis持久化的几种方式?
20.RDB持久化?
21.RDB的持久化是如何触发的?
22.RDB的优点?
23.RDB的缺点?
24.如何禁用持久化?
config set save ""
25.AOF持久化?
26.如何查询AOF是否开启?
config get appendonly
27.如何开启AOF?
config set appendonly
appendonly yes
28.AOF工作流程?
29.为什么AOF要先把命令追加到缓存区(aof_buf)中?
30.AOF持久化如何触发的?
bgrewriteaof
31.AOF优点?
32.AOF缺点?
33.混合持久化?优缺点?
34.Redis的Java客户端官方推荐?实际选择?
35.Redis事务?
36.Redis事务开始到结束的几个阶段?
37.Redis中key的过期操作?
expire key nseconds
pxpire key milliseconds
expireat key timespamp
pexpireat key millisecondsTimestamp
38.Redis过期键删除策略?
39.Pipeline是什么?为什么要它?
40.如何获取当前最大内存?如何动态设置?
config get maxmemory
config set maxmemory 1GB
41.Redis内存溢出控制?
42.Redis内存溢出策略?
43.Redis高可用方案?
44.Redis集群方案?
45.Redis Cluster槽范围?
46.Redis锁实现思路?
47.什么是布隆过滤器?
48.什么是缓存穿透?处理问题?
49.什么是缓存预热?
50.什么是缓存雪崩?处理问题?
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算