2020 Redis实战【1】 前置基础与安装

7 篇文章 0 订阅


主要讲述一下数据存储的发展史以及缓存数据库的诞生

常识

说一些比较杂乱的基础知识概念。这些都是REDIS的前置需要知道的知识。

文件存储

数据是存在文件中的。文件存于磁盘
两个维度/ 两个指标

  • 磁盘的
  1. 寻址: 磁盘的寻址单位是毫秒级别
  2. 带宽: 单位时间多少字节数流过,数据传输的带宽,通常1秒钟几百兆
  • 内存:
  1. 寻址:内存的寻址速度是 纳秒级别
  2. 带宽:直接通过前端总线连接CPU 带宽超级宽。
    秒》毫秒》微秒》纳秒
    寻址过程 磁盘比内存慢了10w倍
  • iobuffer
  • 成本问题
    磁盘有磁道和扇区
    一个扇区有512个byte,如果一个区域足够小,那么就带来一个寻址成本再空间越大扇区越小寻址就慢。
  • 4k对齐
    操作系统无论你读多少都是一次从磁盘读4k
    随着文件变大,查询速度就越慢。因为文件越大导致磁盘读写的瓶颈,也就是IO的瓶颈,这个是计算机不可逾越的瓶颈。

数据库存储

随着数据存储的发展出现了数据库

  • 关于datapage 4K存储模型。
    数据库也是把文件存储在磁盘上,而数据库会有很多的datapage。数据库数据会被打散存在磁盘,这里的4k和操作系统的一次IO都是一样的4k。因为操作系统的IO读取就是一次4k 若小于4k进行存储则多少都是一次读4k,索性还是将datapage 设置为4k大小,一次IO操作刚好读取一块数据。这样不会造成IO的浪费。定义小了是IO浪费,那么定义大了则可以。

  • 关于索引
    datapage的读取还是进行轮询式的读取。把每一个datapage的数据读取到内存中,其实这还是全量IO,效率还是会很慢。
    当数据库只建立了表而不建立索引的时候这个数据读取是没有提速的。
    索引其实也是采用的4k存储模型。
    只是分开存放了数据中的索引列(如ID 等)以及这个索引列对应的datapage的引用;如索引数据中存的就是ID ,以及和这个ID与存放数据datapage的指向关系。
    同理,当数据变多时,所以也会变的很多。

  • 关系型数据库的数据占位
    关系型数据创建表的时,需要提前指定Schema,就是必须指定列的字段属性;也就是创建表的时候就要提前指定每一列的宽度,所以就知道了一列中的数据长度总长有多长,某一列数据没有或者只有某几列数据的时候会用站位符(0)进行占位。
    这样做的好处是当出现修改时,不需要移动数据只用在指定位置进行修改即可。

  • B+TREE
    要是索引有效,数据库还会在内存中创建一个b+tree来围护索引的关系,b+tree的树干是存储于内存中,而叶部分索引数据存储于磁盘,通过索引命中获取索引的datapage数据解析完索引的datapage获取数据实际存放的datapage。这样就会使查询变快。

其索引的最终目的就是减少IO增加寻址速度。

  • 数据量变大时的性能问题
    当数据量变大 datapage就会变得非常多。性能速度就会变低。
    如果有索引 “增删改” 变慢, 因为增删改会修改索引,会使增删改变慢
    关于查

    • 当数据少量或者简单的查询,条件依然命中索引,速度依旧不变
    • 当并发数量很大或者查询数据复杂时,因为会加载很多的datapage进入内存,受IO的带宽影响(系统IO瓶颈),查询就会变的很慢
  • 超级快的内存数据库
    因为前面的概念内存与总线相连直接到CPU,IO的操作,寻址和带宽都是磁盘不可比拟的,所以内存数据库是超级快的。但是成本是非常高的,内存数据库的成本可参考 SAP 出产的HANA,关系型内存数据库。

  • 数据在内存与磁盘
    数据在内存中与磁盘上的体积不一样。
    磁盘是没有所谓的指针的概念。不会存在引用什么的。所以在索引的datapage中索引列的存放也会有一份;举例就是ID会在数据的datapage中保存一份,而再索引的datapage中也保存一份。并且索引通常也不可能就只有一份,会有多个索引,所以数据就会有涨出这种情况

  • 折中的产品
    内存数据库成本太高,而磁盘关系数据库速度太慢。随着技术的发展有了缓存数据库。
    而且在当前两大技术体系前提的制约下才出现了缓存数据库。
    两大技术基础设施:冯诺依曼的硬件体系制约;以太网 tcp/ip网络 【不稳定,一个技术多个技术之间,数据同步双写等】
    代表作:memcache redis

