Redis之一块儿步

1.Redis简介

    Redis 是一个开源(BSD许可)的,内存中的key-value数据结构存储系统,它能够用做数据库、缓存和消息中间件,解决了断电后数据彻底丢失的状况。它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不一样级别的 磁盘持久化(persistence), 并经过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。php

2.Redis的性能

对于redis 的一些简单测试,仅供参考:html

测试环境:Redhat6.2 , Xeon E5520(4核)*2/8G,1000M网卡mysql

Redis 版本:2.6.9web

 

客户端机器使用redis-benchmark 简单GET、SET操做:redis

2. 1单实例测试

1. Value大小:10Byte~1390Bytesql

处理速度: 7.5 w/s,速度受单线程处理能力限制数据库

2. Value 大小:1400 左右缓存

处理速度突降到5w/s 样子,网卡未能跑满;因为请求包大于MTU形成TCP分包,服务端中断处理请求加倍,形成业务急剧降低。服务器

3. Value大小:>1.5 k数据结构

1000M网卡跑满,速度受网卡速度限制

处理速度与包大小大概关系以下:

2.2 多实例测试

前提是系统网卡软中断均衡到多CPU核心处理,测试机器网卡开启RSS,有16个队列:

操做:10字节Value SET,服务端开启8个实例,四台客户端服务器每台开启两个redis-benchmark,每一个client 速度近4W/s,服务端总处理30w/s左右。

网卡流量:

其中8个单数核心CPU所有耗尽,像是超线程没有利用上,测试已经达到很好效果,就没有继续测试下去了。从单实例跑满一个核心7.5w/s,8个实例跑满8个核心,30W/s来看,CPU使用和性能提高不成正比, RSS会形成redis-server线程基本每收到一个请求都切换一次CPU核心,软中断CPU占用过高。这种状况RPS/RFS功能也许就很合适了,RSS只须要映射1~2个核心,而后再讲软中断根据redis-server端口动态转发,保证redis进程都在一个核心上执行,减小进程没必要要的切换。

 

开多实例能够充分利用系统CPU、网卡处理小包能力。具体看业务场景,考虑包平均大小、处理CPU消耗、业务量。若是多实例是为了提升处理能力,须要注意配置网卡软中断均衡,不然处理能力也没法提高。

3.安装Redis

    Redis的代码遵循ANSI-C编写,能够在全部POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。并且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个缘由,让人很容易上手,不像某些东西,编译阶段就能让人彻底绝望。

先去官网下载源码:

解压:

tar –zxvf redis-*.tar.gz

编译

须要说明的事,redis的安装很是简单,已经有现成的Makefile文件,直接运行make命令便可。

make

make install

Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的做用以下:

    - redis-server:Redis服务器的daemon启动程序

    - redis-cli:Redis命令行操做工具。固然,你也能够用telnet根据其纯文本协议来操做

    - redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能

    - redis-stat:Redis状态检测工具,能够检测Redis当前状态参数及延迟情况

如今就能够启动redis了,redis只有一个启动参数,就是他的配置文件路径。

redis-server /etc/redis.conf

注意,默认复制过去的redis.conf文件的daemonize参数为no,因此redis不会在后台运行,这时要测试,咱们须要从新开一个终端。修改成yes则为后台运行redis。另外配置文件中规定了pid文件,log文件和数据文件的地址,若是有须要先修改,默认log信息定向到stdout.

下面是redis.conf的主要配置参数的意义:

    - daemonize:是否之后台daemon方式运行

    - pidfile:pid文件位置

    - port:监听的端口号

    - timeout:请求超时时间

    - loglevel:log信息级别

    - logfile:log文件位置

    - databases:开启数据库的数量

    - save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操做。在必定时间内执行必定数量的写操做时,自动保存快照。可设置多个条件。

    - rdbcompression:是否使用压缩

    - dbfilename:数据快照文件名(只是文件名,不包括目录)

    - dir:数据快照的保存目录(这个是目录)

    - appendonly:是否开启appendonlylog,开启的话每次写操做会记一条log,这会提升数据抗风险能力,但影响效率。

    - appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统本身同步)

这时你能够打开一个终端进行测试了,配置文件中默认的监听端口是6379

咱们能够开启一个Redis客户端进行测试

[root@SNDA-192-168-1-114 ~]# redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused 
not connected> exit 
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf 
[root@SNDA-192-168-1-114 ~]# redis-cli 
redis 127.0.0.1:6379> quit

4.redis数据结构

    redis 的做者antirez曾称其为一个数据结构服务器(data structures server),这是一个很是准确的表述,redis的全部功能就是将数据以其固有的几种结构保存,并提供给用户操做这几种结构的接口。咱们能够想象咱们在各类语言中的那些固有数据类型及其操做。

redis目前提供四种数据类型:string,list,set及zset(sorted set)和Hash。

    - string是最简单的类型,你能够理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操做与Memcached的操做相似。但它的功能更丰富。

    - list是一个链表结构,主要功能是push、pop、获取一个范围的全部值等等。操做中key理解为链表的名字。

    - set是集合,和咱们数学中的集合概念类似,对集合的操做有添加删除元素,有对多个集合求交并差等操做。操做中key理解为集合的名字。

    - zset是set的一个升级版本,他在set的基础上增长了一个顺序属性,这一属性在添加修改元素的时候能够指定,每次指定后,zset会自动从新按新的值调整顺序。能够理解了有两列的mysql表,一列存value,一列存顺序。操做中key理解为zset的名字。

    - Hash数据类型容许用户用Redis存储对象类型,Hash数据类型的一个重要优势是,当你存储的数据对象只有不多几个key值时,数据存储的内存消耗会很小.更多关于Hash数据类型的说明请见:

    - http://code.google.com/p/redis/wiki/Hashes

    在官网上给出了全部支持的接口列表,并副副附有详细的介绍,地址:

http://code.google.com/p/redis/wiki/CommandReference

    另外,做者还提供了一个很是贴心的web命令行模拟页面,供初学者试用redis,地址:

http://try.redis-db.com/

5.redis数据存储

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updatessave配置,指出在多长时间内,有多少次更新操做,就将数据同步到数据文件。这个能够多个条件配合,好比默认配置文件中的设置,就设置了三个条件。

appendonly yes/no appendonly配置,指出是否在每次更新操做后进行日志记录,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于redis自己同步数据文件是按上面的save条件来同步的,因此有的数据会在一段时间内只存在于内存中。

appendfsync no/always/everysec appendfsync配置,no表示等操做系统进行数据缓存同步到磁盘,always表示每次更新操做后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

6.redis主从配置

redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port便可

7.redis起步(连接整理)

项目首页,下方是各类语言支持列表:

http://code.google.com/p/redis/

做者在wiki中给出了一个很是好的例子,以使咱们能够快速上手,地址:

http://code.google.com/p/redis/wiki/TwitterAlikeExample

同时做者推荐的另外一个教程,地址:

http://labs.alcacoop.it/doku.php?id=articles:redis_land

一个redis爱好者建立的相关问题讨论网站:

http://www.rediscookbook.org/

为何使用 Redis及其产品定位

http://www.infoq.com/cn/articles/tq-why-choose-redis

Redis内存使用优化与存储

http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage

相关文章
相关标签/搜索