面试题之你对redis的认识

2023-11-19

这里是我自己看书对redis的总结:这次我们目标的Redis在java互联网项目网中的作用。

在传统的javaweb项目中,使用数据库进行存储数据,但是有一些致命的弊端。主要来自性能方面。由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般的管理系统上,由于不存在高并发,因此没有需要瞬间需要读/写大量书写数据的要求,这时候数据库的读写是没有问题的。但是在互联网中,往往存在大量数据的需求,比如抢票,发红包等等。或者是主页访问量瞬间较大的时候,一瞬间成千上万的请求的到来,需要系统在极短的时间内完成成千上万次的读写操作。这个数据库根本承受不来,容易造成数据库系统瘫痪,最终导致服务器宕机。

     为了克服这些功能,我们的javaweb就要引入nosql技术。Nosql也是一种数据库。他主要是一种基于内存的数据库,并提供一定的持久化功能Redis和MongoDB是当前使用最广泛的Nosal的技术。这里介绍的就是redis技术。他的性能十分优秀。可以支持每秒十几万次的读写操作,其性能远超数据库,并且支持集群,分布式,主从同步等配置。原则是无限扩展,让更多的数据存储在内存中,而更让我们感到欣慰的是,他还能支持一定的事务能力,还在高并发的场景下支持数据安全性和一致性。

    redis的鑫能优越主要来自3个方面

1.他是基于ANSI C语言编写的,接近于汇编语言的机器语言,运行速度十分快

2.他是基于内存的读写,速度自然比基于磁盘的读写的要快很多。

3.他只有6中数据类型,数据结构比较简单,因此规则比较少。

所以用好Reids对于java互联网项目的响应速度和性能是至关重要的。

 

Redis在javaWEB的应用

一般而言redis在javaweb应用中存在两个主要场景,

一个是缓存常用的数据   另一个就是需要高速读/写的场合使用它的急速写

缓存

在对数据库的读写操作中,现实的情况下读操作的次数比远超写操作,一般是1:9到3;7,所以读的可能系就比写的可能性还要多。当发送sql去数据库进行读取时,数据库就会去磁盘吧对应的数据索引回来,而索引磁盘是一个缓慢的过程,如果把数据直接放在放在运行在内存的redis的服务器上,纳闷我们就不需要读写磁盘了。而是去直接读写内存了,显然读取速度会快的多。并且会极大减轻数据库的压力。内存虽然高效但是空间有限,价格也比磁盘贵了不少。因此代价比较高哦,我们就要思考该存什么?

<1>业务数据常用吗?命中率高吗?如果命中率很低,就没有必要写入缓存。

<2>该业务数据是读操作多?还是写操作多,如果写操作多,频繁需要写入数据库,也卖油必要使用缓存。

<3>业务数据大小如何?如果要缓存几百兆的文件,回个缓存带来了很大的压力。有没有必要?

高速读写场合

当一个请求到达到服务器,只是把业务数据现在Redis读/写,而没有进行任何对数据库的操作,换句话说,系统仅仅是操作Redis缓存,而没有操作数据库,这个速度比操作数据库要快的多。从而达到高速响应的效果。但是一般缓存不能持久化,或者持久化的数据不太规范,因此需要把这些数据写入数据库,所以在一个请求操作完redis的读写完后,回去判断该高速读写的业务是否结束这个判断的条件就是秒杀商品的个数是否为0,红包是否为0,如果不成立,则不会操作数据库;如果成立,则触发事件将Redis缓存的数据以批量的新式一次性写入数据库,从而完成持久化的工作。

 

Redis集群中内置了16384个哈希槽,Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样的话每个key都会对应一个编号在0-16383之间的哈希槽,redis根据节点数量大致均等的就将哈希映射到不同的节点。