Redis

  • Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
  • 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
  • Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
  • redis有着每秒钟150000的 ops

redis中的数据类型:

一图说明
在这里插入图片描述
对于redis 每一个数据类型都有自己的方法。,先比于原先的memcache来说。memcache没有数据类型。对于所有的value都需要序列化以后传入。而且读也是将数据读取完成以后进行反序列化,再获取其中某一处想要的值。而对于redis来说。类似有数据库的内部函数一样可以直接通过数据的计算获取自己想要的值进行返回,这样传输数据少,减少了io操作。提高了性能。
对于这种类型的操作就是计算向数据移动。

安装

  1. 更新wget 命令
    yum install wget
  2. 根据个人需求创建目录 创建 /opt/redis 目录
    mkdir /opt/redis
    cd /opt/redis
  3. 获取官网最新程序连接并下载
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz
  4. 下载完成后解压缩
    tar xf redis-5.0.5.tar.gz
  5. 进入解压目录
    cd redis-5.0.5
  6. 安装 gcc 根据个人及其情况。
    yum install gcc
  7. 这里需要注意一点是可以看下目录中所带的README.md文件。看看自述中对安装的要求和命令
    vi README.md
    通过这个命令可以知道 编译命令有
    make
    make install
    make test
    make 32bit
    make distclean
  8. 执行默认的make命令
    make
    需要注意的是当你执行make命令发现出错的时候再次执行make时需要先执行make distclean命令进行清理上次执行失败的产物再进行make要不会一直报错
  9. 进入src目录可以看到make完成后的可执行文件运行启动程序
    cd src
    ./redis-server

    启动成功默认端口6379,此时编译成功,程序可运行
  10. 这时需要程序以一个服务的形式运行起来。那么参考README后得知需要运行make install 然后再util目录下在运行install_server.sh
    cd /opt/redis/redis-5.0.5 回到解压完成后的目录中
    make PREFIX=/opt/redis/server install 这里的PREFIX指的就是你的服务要安装到那个目录下。
    运行后安装完成
    可以到安装的目录下查看,多创建了一个bin目录。进入bin目录以后是刚才make完成后的全部可执行文件,这样就把编译后的可执行文件和 源文件进行了区分
  11. 添加环境变量
    vi /etc/profile
    到最后一行,添加一行新内容
    增加REDIS_HOME变量
    并追加PATH
    export REDIS_HOME=/opt/redis/server
    export PATH=PATH:$REDIS_HOME/bin
    添加完成后保存文件并退出。
    运行命令
    source /etc/profile
    来确保环境变量生效。
    顺便可以通过命令
    echo $PATH
    查看结果,看看path环境变量中是否设置了redis服务的bin目录
  12. 通过阅读readme.md后,知道了需要将redis 作为服务运行还需要做一件事
    cd /opt/redis/redis-5.0.5/utils 进到安装源码的utils目录下
    ./install_server.sh 运行install_server.sh
    之后会有一步一步的设置来引导你完成服务的安装,参考如下

./install_server.sh Welcome to the redis service installer This
script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 问你需要设置的服务启动端口号
Selecting default: 6379 这个是你选择的结果默认是6379
Please select the redis config file name [/etc/redis/6379.conf] 配置文件所在位置设置
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 日志存放与名称设置
Selected default -/var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 数据存放位置
Selected default - /var/lib/redis/6379
Please select the redis executable path [/opt/redis/server/bin/redis-server]
服务启动命令 再次显示所设置的内容
Selected config: Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir :/var/lib/redis/6379
Executable : /opt/redis/server/bin/redis-server Cli
Executable : /opt/redis/server/bin/redis-cli
询问你而又没有问题,enter 确定,ctrl+c 取消
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
然后就是具体的服务安装执行信息
Copied /tmp/6379.conf => /etc/init.d/redis_6379 复制配置文件
Installing service… 安装服务
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server… 启动服务
Installation successful! 最后告诉你成功

可以看出install_server 完成后不但安装了服务还启动了服务。
可以通过查看/etc/init.d目录下的 redis_6379这个脚本就得知具体的执行
也可以通过service redis_6379 status 查看 刚安装的6379服务运行状态

服务的启动命令 redis-server

redis-server 启动默认服务
redis-server $configfile 启动指定的配置文件服务
再我们运行install_server.sh时都会最后都会告诉你你安装redis服务时候所保存的配置文件都在哪里

Config file : /etc/redis/6379.conf

那么通过不同的配置文件,可以在一台主机上同时启动多个不同的redis服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值