redis学习(一)——redis发展介绍安装
一、redis发展史
1、数据存储特点
在redis发展前数据是存在文件里的,比如可以存在aaa.txt中。我们可以通过linux命令(grep,awk)等命令进行查询,也可以通过java程序通过字节流来进行获取。
但是数据存储在内存和磁盘上进行读取数据是由很大的差异的。
2、数据读取常识知识点
读取数据其实有寻址和带宽决定了上限。
在磁盘中,寻址为毫秒级别的(ms),带宽(G/M,该时间段查询到的数据,用G和M单位)。在内存中寻址为纳秒(ns)级别的,带宽一定很大。这必然决定了内存查询数据很快的。
3、IO/buffer问题知识点
磁盘是由磁道与扇区组成的。默认情况下,每扇区占用512个字节。这样就会带来索引成本变大的问题。思考(如果有1T的数据,那么会有很多很多512个小点点,那么必然索引成本会变大)所以我们在格式化磁盘的时候会有一个4K对齐,也就是我们真正才使用的时候,读取了4K的数据,那么相应的索引效率会高一些。操作系统无论你读多少,默认都是4K。
4、java随着文件的增大,读取数据为什么会变慢?
IO流瓶颈问题。
5、数据库的衍生发展
由于磁盘数据读取速度的变慢,所以衍生出了数据库。数据库有dataPage。默认数据库读取4k和硬盘上读取数据保持4k一致。这个数据可以变大4K的倍数,如果设置小就有浪费了。所以mysql里会有很多4k,4k的dataPage。我们可以给每个4k设置个序列号,便于查询。所有就有了索引,索引也是存放在硬盘dataPage上的。(例如:把一列省份证号设置为索引,那么该索引的dataPage会存放身份证号,和这个省份证号所指向的该dataPage地址。所以说关系型数据库必须给出schema(字节宽度)那么每次插入的每条数据大小都是一样的,便于查询。数据库倾向于行级存储。所以修改数据只需要在行级数据覆盖写就可以了。由此有了b+tree。b+tree的树干是存在内存中的,然后从磁盘来读取索引进行查询。最终减少io的流量,较少寻址。提高查询。如果一个表有足够多的数据,那么他的增删改会变慢,由于要维护索引。查询的情况下,如果sql命中索引,那么依然很快。如果有海量用户请求会变慢。
6、SAP-HANA数据库
发展到现在便有了内存级别的关系型数据库HANA,但是很贵很贵。数据在内存和磁盘体积是不一样的。在磁盘上存储会涨数据,由于要维护索引。如果在磁盘上有2T数据,那么内存中会有IT多一点。
7、数据库选型:https://db-engines.com/en/
7、redis
由于内存级别的数据库太贵。数据库数据太大,数据量大的时候查询速度会变慢,所以有了redis,memcached 把一部分数据放到内存中。---折中方案
二、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是key-value数据库,mamched也是key-value关系型数据库。那么为啥redis会渐渐取代mamched关系型数据库呢?因为mamcached中value没有数据类型的概念。如:客户端要取value中某一个元素,那么mamched会取value的所有元素返回来,那么会增加IO,客户端还会要相应的代码进行解析。redis很好的就解决了这个问题,由于redis有不同的类型,不同的类型有对应的不同方法,可以取指定的元素值。(计算向数据移动)
三、redis的安装 install
1、官网路径:http://download.redis.io/releases/redis-6.0.6.tar.gz
2、安装wget命令 yun install wget
3、在root下新建一个目录,然后下载复制的链接 wget http://download.redis.io/releases/redis-6.0.6.tar.gz
4、对压缩文件进行解压:
5、进入redis下首先查看read-me。在这里可以看到应该怎么做。
6、vim readme.md摘要。由于redis是由C语音写的,第一步首先编译。
第二部:如果编译错误可以 make distclean
第三步:编译完以后就可以使用了:启动服务:
第四步:也可以把redis装进系统里:执行make install 及客户端如何使用在readMe都有清晰的讲解。
7、首先安装c语言的编译环境:yum install gcc
8、执行make命令。由于make命令是linux自带的,他会执行该文件下的MakeFile文件。我们可以打卡MakeFile看下。
我们可以清晰地看到 我们可以通过make 命令和make install 命令来进行编译,实际上到到了src下的makeFIle文件里。我们打开src写的MakeFile看下。可以看到编译和安装的脚本。
我们在这里可以看到如果不设置PREFIX默认情况下就会安装到/usr/local下。
执行make命令:下图:
如果编译失败,通过readme.md文件可以得知:我们可以查询make distclean 进行清楚再次编译。
如果安装最新版本的redis需要更新gcc的版本。
自 redis 6.0.0 之后,编译 redis 需要支持 C11 特性,C11 特性在 4.9 中被引入。
Centos7 默认 gcc 版本为 4.8.5,所以需要升级gcc版本。
解决
yum -y install gcc gcc-c++ make tcl
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
9.编译成功以后,我们可以看到run make test 进行测试。
10、通过readMe我们可以看到在src下就有了可执行程序 通过 ./redsi-server启动程序
11、其实我们更期望的是通过可执行程序来启动redis。所以我们可以把redis安装到系统可执行程序上。
所以通过readMe文件我们可以清晰地看到执行make install PREFIX=/opt/wanghm/redis 把该程序安装到操作系统上。
12、安装成一个服务 在utils下执行./install_server.sh
配置环境变量:
vim etc/profile 在最后以后把bin目录追加到PATH下。
并通过source 刷新该环境变量 source /ect/profile 然后可以查询是否配置成功:
./install_server.sh
12、通过服务启动程序 在init.d目录下都可以启动
此时redis_6379的启动脚本。可以通过vim看下该文件
service redis_6379 start status stop
13、此时redis我们安装成功。我们可以通过设置不同的端口启动不同的redis。
归纳如下:
文章来自于网络,如果侵犯了您的权益,请联系站长删除!