Redis集群么有使用一直hash,而是引入了哈希槽的概念。。

Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪一个槽,集合的每一个节点负责一部分hash槽,这种结构很容易添加或者删除节点。并且无论是添加或者删除修改某一个节点。都不会曹成集群不可用 的状态。

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试题之你对redis的认识 的相关文章

  • 大数据毕设项目 大数据旅游数据分析可视化系统 - python

    文章目录 0 前言 1 课题背景 2 数据处理 3 数据可视化工具 3 1 django框架介绍 3 2 ECharts 4 Django使用echarts进行可视化展示 mysql数据库 4 1 修改setting py连接mysql数据
  • PPT 生成整数序列字典序的r-组合算法

    生成整数序列字典序的r 组合算法 一 PPT效果展示 二 问题 2 1 简述 2 2 算法简述 2 3 例子 三 PPT实现 一 PPT效果展示 二 问题 2 1 简述 给定一个整数序列 1 2 3 n 输出其所有字典序的r 组合 注意事项
  • C# 参数按照ASCII码从小到大排序MD5加密

    region 1 获取参数GetSignParamSrc
  • c++汉诺塔蓝桥杯

    总时间限制 10000ms 单个测试点时间限制 1000ms 内存限制 262144kB 描述 小蓝很喜欢玩汉诺塔游戏 游戏中有三根柱子 开始时第一根柱子上有 n 个圆盘 从上到下圆盘的大小依次为 1 到 n 每次 可以将一个盘子从一根柱子
  • 网页引用Font Awesome图标

    方法一 demo html
  • 第二天:Struts2入门

    第一个Struts2入门案例 Struts2的下载与安装 源码下载地址 http struts apache org download cgi 源码目录结构说明 apps 框架本身提供一些案例 学习 docs 框架本身提供的文档 指南和AP
  • angular:ng build默认文件带hash值,可以防止cdn缓存导致用户文件不能刷新

    问题 如题 说明 cdn缓存了文件 如果是同一个名称文件 如果不手动清除cdn缓存 则用户获取的是旧的 而不是新的 因此如果前端打包在文件加上hash 这样文件有变动 用户会获取新文件
  • 自动驾驶数据闭环,要么被高估了,要么被低估了?

    在和身边的人沟通自动驾驶的数据闭环时 会碰到两类典型的人 第一类 当你给他讲数据闭环的时候 他的眼神是迷茫的 好像没有引起太多的重视和共鸣 甚至有人会反馈 嗯 这个没什么 我们以前干的差不多 第二类 他会觉得数据闭环 能解决一切问题 而且
  • mysql 新版本出现group by 语句不兼容问题

    原文地址 http www cnblogs com anstoner p 6414440 html 注 文中的方式 我只是用了修改sql mode 的方法 其它的未尝试 全文如下 目录 1 具体出错提示 1 1 1 查看sql mode 1
  • Java Web快速开发(1)Java 项目构建

    文章目录 Java 项目构建 1 Java 版本发展 2 集成开发环境 3 Java发布形式 1 扩展参数说明 2 JVM 内存回收机制 3 Java 程序分析调测工具 4 Maven Java 项目构建 1 Java 版本发展 EJB E
  • 流媒体之推流和拉流

    推流 将直播内容推送至服务器的过程 拉流 为服务器已有直播内容 用指定地址进行拉取的过程 什么是推流 推流 指的是把采集阶段封包好的内容传输到服务器的过程 其实就是将现场的视频信号传到网络的过程 推流 对网络要求比较高 如果网络不稳定 直播
  • QPixmap的深拷贝和浅拷贝

    在最近的项目中用到了QPixmap 涉及多线程操作QPixmap对象 为了简单 比如在线程1中构造了一个QPixmap对象 传入线程2 这时调用的函数为operator const QPixmap pixmap 对于不了解QPixmap类的
  • 静态分析基础技术

    静态分析基础技术 原文链接 https hvnt3r top 2019 01 静态分析基础技术 知识点 我觉得安全圈的思路都是差不多的 跟渗透测试一样 对一个恶意软件的分析也需要前期的信息收集阶段来帮助我们对目标有一个大致的了解和认识 方便
  • 使用mui button提交ajax请求后台失败的原因

    在input内输入单号 人工点击按钮触发事件ajax请求后台 一切正常 但是 如果在input内输入完单号 用安卓或苹果手机的软键盘回车键事件调用ajax请求后台 就会有问题 原因如下 mui提供的按钮默认是放在
  • 华为机试题97-记负均正

    描述 首先输入要输入的整数个数n 然后输入n个整数 输出为n个整数中负数的个数 和所有正整数的平均值 结果保留一位小数 0即不是正整数 也不是负数 不计入计算 如果没有正数 则平均值为0 数据范围 1 n 2000 输入的整数都满足 val
  • 配置本地docker与镜像并上传到服务器使用

    1 在本地创建基础容器 官网 1 卸载旧版本 如果有 sudo apt get remove docker docker engine docker io containerd runc 2 设置Docker的存储库并从中安装 更新包索引并
  • SQL优化技巧

    本文以Mysql数据库为例 总结数据库优化方法 一 数据库优化四个层面 Mysql数据库优化 可以从以下四个层面优化 硬件 系统配置 数据库表结构 sql语句及索引 优化效果 SQL语句及索引 gt 数据库表结构 gt 系统配置 gt 硬件
  • CentOS8 同步时间chrony ntpdate已无法使用

    CentOS8 同步时间chrony ntpdate已无法使用 在CentOS8中 已使用chrony替代ntp 首先安装chrony 使用dnf安装 dnf install y chrony 也可以用yum安装 yum install y
  • Linux权限、用户组、用户

    前提 这里以Centos7为例 首先进入 目录 并输入 ls l cd ls l 分析 根据上图我们拿其中一条来说 drwxr xr x 14 root root 3440 Aug 14 07 31 dev 第一个字母 d 代表这个文件的含
  • 俄罗斯担忧开发者无法访问开源代码,为什么开源如此重要?

    俄乌冲突背景下 俄国媒体发文称 世界第一开源软件平台GitHub正在考虑限制俄罗斯软件开发者访问开源软件源代码储存库 此外 数据库巨头 Oracle 也宣布已经暂停了在俄罗斯的所有业务 这些消息迅速刷屏 原因之一便是现在的 IT 世界已离不

