在哪里可以接网站开发的外包,wordpress代码恢复旧编辑器,做外贸网站注意,如何入侵网站服务器1、概述#xff1a; 1. 非关系型数据库 2. 是分布式缓存数据库 3. 使用 key -value结构存储
2、作用#xff1a; 用作缓存降低数据库压力#xff0c;提高性能#xff1b;可以用作消息队列#xff08;削峰、解耦、异步调用#xff09;
3、基础语法#xff1a;
基础命令…1、概述 1. 非关系型数据库 2. 是分布式缓存数据库 3. 使用 key -value结构存储
2、作用 用作缓存降低数据库压力提高性能可以用作消息队列削峰、解耦、异步调用
3、基础语法
基础命令
连接服务端
redis-cli -h 127.0.0.1 -p 6379
切换库
select 库名0-15默认0设置有效时长
expire key seconds
退出redis
exit
关闭redis服务
shutdown
4、存储结构
stringget、set、del hash list set zset
5、redis 是什么都有哪些使用场景
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库并提供多种语言的API。 Redis 使用场景 数据高并发的读写 海量数据的读写 对扩展性要求高的数据
6、redis 有哪些功能
数据缓存功能分布式锁的功能 支持数据持久化 支持事务 支持消息队列
7、redis 和 memecache 有什么区别
memcached所有的值均是简单的字符串redis作为其替代者支持更为丰富的数据类型 redis的速度比memcached快很多 redis可以持久化其数据
8、redis 为什么是单线程的
因为 cpu 不是 Redis 的瓶颈Redis 的瓶颈最有可能是机器内存或者网络带宽。既然单线程容易实现而且 cpu 又不会成为瓶颈那就顺理成章地采用单线程的方案了。 关于 Redis 的性能官方网站也有普通笔记本轻松处理每秒几十万的请求。 而且单线程并不代表就慢 nginx 和 nodejs 也都是高性能单线程的代表。
9、什么是缓存穿透怎么解决
缓存穿透指查询一个一定不存在的数据由于缓存是不命中时需要从数据库查询查不到数据则不写入缓存这将导致这个不存在的数据每次请求都要到数据库去查询造成缓存穿透。 解决方案最简单粗暴的方法如果一个查询返回的数据为空不管是数据不存在还是系统故障我们就把这个空结果进行缓存但它的过期时间会很短最长不超过五分钟。
10、redis 支持的 java 客户端都有哪些
Redisson、Jedis、lettuce等等官方推荐使用Redisson。
11、怎么保证缓存和数据库数据的一致性
合理设置缓存的过期时间。 新增、更改、删除数据库操作时同步更新 Redis可以使用事物机制来保证数据的一致性。
12、redis 持久化有几种方式
Redis 的持久化有两种方式或者说有两种策略 RDBRedis Database指定的时间间隔能对你的数据进行快照存储。 AOFAppend Only File每一个收到的写命令都通过write函数追加到文件中。
13、redis 怎么实现分布式锁
Redis 分布式锁其实就是在系统里面占一个“坑”其他程序也要占“坑”的时候占用成功了就可以继续执行失败了就只能放弃或稍后重试。 占坑一般使用 setnx(set if not exists)指令只允许被一个程序占有使用完调用 del 释放锁。
14、redis 分布式锁有什么缺陷
Redis 分布式锁不能解决超时的问题分布式锁有一个超时时间程序的执行如果超出了锁的超时时间就会出现问题。
15、redis 如何做内存优化
尽可能使用散列表hashes散列表是说散列表里面存储的数少使用的内存非常小所以你应该尽可能的将你的数据模型抽象到一个散列表里面。 比如你的web系统中有一个用户对象不要为这个用户的名称姓氏邮箱密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。
16、redis 淘汰策略有哪些
volatile-lru
从已设置过期时间的数据集server. db[i]. expires中挑选最近最少使用的数据淘汰。volatile-ttl
从已设置过期时间的数据集server. db[i]. expires中挑选将要过期的数据淘汰。volatile-random
从已设置过期时间的数据集server. db[i]. expires中任意选择数据淘汰。allkeys-lru
从数据集server. db[i]. dict中挑选最近最少使用的数据淘汰。allkeys-random
从数据集server. db[i]. dict中任意选择数据淘汰。no-enviction驱逐
禁止驱逐数据。17、redis 常见的性能问题有哪些该如何解决
主服务器写内存快照会阻塞主线程的工作当快照比较大时对性能影响是非常大的会间断性暂停服务所以主服务器最好不要写内存快照。 Redis 主从复制的性能问题为了主从复制的速度和连接的稳定性主从库最好在同一个局域网内。
18、Redis 如何设置密码及验证密码
设置密码config set requirepass 123456
授权密码auth 12345619、说说 Redis 哈希槽的概念
Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念Redis 集群有 16384 个哈希槽每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽集群的每个节点负责一部分 hash 槽。
20、Redis 集群的主从复制模型是怎样的
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用所以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.
21、Redis 集群会有写操作丢失吗为什么
Redis 并不能保证数据的强一致性这意味这在实际中集群在特定的条件下可能会丢失写操作。
22、Redis 集群之间是如何复制的
异步复制
23、Redis 集群最大节点个数是多少
16384 个。
24、Redis 集群如何选择数据库
Redis 集群目前无法做数据库选择默认在 0 数据库。
25、怎么测试 Redis 的连通性
ping
26、Redis 中的管道有什么用
一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器而不用等待回复最后在一个步骤中读取该答复。 这就是管道pipelining是一种几十年来广泛使用的技术。例如许多 POP3 协议已经实现支持这个功能大大加快了从服务器下载新邮件的过程。
27、怎么理解 Redis 事务 事务是一个单独的隔离操作事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作事务中的命令要么全部被执行要么全部都不执行。
28、Redis 事务相关的命令有哪几个
MULTI、EXEC、DISCARD、WATCH
29、Redis key 的过期时间和永久有效分别怎么设置
EXPIRE 和 PERSIST 命令。
30、Redis 如何做内存优化
尽可能使用散列表hashes散列表是说散列表里面存储的数少使用的内存非常小所以你应该尽可能的将你的数据模型抽象到一个散列表里面。 比如你的 web 系统中有一个用户对象不要为这个用户的名称姓氏邮箱密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面。
31、Redis 回收进程如何工作的
一个客户端运行了新的命令添加了新的数据。 Redi 检查内存使用情况如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。 一个新的命令被执行等等。 所以我们不断地穿越内存限制的边界通过不断达到边界然后不断地回收回到边界以下。 如果一个命令的结果导致大量内存被使用例如很大的集合的交集保存到一个新的键不用多久内存限制就会被这个内存使用量超越。
32、缓存穿透、缓存击穿、缓存雪崩解决方案
缓存穿透 指查询一个一定不存在的数据如果从存储层查不到数据则不写入缓存这将导致这个不存在的数据每次请求都要到 DB 去查询可能导致 DB 挂掉。 解决方案1.查询返回的数据为空仍把这个空结果进行缓存但过期时间会比较短2.布隆过滤器将所有可能存在的数据哈希到一个足够大的 bitmap 中一个一定不存在的数据会被这个 bitmap 拦截掉从而避免了对 DB 的查询。 缓存击穿 对于设置了过期时间的 key缓存在某个时间点过期的时候恰好这时间点对这个 Key 有大量的并发请求过来这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存这个时候大并发的请求可能会瞬间把 DB 压垮。 解决方案1.使用互斥锁当缓存失效时不立即去 load db先使用如 Redis 的 setnx 去设置一个互斥锁当操作成功返回时再进行 load db 的操作并回设缓存否则重试 get 缓存的方法。2.永远不过期物理不过期但逻辑过期后台异步线程去刷新。 缓存雪崩 设置缓存时采用了相同的过期时间导致缓存在某一时刻同时失效请求全部转发到 DBDB 瞬时压力过重雪崩。与缓存击穿的区别雪崩是很多 key击穿是某一个key 缓存。 解决方案将缓存失效时间分散开比如可以在原有的失效时间基础上增加一个随机值比如 1-5 分钟随机这样每一个缓存的过期时间的重复率就会降低就很难引发集体失效的事件。
33、在选择缓存时什么时候选择 redis什么时候选择 memcached
选择 redis 的情况 1、复杂数据结构value 的数据是哈希列表集合有序集合等这种情况下会选择redis,因为 memcache 无法满足这些数据结构最典型的的使用场景是用户订单列表用户消息帖子评论等。 2、需要进行数据的持久化功能但是注意不要把 redis 当成数据库使用如果 redis挂了内存能够快速恢复热数据不会将压力瞬间压在数据库上没有 cache 预热的过程。对于只读和数据一致性要求不高的场景可以采用持久化存储 3、高可用redis 支持集群可以实现主动复制读写分离而对于 memcache 如果想要实现高可用需要进行二次开发。 4、存储的内容比较大memcache 存储的 value 最大为 1M。选择 memcache 的场景 1、纯 KV,数据量非常大的业务使用 memcache 更合适原因是 a)memcache 的内存分配采用的是预分配内存池的管理方式能够省去内存分配的时间redis 是临时申请空间可能导致碎片化。 b)虚拟内存使用memcache 将所有的数据存储在物理内存里redis 有自己的 vm 机制理论上能够存储比物理内存更多的数据当数据超量时引发 swap,把冷数据刷新到磁盘上从这点上数据量大时memcache 更快 c)网络模型memcache 使用非阻塞的 IO 复用模型redis 也是使用非阻塞的 IO 复用模型但是 redis 还提供了一些非 KV 存储之外的排序聚合功能复杂的 CPU 计算会阻塞整个 IO 调度从这点上由于 redis 提供的功能较多memcache 更快些 d) 线程模型memcache 使用多线程主线程监听worker 子线程接受请求执行读写这个过程可能存在锁冲突。redis 使用的单线程虽然无锁冲突但是难以利用多核的特性提升吞吐量。
34、缓存与数据库不一致怎么办
假设采用的主存分离读写分离的数据库 如果一个线程 A 先删除缓存数据然后将数据写入到主库当中这个时候主库和从库同步没有完成线程 B 从缓存当中读取数据失败从从库当中读取到旧数据然后更新至缓存这个时候缓存当中的就是旧的数据。 发生上述不一致的原因在于主从库数据不一致问题加入了缓存之后主从不一致的时间被拉长了 处理思路在从库有数据更新之后将缓存当中的数据也同时进行更新即当从库发生了 数据更新之后向缓存发出删除淘汰这段时间写入的旧数据。
35、主从数据库不一致如何解决
场景描述对于主从库读写分离如果主从库更新同步有时差就会导致主从库数据的不一致 1、忽略这个数据不一致在数据一致性要求不高的业务下未必需要时时一致性 2、强制读主库使用一个高可用的主库数据库读写都在主库添加一个缓存提升数据读取的性能。 3、选择性读主库添加一个缓存用来记录必须读主库的数据将哪个库哪个表哪个主键作为缓存的 key,设置缓存失效的时间为主从库同步的时间如果缓存当中有这个数据直接读取主库如果缓存当中没有这个主键就到对应的从库中读取。
36、Redis 常见的性能问题和解决方案
1、master 最好不要做持久化工作如 RDB 内存快照和 AOF 日志文件 2、如果数据比较重要某个 slave 开启 AOF 备份策略设置成每秒同步一次 3、为了主从复制的速度和连接的稳定性master 和 Slave 最好在一个局域网内 4、尽量避免在压力大得主库上增加从库 5、主从复制不要采用网状结构尽量是线性结构Master--Slave1----Slave2 ....
37、Redis 的数据淘汰策略有哪些
voltile-lru 从已经设置过期时间的数据集中挑选最近最少使用的数据淘汰
voltile-ttl 从已经设置过期时间的数据库集当中挑选将要过期的数据
voltile-random 从已经设置过期时间的数据集任意选择淘汰数据
allkeys-lru 从数据集中挑选最近最少使用的数据淘汰
allkeys-random 从数据集中任意选择淘汰的数据
no-eviction 禁止驱逐数据38、假如 Redis 里面有 1 亿个 key其中有 10w 个 key 是以某个固定的已知的前缀开头的如果将它们全部找出来
使用 keys 指令可以扫出指定模式的 key 列表。
39、对方接着追问如果这个 redis 正在给线上的业务提供服务那使用 keys 指令会有什么问题
这个时候你要回答 redis 关键的一个特性redis 的单线程的。keys 指令会导致线程阻塞一段时间线上服务会停顿直到指令执行完毕服务才能恢复。这个时候可以使用 scan 指令scan 指令可以无阻塞的提取出指定模式的 key 列表但是会有一定的重复概率在客户端做一次去重就可以了但是整体所花费的时间会比直接用 keys 指令长。
40、使用 Redis 做过异步队列吗是如何实现的
使用 list 类型保存数据信息rpush 生产消息lpop 消费消息当 lpop 没有消息时可以 sleep 一段时间然后再检查有没有信息如果不想 sleep 的话可以使用 blpop,在没有信息的时候会一直阻塞直到信息的到来。redis 可以通过 pub/sub 主题订阅模式实现一个生产者多个消费者当然也存在一定的缺点当消费者下线时生产的消息会丢失。
41、Redis 如何实现延时队列
使用 sortedset使用时间戳做 score, 消息内容作为 key,调用 zadd 来生产消息消费者使用 zrangbyscore 获取 n 秒之前的数据做轮询处理。