NoSQL之redis介绍:


remote rerictionry server 是一个基于key-value键值对的持久化数据库存储系统,redis和memcached缓存服务很像。

但是redis支持的数据存储类型更丰富,包括string、list、set、和zset等,这些数据类型都支持push/pop、add/remove

及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务,和memcached不同的是(memcached目前好像也支持持久化,未验证),redis持久化

缓存服务还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比memcached更有优势的是,

redis还支持master-slave同步。redis的出现,在一定程度上弥补了memcached这类key-value内存缓存服务的不足,

在一些场合可以对关系数据库起到很好的补充作用,redis提供了python,ruby,php等客户端,使用很方便

http://www.redis.io/documentation

http://www.redis.cn

redis优点:

持久化:与memcached不同,可以持久化存储数据

性能很高:redis能支持超过100K+每秒的读写频率。

丰富的数据类型:redis支持二进制的string,lists,hashes,sets及ordered sets等数据类型操作。

原子:redis的所有操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行。

丰富的特性:redis还持之publish/subscribe,通知,key过期等等特性。

redis支持异机主从复制

redis数据类型:

string

hash

list

set

sorted set

redis的应用场景:

传统的mysql+memcached的网站架构遇到的问题

mysql数据库实际上是适合进行海量数据存储的,加上通过memcached将热点数据存放到内存cache里,达到加速数据访问的目的。

绝大部分公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,很多问题就会暴漏出来

1.需要不断的对mysql进行拆库拆表,memcached也需不断跟着扩容,扩容和维护工作占据大量开发运维时间

2.memcached跟mysql数据库的数据一致性问题

3.memcached数据命中率低或down机,会导致大量访问直接穿透到数据库,导致mysql无法支撑业务访问

4.跨机房cache同步一致性问题

redis的最佳应用场景:

1.redis最佳使用场景是全部数据in-memory

2.redis更多场景是作为memcached的替代品来使用,需要开发支持

3.当需要除了key-value之外的更多数据类型支持时,使用redis更合适

4.支持持久化

5.需要负载均衡的场景(redis主从同步)



redis安装:


获取redis:

            

cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.0.7.tar.gz


安装:

tar -zxf redis-3.0.7.tar.gz
cd redis-3.0.7
cp redis.conf /etc/redis.conf
make MALLOC=jemalloc
make PREFIX=/usr/local/redis install


配置环境变量:

echo 'PATH=/usr/local/redis/bin:$PATH' >>/etc/profile

. /etc/profile


启动redis:

nohup redis-server /etc/redis.conf &


客户端工具的使用:

redis-cli -h 127.0.0.1 -p 6379


客户端常用命令:

set no002  sunwukong    #设置一个键,值为sunwukong
get no002		#获取键no002的值
del no002		#删除键为no002的值
keys *			#获取当前reds下的所有key
info                    #查看当前redis的状态信息


redis主从复制的说明:


Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些特点:
1.master可以有多个slave
2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构
3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。
4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余
5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。


下面介绍下主从复制的过程
       当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。


redis主从复制的配置


redis从操作:

[root@localhost ~]# cat /etc/redis.conf |grep 'slaveof'

# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# slaveof <masterip> <masterport>

在此行下新添加一行

slaveof 192.168.1.100 6379

保存重启主和从的redis服务出现下面的信息表示主从同步正常

redis介绍、主从配置_server

redis介绍、主从配置_server_02


验证:

在redis主服务器上创建一个数据

[root@localhost ~]# redis-cli 
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set mydata   john.gou
OK
127.0.0.1:6379> get mydata
"john.gou"
127.0.0.1:6379>


在redis从服务器上验证

[root@localhost ~]# redis-cli 
127.0.0.1:6379> get mydata
"john.gou"

127.0.0.1:6379> set mykey 123
(error) READONLY You can't write against a read only slave.

ps:可以看到从服务器上的数据已经同步,并且不可以在从上添加数据。redis主从同步搭建完成



此博客的redis主从同步优点和同步过程抄录于http://blog.csdn.net/yangzhenzhen/article/details/8512292