Redis安装与配置
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。(Vmware在资助着redis项目的开发和维护)
BSD是”Berkeley Software Distribution”的缩写,意思是”伯克利软件发行版”。
SD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
1.1什么是NoSQL
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
为什么需要NoSQL?
传统的关系型数据库面对对这些海量数据的存储,以及实现高访问量、高并发读写,就会显得力不从心。
尤其是面对对超大规模、高并发、高吞吐量的大型动态网站的时候,就会暴露很多难以克服的问题。
满足高速存储需求,实现高并发、高吞吐量,NoSQL应运而生。它可以解决传统关系型数据库所不能解决的问题。
问题:
- NoSQL的出现解决了高并发读写问题
- NoSQL的出现解决了海量数据的高效率存储和访问
- NoSQL的出现实现了高可用性及高可扩展性
NoSQL特点:
- 容易扩展、数据之间没有关系
- 数据模型非常灵活、无需提前为要存储的数据建立字段类型、随时可以存储自定义数据格式
- 适合大数据量、高性能的存储
- 具有高并发读写、高可用性
1.2 NoSQL与传统关系型数据库的比较
比较:
使用成本
NoSQL:NoSQL使用简单,易搭建,大部分是开源软件,比较廉价,任何人都可以使用。
关系型数据库:相对于NoSQL,关系型数据库通常需要安装部署,开源的少,成本高。(Oracle)
存储形式:
NoSQL:NoSQL具有丰富的存储形式(键值对、图结构、文档、列簇等形式)
关系型数据库:采用关系型数据模型来组织,行列表结构,通过行与列的二元形式表示,数据之间有很强的关联性。采用二维表结构的形式对数据进行持久存储。
查询速度:
NoSQL:NoSQL将数据存储在系统的缓存中,不需要经过SQL层的解析,因此查询效率很高。
关系型数据库:将数据存储在系统的硬盘中,在查询的时候需要经过SQL层的解析,然后读入内存,实现查询,效率低。
扩展性:
NoSQL:NoSQL去掉了传统关系型数据库表与字段之间的关系,实现了真正的扩展。采用键值对的形式存储数据,消除了数据之间的耦合性,易扩展。
关系型数据库:采用关系型数据模型存储,数据与数据之间的关联性强,存在耦合性,不易扩展。尤其存在夺标连接join查询机制的限制。
是否支持ACID特性:
ACID特性指数据库事务的执行要素,包括:原子性、一致性、隔离性、持久性。
NoSQL:一般不支持ACID特性,实现最终一致性。
关系型数据库:支持ACID特性,具有严格的数据一致性。
是否支持SQL语句:
NoSQL:SQL语句在NoSQL中是不被支持的。NoSQL没有声明性查询语言,且没有预定义的模式。
关系型数据库:支持SQL语句,也支持复杂查询。SQL是结构化查询语言、数据操纵语言、数据定义语言。
两者互补,没有绝对的优势。
1.3 在什么应用场景下使用NoSQL
以下场景:
- 对于大数据量、高并发的存储系统及相关应用
- 对于一些数据模型简单的相关应用
- 对数据一致性要求不是很高的业务场景
- 给定key来映射一些复杂值得环境
- 对一些大型系统得日志信息得存储
- 存储用户信息,如大型电商系统的购物车、会话
- 对多数据源的存储
- 易变化、热点高频信息、关键字等存储
- 等等
1.4 NoSQL的数据模型
4种数据模型:
键值对数据模型:
采用键值对形式将数据存在一张哈希表中的一类数据库。这张哈希表具有一个特定的键和一个指向特定的数据指针。键值对的值可以是任意类型值。
列数据模型
列数据模型就是将数据按照列簇形式的一类数据库。通常用于存储分布式系统的海量数据。也有键,这些键指向多个列,由数据库的列簇统一安排。
文档数据模型
以文档形式进行存储,它是键值对数据模型的升级,是版本化的文档。可以使用模式来制定某个文档结构,通常采用特定格式来存储半结构化的文档。最常使用的存储格式就是XML、JSON。每个文档都是自包含的数据单元,是一系列数据项的集合。
图数据模型
它采用图结构形式存储数据。它是最复杂的NoSQL,常被用于存储一些社交网络的社交关系,适用于存储高度关联的数据。它由多个节点和多条边组成,节点表示实体,边表示实体之间的关系。
其中,键值对、列、文档等文档数据模型统称为聚合模型。他们有一个共同的特点:可以把一组相互关联的对象看作一个整体单元来操作,通常把这个单元称为聚合。
1.5 NoSQL数据库的分类
1.5.1 NoSQL数据库分类简介
键值对存储数据库:
典型代表Redis(C、C++开发)、Memcached、Voldemort、Berkeley DB、Tokyo Cabinet/Tyrant
采用该类数据库存储数据,需要定义数据结构(半结构化)
面向列存储数据库:
典型代表:HBase(Java)、Cassandra(Java)、Riak(Erlang、C、JavaScript)
采用该类数据库存储数据,需要定义数据结构(半结构化)
面向文档数据库:
主要用于存储文档一类的数据库。文档是它最小的单元,同一张表存储的文档属性是多样化的,数据可以采用XML、JSON、JSONB等多种格式存储
典型代表:MongeDB(C++)、CouchDB(Erlang)、RavenDB等
采用该类数据库存储数据,不需要定义数据结构(半结构化)
面向图形数据库:
典型代表:Neo4j(Java)、InfoGrid、Infinite Graph等
目前NoSQL使用广泛,很多企业会根据自己的业务混合使用
1.5.2 各类NoSQL数据库的比较
| 分类 | 数据模型 | 优点 | 缺点 | 使用场景 | 不适用场景 |
|---|---|---|---|---|---|
| 键值对 | 一系列key指向value,通常用哈希表实现 | 查询速度快、保存速度快、兼具临时性和永久性 | 数据无结构(通常只能当作字符串或二进制)、当进行临时性保存数据有可能丢失 | 左高速缓存、实现大数据量存储访问、缓存日志、存储用户信息 | 通过值来查询的业务、需要存储数据之间关系的业务、需要对事务提供支持(不能回滚) |
| 面向列 | 采用列簇形式存储,将同一列数据放在一起 | 查询速度快、擅长以列为单位读入数据、可扩展性强(分布式) | 功能相对局限 | 做分布式文件系统、存储日志信息 | 需要实现ACID相关业务 |
| 面向文档 | 采用文档形式,也可以看成一系列键值对,它每项数据都有对应的名称和值 | 无需定义表结构(可变)、对数据结构要求不严格、可以使用复杂查询条件 | 查询性能不高、缺乏统一的查询语句 | web应用、存储日志 | 存储文档数据需要在不同文档提娜佳事务时 |
| 面向图形 | 采用图结构形式存储,实体是一个节点,节点之间的关系是边 | 具有很多图结构算法的支持 | 为了得到结果需要对整个图形进行计算、不利于分布式、适用范围有限 | 应用于大型社交网络、相对推荐系统、面对一些关系型强的数据 | 存储非图结构 |
2.搭建Redis环境
2.1在Window环境下搭建
1、第一步下载安装包
在windows环境下请选择如下地址:
https://github.com/MicrosoftArchive/redis/releases
1) 进入网页后可以看到如下信息:
3) 点击下载Redis-x64-3.2.100.zip(黄色标记)
4) 下载完成后解压到自己选择的路径里方便找到
5) 解压后进入文件夹看到如下目录结构:
注:文件目录结构如下
redis.conf 配置文件
redis-benchmark.exe 压测工具
redis-check-aof.exe AOF文件校验、修复工具
redis-check-dump.exe RDB文件校验、修复工具
redis-cli.exe 启动客户端的执行程序
redis-server.exe 启动服务器端的执行程序
2、安装过程
1)按快捷键Win+R,输入”cmd”.
2)在cmd窗口中输入: cd /d E:\userAppliancation\Redis\Redis-x64-3.2.100 按回车键**(目录是自己解压的文件夹目录)**
接着输入命令: redis-server.exe redis.windows.conf 按回车键
3)再启动一个cmd窗口,切换到Redis目录下(cd /d E:\userAppliancation\Redis\Redis-x64-3.2.100)之前打开的目录,输入命令:redis-cli.exe -h 127.0.0.1 -p 6379 按回车
4) 输入命令:set name Mike 按回车,然后输入 get name ,将会看到如下效果图表示已经成功安装Redis。
3、可视化客户端
可视化客户端有两个推荐使用的工具:Redis Desktop Manager 、 TreeSoft
Redis Desktop Manager安装过程如下:
1)下载
下载地址:
github地址:https://github.com/uglide/RedisDesktopManager/releases
百度网盘:http://pan.baidu.com/s/1kU8sY3P (如果github下载不了使用百度云盘下载)
文件名称:redis-desktop-manager-0.8.8.384.exe
点击向下查找版本0.9.3,点击Assets出现下拉框,点击redis-desktop-manager-0.9.3.817.exe(别的版本都没这个可视化工具)
下载到合适的路径:
点击安装,Next(傻瓜式、不截图了)
Finish
2)请改配置
使用Redis连接服务器,需要修改配置文件:redis.windos.conf(Redis默认只能本地连接)
使用编辑软件打开配置文件,找到 bind 127.0.0.1 这一行并用 # 注释掉
找到 protected-mode yes 这一行,把yes改为no
修改完成后保存退出,重启Redis服务即可完成
2.2 Linux安装
官方网站:http://redis.io/
官方下载:http://redis.io/download 可以根据需要下载不同版本
(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)
2.2.1 Redis安装
Redis是C语言开发,安装Redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
安装gcc
gcc的安装很简单,首先要确保root登录,其次就是Linux要能连外网
1 | yum -y install gcc automake autoconf libtool make |
注意:运行yum时出现/var/run/yum.pid已被锁定,PID为xxxx的另一个程序正在运行的问题解决
1 | rm -f /var/run/yum.pid |
安装Redis
命令1: wget http://download.redis.io/releases/redis-4.0.1.tar.gz
命令2:tar zxvf redis-4.0.1.tar.gz
命令3: cd redis-4.0.1
命令4(编译): make 或 make MALLOC=libc 如下图代表成功:
命令5:make PREFIX=/usr/local/redis install
(安装编译后的文件) 安装到指目录:
注意:PREFIX必须大写、同时会自动为我们创建redis目录,并将结果安装此目录
命令6: cd /usr/local/redis 查看
命令7:查看bin目录下,如图:
Redis启动
- 启动Redis服务
进入对应的安装目录 /usr/local/redis
执行命令: ./bin/redis-server
- 启动Redis客户端
进入Redis客服端(Clone Session克隆一个窗口,因为目前不能后台启动):
进入对应的安装目录 cd /usr/local/redis
执行命令: ./bin/redis-cli
启动Redis 客户端命令:
redis-cli –h IP地址 –p 端口
退出客户端命令:Ctrl+C
检测是否服务端启动
启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。
1 | $redis-cli |
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
2.3 Linux配置Redis
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。
配置Redis
Redis端口号或启动有默认配置。但一般我们都会通过手动配置完成
回到根目录找到解压文件中的reids.conf
命令:**cp redis.conf /usr/local/redis **将配置文件复制到安装文件的目录下
redis.conf 配置文件详解
1 | redis.conf 配置项说明如下: |
自定义配置Redis
1、进入对应的安装目录 /usr/local/redis
修改 redis.conf 配置文件 vim redis.conf (进入命令模式 通过/内容 查找相应字符串)
2、Redis配置默认必须修改:
**daemonize no 修改为 daemonize yes **
bind 127.0.0.1 注释掉
requirepass 设置密码
1 | requirepass zzxx |
Redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。 在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直 运行,除非手动kill该进程。但当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制 退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。 服务端开发的大部分应用都是采用后台运行的模 式
requirepass设置密码。因为redis速度相当快,所以一台比较好的服务器下,一个外部用户在一秒内可以进行 15W次密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解。
可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全
Redis关闭
1 | 使用kill命令 (非正常关闭,数据易丢失) |
3. 用docker运行Redis
1 | #Docker 安装真没什么说的、懂得自然懂 |






























