首页 > 数据库 >redis简述

redis简述

时间:2022-08-25 22:13:00浏览次数:127  
标签:缓存 过期 redis 数据库 Redis 简述 key

redis是什么?

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

redis的优点:

1、本质上是一个 Key-Value 类型的内存数据库,很像memcached

2、整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存

3、因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB

4、Redis最大的魅力是支持保存多种数据结构(string,list,set,hash,sortedset),此外单个 value 的最大限制是 1GB,不像memcached只能保存 1MB 的数据

5、Redis也可以对存入的 Key-Value 设置 expire 时间,因此也可以被当作一个功能加强版的memcached 来用

缺点:

1、Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

Redis默认支持16个数据库,

可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用select命令更换数据库。

Redis支持多个数据库,并且每个数据库是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念
端口:6379

缓存穿透

概述:指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。(redis查询不到数据库,出现很多非正常的url访问---黑客攻击)
现象:应用服务器压力变大, redis命中率降低 ,一直都是在查询数据库

解决方案:

1、查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短

2、布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对DB的查询

3、设置可访问的白名单

4、进行实时的监控

缓存击穿

概述:对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。(redis的某个key过期了,并大量访问这个key)
现象:数据库访问瞬时增加, redis里面没有出现大量key过期 , redis正常运行

解决方案:

1、使用互斥锁:当缓存失效时,不立即去load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓存,否则重试get缓存的方法

2、永远不过期:不要对这个key设置过期时间

3、预先设置热门的数据

缓存雪崩

概述:设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB 瞬时压力过重雪崩。与缓存击穿的区别:雪崩是很多key,击穿是某一个key缓存。(大量的key同时过期)
现象:数据库的压力变大服务器崩溃 --雪崩效应对底层的系统冲击非常大

解决方案:

1.构建多级架构(nginx缓存+ redis缓存 + 其它的缓存)
2.使用锁或者队列(避免大量的线程堆数据库进行一次性读写)
3.设置过期标志,更新缓存
4.将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

标签:缓存,过期,redis,数据库,Redis,简述,key
From: https://www.cnblogs.com/ychptz/p/16625855.html

相关文章

  • 01 Redis 三种搭建模式:主从模式-哨兵模式-高可用集群模式
    一、主从模式用域名指定主节点,当主节点宕机,改域名指向从节点缺点不知道什么时候挂掉,丢失数据,需要人工介入,运维24h待命 二、哨兵模式比主从模式,主要多了个哨兵,能自动......
  • go-redis和redigo连接池的区别
    go-redis是自动管理,类似go/sql包的方式,在真正执行的时候从连接池取一个连接,执行完毕后放回去,对调用者透明。调用者如果手动关闭连接,连接不能被复用,表现上看就是redis服务器......
  • redis删除缓存时遇到的问题
    一、redis查询key的方式redis常用两种方式用于key的精确/模糊匹配 1.KEYSpattern keyspattern用于匹配pattern所有key,会返回当前库里所有匹配上......
  • 数据篇(MongoDB+ElasticSearch+Minio+TiDB+MySQL+Redis)
    一. 简介1. MongoDB  2. ElasticSearch  3. Minio   4. TiDB  5. MySQL   6. Redis         二. 目录  ......
  • redis 数据备份与恢复
    redis数据备份与恢复RedisSAVE命令用于创建当前数据库的备份redis有两种备份机制AOF:每次执行命令,都会把命令记录下来,存放到aof文件里,恢复的时候,相当于让redis把这些......
  • redis 慢查询
    redis慢查询慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程在慢查询的定义中,统计比较慢的时间段指的是命令执行这个步骤......
  • 项目日志redis-Reconnected to ...的问题
    1:问题描述项目的后台日志一直有如下日志,而且非常多,一会儿就是一大片2022-08-2010:51:21.241INFO6---[xecutorLoop-1-2]i.l.c.p.ConnectionWatchdog......
  • redis基础知识
    1、redisjedis客户端pipeline中可以传入function或consumer,里面可以写多条语句2、redis客户端setnx:key不存在时才set,存在时则忽略3、redis数据类型:hash数据类型:即键......
  • php代码实现redis连接池
    通常情况下,当我们需要做redis操作时,会创建一个连接,并基于这个连接进行redis操作,操作完成后,释放连接,一般情况下,这是没问题的,但当并发量比较高的时候,频繁的......
  • PHP代码连接Redis,含Redis密码验证、指定某一Redis数据库
    <?php$redis=newRedis();$redis->connect('127.0.0.1',6379);//连接Redis$redis->auth('mypasswords123sdfeak');//密码验证$redis->select(2);//选择......