随机推荐

  • Win10环境下配置VScode远程开发ssh-remote(免密登录)

    问题背景 在开发或者做实验的过程中 我们经常会用到远程服务器或者Github的项目 而我服务器上的项目只能在Jupyter Notebook上编写 或许可以在其他IDE上写 但我不知道 而我们喜欢用的IDE比如Pycharm 轻量级的VSc
  • C语言之指针知识大总结

    文章目录 一 地址 二 指针与指针变量 三 指针的作用 四 初学指针时常见的错误 五 通过调用函数修改主调函数中的值 六 指针与一维数组 七 使用函数操作一维数组 八 指针变量所占字节数 九 静态数组的缺陷 十 malloc函数 十一 动态
  • ElasticSearch 6.3版本(ES)查询人名关键字不拆词查询

    ElasticSearch 6 3版本 ES 查询关键字不拆词查询 类似mysql 的 like 语句 mysql的sql语法类似如下 采用大量like和locate语法 进行模糊查询 导致查询一个需要8秒多 通过ES优化后 总的查询在1秒
  • postman中进行SHA1或MD5签名

    大部分接口为了防御重放攻击 往往使用SHA1或者MD5对请求进行签名 例如 我们有如下请求 Request URL http xx xx xx xx nonce 123 timestamp 123 Body xxx xxx signatur
  • ESP8266(果云科技的开发板源码)

    ESP8266 果云科技的开发板源码 TOC 最近调试果云科技的老板子ESP8266开发板 比较老了 调试串口输入很麻烦 因为API函数很麻烦 源码已上传 请下载 下面是代码 File uart c Copyright 2013 2016
  • jxls Excel表格导出( 模板导出多个sheet)

    使用模板来导出excel表格 1 使用jxls core jar包来实现 jxls core不支持POI4以上的版本 1 1 maven
  • 在微服务项目中,Spring Security 比 Shiro 强在哪?

    Spring Security 和Shiro的区别
  • LDAP协议

    1 LDAP是Lightweight Directory Access Protocol的缩写 顾名思义 它是指轻量级目录访问协议 这个主要是相对另一目录访问协议X 500而言的 LDAP略去了x 500中许多不太常用的功能 且以TCP I
  • 程序的链接

    程序的链接是一个非常实际的问题 他建立在很实际的问题之上 不从程序员的角度去思考问题 则是从软件的角度去思考如何复用错综复杂的代码 因为 这个问题的本质是我们没有给底层的硬件一个完整的可按顺序执行的程序 我们在前几章虽然讨论了指令流的问题
  • 【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力n年 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 Vue3项目实
  • QT--SQLite

    QT数据库实例 QT Sqlite操作 转载于 http mobile 51cto com symbian 273444 htm 585532 tsina 1 51851 7e393678b940a4d55500bf3feae3d2e9 S
  • 时序分解

    时序分解 MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 MATLAB实现基于LMD局部均值分解的信号分解分量可视化 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 LMD局部均值分解 直接替换Exc
  • 思维模型:建立高品质思维的30种模型

    第一章 如何快速而全面地做出决策 思维模型1 关注 重要 任务 忽略 紧急 任务 用于区分真正的优先事项和冒牌货 重要任务和紧急任务区分开 把活动和需求分类 整理出最重要的任务 并找出为了实现这些重要任务需要采取哪些最关键的流程 重要任务
  • 游戏开发unity插件CRI ADX2系列:插件下载及教程

    推荐一个比较好的声音插件 可以在较大压缩音乐资源的同时维持较好的音质 教程 https blog criware cn category tutorials https www bilibili com video av56190616 C
  • 玩转Makefile

    1 前言 Makefile是一个神奇的东西 有了它只需一个make命令就可以让源文件按你的规则编译成你所想要的程序 非常简单 方便 对于Keil VS等IDE 一般只需点一下绿色的三角按钮 就可以完成编译 但具体内部是怎么实现编译的 改动文
  • 【Spark ML】第 1 章:机器学习简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 解决粒子特效被NGUI遮挡的问题。

    最近给UI添加粒子特效时 总是被UI遮挡 解决方法是 因为粒子系统的渲染顺序列默认为3000 而NGUI的渲染顺序默认也是从3000开始 当有嵌套的panel时或者Depth更高的panel时 GUI的渲染顺序会高于3000 解决办法是 1
  • ValueError: PyCapsule_GetPointer called with incorrect name

    ValueError PyCapsule GetPointer called with incorrect name解决问题的方式 增高pyqt5的版本 增高pyqt5的版本 我遇到了这个问题的时候在网上查的一直是说需要降低pyqt5的版本
  • 嵌入式开发linux控制鼠标,嵌入式系统/ARM技术中的linux中如何使用微软鼠标的第4、5键...

    虽说使用linux的人大都对微软没什么好感 但不能否认微软确实也出了不少好东西呀 比如微软鼠标 IE系列 icon smile gif IE 2 0和以上版本都有5个按钮 除了正常的左中右外 两侧还各有一个 在windows中可用来支持浏览
  • 面试题之你对redis的认识

    这里是我自己看书对redis的总结 这次我们目标的Redis在java互联网项目网中的作用 在传统的javaweb项目中 使用数据库进行存储数据 但是有一些致命的弊端 主要来自性能方面 由于数据库持久化数据主要是面向磁盘 而磁盘的读 写比较