目录
Redis 简介
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨台的非关系型数据库。
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 背景
- 业务逻辑部分 - Java 业务源码部分
- 数据库存储部分-数据库(Mysql,Oracle) - > 硬盘
- 一般来说用户发起一个对于软件的访问,首先会访问到业务逻辑部分(由java源码部分或其他源码部分构成)的页面,然后由这个逻辑去数据库当中去查找数据显示给用户进行操作
(硬盘)磁盘的工作原理
- 硬盘是磁盘中的一种,软盘也是磁盘
- 磁盘就是通过磁性进行读写功能的设备,断电后保存的文件不会丢失
- 内存也可以储存,但存储的载体和磁盘不同,断电后就不能保存数据
硬盘的内部物理结构
硬盘的内部结构通常专指盘体的内部结构。盘体是一个密封的腔体,里面密封着磁头、盘片(磁片、碟片)磁头臂、音圈马达等部件,如图:
硬盘存储的逻辑结构
- 盘面号
硬盘的盘片一般用铝合金材料做基片,高速硬盘也可能用玻璃做基片 - 磁道
磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track) - 柱面
所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号 - 扇区
操作系统以扇区(Sector)形式将信息存储在硬盘上,每个扇区包括512个字节的数据和一些其他信息。一个扇区有两个主要部分:存储数据地点的标识符和存储数据的数据段,如图:
- 簇
将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。
磁盘读写数据花费的时间
保存数据到扇区上,或者从扇区读取数据,具体过程(磁盘怎样工作)如下:
-
寻道时间
寻道时间,就是磁臂移动到指定磁道所需要的时间 -
旋转延迟
旋转延迟指的是把扇区移动到磁头下面的时间。这个时间和驱动器的转数有关,我们通常所说的7200转的硬盘的转(最高可以旋转7200,转速越高性能越好)就是这个。
平均旋转延迟=1/(2转数每秒)
比如7200转的硬盘的平均旋转延迟等于1/2120≈4.17ms
旋转延迟只和硬件有关。 -
传输时间
传输时间指的是从磁盘读出或将数据写入磁盘的时间。 -
机械臂通常情况下,不工作的时候是停留在磁盘以外,当它接收到读取数据的请求后,机械臂就会去找数据,转动到磁盘上的某一个扇区区域
-
当它发现这个扇区没有数据,磁盘中央的音圈马达开始启动旋转磁盘,当查找完外圈磁道的所有扇区还没有找到数据的时候,磁头就会再次往里层,它的停留点就会往下一个磁道停留,之道提取到这个数据,扫描后返回(正常情况下面磁头不会已停留就到我们保存数据的地方,一般要旋转一下)。
-
Input - Output 读取数据的过程可以称为 - IO
-
现在物理空间运行起来必须要的一个过程,当我们把数据保存在数据库的时候,数据库的数据实际上是保存在硬盘上面,所以在现阶段大型的分布式的用户量非常多的软件系统里面, 有时候直接发起一个访问的话,如果直接去数据库上面提取数据,在返回给用户就会感觉很慢。
-
虽然说慢,但是也要在一定的场景下,这个时候要解决这个问题
-
电脑有哪些部分可以存储数据的(硬盘、内存)
-
CPU在一定单位时间内需要处理大量的数据,如果每次从硬盘上去读取的话,显然它的性能会降低(收到很大的限制),本身它的运算能力是每秒多少个G,运算速度是非常快的,CPU里面
-
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。
-
内存是高速缓存(L1)的一个补充
-
CPU高速缓存是为了解决CPU速率和主存访问速率差距过大问题。
什么是高速缓存
- 高速缓存(Cache),全称“高速缓冲存储器”。
- 例如:当CPU处理数据时,它会先到高速缓存中去寻找,如果数据因之前的操作已经读取而被暂存其中,就不需要再从主内存中读取数据–由于CPU的运行速度一般比主内存快,因此若要经常存取主内存的话,就必须等待数个CPU周期从而造成浪费。
- 提供“高速缓存”的目的是为了让数据存取的速度适应CPU的处理速度,其基于的原理是内存中“程序执行与数据访问的局域性行为”。
- 现在Cache的概念已经被扩充了:不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘高速缓存),乃至在硬盘与网络之间也有某种意义上的“Cache”(Internet临时文件夹)。
- 凡是位于速度相差较大的两种硬件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache。
- 所以硬盘和内存之间的Cache就叫做磁盘高速缓存。它是在内存中开辟一块位置,来临时存取硬盘中的数据。这项技术可使计算机读写时的存储系统平均数据传输率提高5-10倍,适应了当前激增的海量数据存储需求。
存储器层次结构
- 于是乎就有前辈开发了基于内存的数据库Redis
Redis 字符串(String)
Redis-x64-3.2.100 压缩包:
链接:https://pan.baidu.com/s/14fzXRs2eg2fWcXlKbtSsmw
提取码:tgcf
解压后如下:
.rdb后缀 是保存数据的文件 (还没有使用过的是没有这个文件)
.conf 是Redis运行起来的配置文件
这里打开 redis.windows-service.conf
- bind:运行的ip地址
- port:默认启动的端口
- save:多久保存到磁盘上一次(最开始运行在内存里面,如果出现意外情况,内存中的数据就会丢失,只有数据保存在磁盘上就不会丢失)
启动Redis
运行:第一步:打开redis的服务端:如下
第二步:打开客服端(需要注意直接打开客服端会报错)
第一个接触是String类型 (命名字母大写是规范,我为了方便记忆小写)
String 命令 | 描述 |
---|---|
set key value | 设置指定 key 值 (存值) |
get key value | 获取指定 key 值 (取值) |
mset key value | 设置一条或多条 key 值 (存) |
mget key value | 获取一条或多条 key 值 (取) |
setnx key value | key 值存在不保存,不存在则保存(不重复设置) |
setex key seconds | 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值 |
incr key | 将 key 中储存的数字值增一 (自增) |
decr key | 将 key 中储存的数字值减一 (自减) |
incrby key | 将 key 中储存的数字增加指定数值 |
decrby key | 将 key 中储存的数字减少指定数值 |
实际操作
-
set
-
get
-
mset
-
mget
-
setnx
-
setex
Redis ttl 命令以秒为单位返回 key 的剩余过期时间
-
incr
-
decr
-
incrby (10+8=18 就是加法)
- decrby(做减法)
今天学习结束啦✿✿ヽ(°▽°)ノ✿
有什么问题欢迎大家提出来,一起进步
世界灿烂盛大,欢迎回家 —— 《全球高考》