当前位置: 首页 > article >正文

redis学习笔记(一)了解redis

一:为什么要用redis?

1.先看硬盘和内存的对比

磁盘内存

寻址速度ms级别ns级别

带宽100M/s以上10GB/s以上

I/0 buffer成本扇区512byte,索引4K。就是无论读多少,最少4K据说是512B

由图可见,内存寻址速度和带宽远超硬盘。

2.mysql是关系型数据库,redis是nosql

3.也有内存级别的关系型数据库:HANA,但是太贵了。redis是一种折中方案,既不会太贵,也不会太慢(硬盘瓶颈)

4.数据在硬盘和内存的体积不一样,因为数据再硬盘中无论多小都至少占4K内存。并且放到内存可以使用压缩算法之类的算法。比如2G的磁盘数据,放到内存可能只有1G多一点

5.只要计算机还遵守冯诺依曼体系和TCP/IP协议,内存和硬盘的速度差距就无法解决,因此需要内存级的数据库

6.许多程序其实都自带缓存,比如springboot就可以在上下文中放数据,比如mysql也能缓存sql和b+树,那为什么还需要redis?答案是使用redis实际上是一种解耦分层的思想,软件架构的2大思想是分层,分而治之。把缓存单独分出一个中间件可以使架构可读性更强,拓展性更强。

7.DB-Engines Ranking 在这个网站中可以看到,key-value数据库中redis综合排名第一。这也是redis这么火的原因之一。但技术没有好坏之分,在特定场景下可能其他缓存中间件更合适。

8.redis速度:1.5M qps/sec 秒级10万操作

二:redis简单介绍

1.官方简介

redis是开源的,内存的数据结构存储系统,它可以用作数据库,缓存和消息中间件,它支持多种数据类型.redis内置了复制,lua脚本,lua驱动事件,事务和不同级别的磁盘持久化。并通过redis哨兵和自动分区提高可用性。

2.redis和memcached区别

memcached的value没有类型概念,redis就有。如string,list,hash,set,sortSet

3.为什么redis的value要有数据类型?

比如我用一个map,或一个对象数据,我可以把它转成一个json,然后再存到缓存中,取出来再把json转回对象就行了。那我只需要一个string类型就够了吧?

答案是否定的,比如一个map我要添加元素时只能把数据取回来转成map,再put,再把数据存到缓存中。这样就有2个问题:

1.成本问题,每次都要全量的取回数据,再全量的存入数据,传输成本就比较高

2.并发问题,如果有2个线程同时做这种操作,就需要加锁。

区分类型可以避免这两个问题。

再者区分类型还有个优势,就是每种类型都有自己的方法,如list就有lpop,取交集并集等。

如果没有类型区分,交集并集需要把数据全量取回,然后计算。而redis可以直接使用API在redis内部计算,非常方便

计算向数据移动,可以节省计算成本。

如果有写错的地方,欢迎大家指正,感谢!



喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.kler.cn/a/471753.html

相关文章:

  • 如何设置通过Visual Studio(VS)打开的C#项目工具集?
  • 书籍推荐:MySQL 是怎样运行的-从根上理解 MySQL
  • C# 之某度协议登录,JS逆向,手机号绑定,获取CK
  • Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建
  • 05容器篇(D2_集合 - D6_容器源码分析篇 - D1_ArrayList)
  • Flex布局的三个属性
  • 2025年1月4日蜻蜓q旗舰版st完整开源·包含前后端所有源文件·开源可商用可二开·优雅草科技·优雅草kir|优雅草星星|优雅草银满|优雅草undefined
  • WPF中RenderTargetBitmap问题解决
  • 服务器等保测评审计日志功能开启(auditd)和时间校准
  • 如何从串 ‘ 中国 +86‘ 中,获取到‘中国’:strip()、split()及正则表达式的使用
  • 通达信行情接口失效?C# 实现获取五档报价行情 GetSecurityQuotes
  • Ubuntu 安装 Java 1.8
  • Ruby语言的数据库编程
  • 【Uniapp-Vue3】v-bind指令实现图片切换
  • 将 Docker 和 Kubernetes 的存储目录迁移到更大的磁盘分区上
  • transformer深度学习实战CCTSDB中国交通标志识别
  • 游戏语音趋势解析,社交互动有助于营造沉浸式体验
  • 【gRPC】一元拦截器与流式拦截器确保请求附带认证令牌token
  • 自然灾害事件复盘分析的思考框架
  • Flutter使用GestureDetector工具实现手势缩放效果