栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库相关

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库相关

Redis 介绍一下redis

Redis 是⼀个使⽤ C 语⾔开发的非关系型数据库,数据存储在内存当中,是一个内存数据库,读写速度非常快,一般用于做缓存

redis常见数据类型
  • string:set、get、del、incr

  • list:本质是一个双向链表,rpush,lpop,lpush,rpop,lrange

  • hash

  • set

  • sorted set:增加了权重参数score,使得集合元素按score进行有序排序
Redis 给缓存数据设置过期时间有啥⽤

​ redis数据存在内存当中,如果缓存中的所有数据都是⼀直保存的话,会有内存溢出的风险,并且有些数据只需要存在一段时间,如短信验证码、token

java exp key 60 # 数据在 60s 后过期

缓存数据的处理流程是怎样的?

缓存中有就从缓存中拿,缓存中没有就从数据库中拿,然后放入缓存

Redis是如何判断数据是否过期的呢

​ Redis 通过⼀个叫做过期字典(类似hash表)来保存数据过期的时间。过期字典的键指向数据库中的某个key键,值表示键的过期时间

  • 过期字典是存储在redisDb这个结构⾥的:

```c++ typedef struct redisDb { ...

dict *dict; //数据库键空间,保存着数据库中所有键值对 dict *expires // 过期字典,保存着键的过期时间 ... } redisDb; ```

过期的数据的删除策略了解么
  • volatile-lru(least recently used):从已设置过期时间的数据中挑选最近最少使⽤的数据淘汰
  • volatile-ttl:从已设置过期时间的数据中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据中任意选择数据淘汰
  • allkeys-lru(least recently used):在键空间中移除最近最少使⽤的 key(这个是最常⽤的)
  • allkeys-random:从数据集中任意选择数据淘汰
  • no-eviction:当内存不⾜时,新写⼊操作会 报错
持久化

Redis 提供了两种持久化机制:RDB 和 AOF

RDB

在指定的时间间隔内将内存中的数据集快照写入磁盘,在配置文件中用save命令可以配置 [(save 60 900) 60秒内有900个key发生变化],会另外创建一个fork线程来持久化,不会影响主进程的

AOF

以独立日志的方式记录每次写命令,并在 Redis 重启时重新执行 AOF 文件中的命令以达到恢复数据的目的。AOF重写,只保留最后一次的修改记录,防止文件过大

redis事务

把命令放在multi和exec之间,里面有错误就会报错,其他命令也不会执行

缓存穿透

​ 简单点就是⼤量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本 没有经过缓存这⼀层

解决办法:

  • 做好参数校验
缓存雪崩

缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求

热点缓存失效解决方案:

  • 设置不同的失效时间⽐如随机设置缓存的失效时间
  • 缓存永不失效
如何保证缓存和数据库数据的⼀致性
  • 定时任务
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号