Redis简单理解
好久不来,甚是想念。 --[RuiDer]
before
- Java基础
- JDBC数据库
Redis
Redis:一款NoSql技术,面向Java Web。它就是一个简单的基于内存的数据库,
并提供持久化服务。Redis和MongoDB是当前使用最广泛的NoSql,主要应对每秒
几十万的读写操作,其性能远远超过数据库。并且在高并发下保证数据的一致性和
安全性。
Redis优势
- 使用ANSI C语言完成,接近汇编语言,运行速度快
- 基于内存读/写,读写速度相当快。
- 支持6种数据结构,分别是字符串String,链表List,集合Set,散列hash,和基数HyperLogLog,以及有序集合Zset,规则相对较少,处理快。
综上优势,Redis的读写速度更快。。
Redis使用
Redis的使用有两种方式:
- 与Spring结合Spring-Data-Redis
- Jedis操作Redis的数据读写
两种方式的使用截然不同。
缓存
持久化数据库的缺点与优点:
-数据从数据库读取也就是索引磁盘速度慢
-数据写如数据库速度还说的过去
在Java Web领域,对于数据库的操作读的操作远超过写的操作,一般是1:9到3:7 的比例。对于
数据库中的数据,读取操作会直接进行整个磁盘的索引,而索引整个磁盘的速度是非常慢的,但是
读取内存的速度就不一样了,会非常速度。
缓存的缺点:
磁盘的容量一般是TGB级别,不同于内存的小容量一般是GB级别,容量有限,而且磁盘十分
廉价,内存价格也比磁盘昂贵。
何时使用缓存Redis
因为缓存基于内存,内存空间有限,价格高贵,所以应该有条件限制
使用Redis的条件:
- 数据使用频繁,读取操作多于写操作
- 业务数据经常被使用吗?命中率如何?
- 业务数据大小如何?
一般而言,缓存的作用主要用于存储一些常用的数据,
比如用户登录信息,银行卡信息等。。
Redis缓存简单原理
使用缓存是因为缓存的读取速度快,而考虑到写操作时,数据库的写操作与其速度差不到那去,
所以直接考虑缓存的读取操作
- 当第一次读取数据时,首先检测Redis中是否含有该数据
- 如果有直接读取
- 如果没有,从数据库读取,写入Redis
- 第二遍读取数据时,直接从缓存中读取了
高速读/写场合
在互联网行业,对于高并发业务,比如秒杀和抢红包这些业务,
需要高质量的缓存机制相应千万级别的访问量。如果使用数据库,
数据库每秒处理万级别的sql语句,简直是异想天开,有时会使数据库瘫痪,甚至有时
会使服务器奔溃。
在这样的场合一般考虑使用异步写入数据库。
异步写入数据库
对于高速读/写场合中单单使用Redis的场景,把这些需要高速读/写的数据,
缓存到Redis中,而在满足一定条件时,触发这些缓存的数据写入数据库中去。
细细解释一下这个问题,当一个请求发送数据当服务器时,一开始存储数据是
Redis缓存,没有进行任何关于数据库的操作,但是缓存不能持久化,因此需要
需要把这些数据存入数据库,因此会在一定条件时判断一个请求是否结束,一旦结束,
就会将缓存中的数据更新到数据库。而这个条件就像秒杀或者抢红包业务中红包数量
是否为0,如果为空,一次性写入数据库,完成持久化工作。