一、Redis概述
1.1 Redis简介
Remote Dictionary Server(Redis)是一个基于 key-value 键值对的持久化数据库存储系统。
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 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
1.2 Redis优势
- 性能极高
Redis能读的速度是110000次/s,写的速度是81000次/s 。 - 丰富的数据类型
Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 - 原子
Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。
多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 - 丰富的特性
1)Redis还支持 publish/subscribe, 通知, key 过期等等特性。
2)Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,
因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,
在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
1.3 Redis与其他数据库对比
如果你熟悉关系数据库,那么你肯定写过用来关联两个表的数据的SQL查询。而Redis则属于人们常说的
NoSQL数据库或者非关系数据库。Redis不使用表,它的数据库也不会预定义或者强制去要求用户对Redis存储的不同数据进行关联。
二、CentOS7安装Redis
2.1 安装过程
安装前准备:
因为Redis是C实现的,需要gcc来进行编译,所以原因是系统未安装gcc,按顺序执行:
yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
注意:因为gcc依赖很多,都执行一下,以防万一。
1)下载地址:http://redis.io/download, 下载最新版本的linux版本Redis。
2)我使用的是最新文档版本为 4.0.6,下载文件后,上传到linux服务器上面,并解压安装。
操作指令为:
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make
3)make成功执行完后 redis- 4.0.6目录会生成src 目录,在一次执行命令:
$ make install
4)启动redis服务,使用默认配置方式启动:进入到redis-4.0.6/src目录,执行启动命令:
redis-server
注意:这里直接执行Redis-server 启动的Redis服务,是在前台直接运行的(效果如上图),也就是说,执行完该命令后,
如果Linux关闭当前会话,则Redis服务也随即关闭。正常情况下,启动Redis服务需要从后台启动,并且指定启动 配置文件。
2.2 后台启动服务
1)首先编辑conf文件,将daemonize属性改为yes(表明需要在后台运行),并指定ip地址,开放redis端口号:6379。
操作指令为:
cd redis-4.0.6/
vi redis.conf
2)再次启动redis服务,并指定启动服务配置文件:
redis-server /usr/local/redis/etc/redis.conf
3)在防火墙开放端口:6397
4)本地电脑上,安装一个Redis客户端连接工具(比如:redisclient、RedisDesktopManager等)
利用连接工具可方便查看redis中设置的缓存数据。
2.3 安装过程中的问题
1)问题描述
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src'
make: *** [all] Error 2
2)原因分析
在README 有这个一段话。
Allocator
---------
Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.
To force compiling against libc malloc, use:
% make MALLOC=libc
To compile against jemalloc on Mac OS X systems, use:
% make MALLOC=jemalloc
说关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。
而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。
但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。
3)解决方法
make MALLOC=libc
三、关闭Redis
1)针对前台启动,使用Ctrl+c
2)针对后台启动,可用通过杀进程Kill -9 进程号
3)前两种都不推荐,在 /opt/redis/src/ 目录下执行 ./redis-cli shutdown 是最好的选择。
这是考虑到在关闭 redis 时,可能还未将内存中的数据持久化到本地。
四、客户端启动
启动Redis自带的客户端,在/opt/redis/src目录下执行./redis-cli -h 127.0.0.1 -p 6379 命令。
若 host 是 127.0.0.1 , port 是 6379 。则可以直接输入 ./redis-cli。
五、解决RedisDesktopManager连接不上linux中的Redis服务
1)编辑redis.conf文件
通过/bind 127.0.0.1搜索到后将其注释掉
2)要为redis配置密码
通过/requirepass foobared搜索到后将其注释打开,同时将foobared修改为你要给redis设置的密码。
3)确保6379端口开放
我的做法是直接把防火墙关闭了(但是这个做法是不对的,可以自行百度去查看linux怎么开放端口)