Redis是由C语言开发的Key-Value数据结构系统,它是开源的,可以用作NoSQL数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串,散列,列表,集合,有序集合 。Redis内置了复制,LUA脚本, LRU驱动事件,事务和不同级别的磁盘持久化,并通过 Redis哨兵和自动分区提供高可用性。
全世界使用Redis最多的互联网企业就是新浪,因为新浪微博数据的特性,所以新浪大量使用Redis,新浪维护了一个规模庞大的Redis高可用集群来提供支持。
主要应对以下问题,传统关系型数据库力不从心。
做为数据库
Redis可以看做一个Key-Value型非关系数据库,因为Redis会根据配置定时将内存中的数据写入到硬盘中,这样即便重启以后依然可以恢复,但是有两个缺点:
做为高速缓存
Ehcache
是一个Java开源项目,支持分布式集群,使用的方式就是引入一个jar包,非常方便。
Memcached
如果开启多线程模式,读取速度将有极大的提高;数据只会存储在内存中,挂掉后数据不可恢复,value的类型只能是字符串,且最大为1M。
Redis
Redis和Memcached一样都是把数据缓存到内容中的,但是Redis可以将数据持久化到磁盘上,而且速度比Memcached快很多。Redis的value值支持多种数据结构,且最大可存储1G的数据,支持主从,Sentinal,分片等多种高级特性,用于负载均衡和容灾,具有高可用性,几乎支持所有语言的客户端。
做为消息队列
Redis
只能说具备发布订阅功能,一个或多个消费者订阅一个频道。
Kafka
高级特性一应俱全,集群、负载均衡、动态扩容、数据备份等。
第一步:安装gcc,gcc是编译c的,因为redis是c编写的,所以我们先安装下gcc
yum install gcc-c++
第二步:wget方式下载redis压缩包,并解压,以及编译
下载到/home/data下
cd /home/data
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
提示找不到wget命令先执行下面命令安装wget
yum -y install wget
重新下载,解压
tar -zxvf redis-3.2.9.tar.gz
编译:
cd redis-3.2.9
make
第三步:安装redis,安装到/usr/local/redis/
make PREFIX=/usr/local/redis install
第四步:复制redis.conf到/usr/local/redis/下
cd /home/data/redis
cp redis.conf /usr/local/redis/
第五步:启动和关闭redis服务
启动redis就是执行redis里的bin里的redis-server命令,进入redis目录
cd /usr/local/redis/bin
./redis-server
启动成功后如上图所示,红框部分是Redis的版本,以及单机运行模式,Redis的端口和PID。
这种启动是前台启动,假如退出程序就终止或者退出了。所以需要改为后端运行,我们通过修改配置文件redis.conf来操作。
ctrl+c 退出当前程序,然后编辑redis.conf文件
vi /usr/local/redis/redis.conf
找到这一行
将daemonize修改为yes,然后esc退出,:!wq保存。
进入redis目录,加载配置文件运行
cd /usr/local/redis/bin
./redis-server ../redis.conf
查看redis进程
ps -ef | grep redis
停止redis
cd /usr/local/redis/bin
./redis-cli shutdown
查看redis进程
第六步,基本使用
cd /usr/local/redis/bin
./redis-cli
保存一个字符串类型的值
set name xxx
取出name值
get name
exit退出
到此为止就安装成功了。
第七步,配置远程访问并设置密码
vi /usr/local/redis/redis.conf
找到bind 127.0.0.1这行前面添加#注释掉
找到protected-mode yes 把yes改成no
找到#requirepass foobared 这行去掉注释 把foobared改成自己的密码
注意:关于bind属性的误区
网上能看到很多人对于bind的解释,都是说bind指定的地址是redis允许接受请求连接的地址,比如 bind 127.0.0.1则是指限制只有本机可以连接Redis,这个理解是错误的!!!!
bind 真正的含义是是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。
如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求。
保存退出
重新启动redis
再次连接客户端提示(error) NOAUTH Authentication required.
表示需要密码,使用如下方式重新连接就好了 -a后面是密码
关闭redis服务
bin/redis-cli -a 123456 shutdown
或者
kill 进程
或者
pkill redis-server