redis 学习指南

一、介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、一个高性能的key-value数据库。并提供多种语言的API。说到Key-Value数据库NoSQL数据库能够想到MongoDB。

和Memcached类似,它支持存储的value类型相对很多其它,包含string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,并且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样。为了保证效率,数据都是缓存在内存中。差别的是redis会周期性的把更新的数据写入磁盘或者把改动操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

 

二、 基于windows 64bit安装

安装之前请务必确定你是Administrator管理员账号的windows用户!假设不是 Administrator用户,则可能须要以管理员身份执行. 或者參考 Windows 7 启用超级管理员administrator账户的N种方法

在redis的下载页面有这种一段话,说的意思是指redis项目未有提供对windows系统的支持,而Microsoft Open Tech提供了一个基于win64的redis实现。那就是说仅仅支持64位系统了,32位的windows系统的同学就老老实实的换系统去吧。(*^__^*)

The Redis project does not officially support Windows. However, the Microsoft Open Tech group develops and maintains this Windows port targeting Win64.
 

1、 下载与安装

下载地址:https://github.com/MSOpenTech/redis/releases/download/win-2.8.19/redis-2.8.19.zip

下载成功后解压能够看到例如以下文件

Redis具体解释_配置文件

Windows下的安装差点儿没有什么过程,解压后就能够使用。

简介下着几个exe文件的用途:

redis.windows.conf redis的配置文件

redis-benchmark.exe 測试工具。測试redis的读写性能情况

redis-check-aof.exe aof 修复检查日志

redis-check-dump.exe dump 检查数据库文件

redis-cli.exe redisclient程序

redis-server.exe redis服务器程序

 
三、 使用redis工具

1、 redis-server 双击执行或者用dos命令打开都能够,成功执行后能够看到界面内容例如以下:

Redis具体解释_默认值_02

会带有版本、执行进程号、执行port信息。而且会提醒使用redis.windows.conf配置文件。假设你启动失败的话,提醒内存问题。那就须要改动下配置文件的maxheap配置(默认情况下该配置没有赋值的,且没有开启),改动例如以下:

# maxheap <bytes>

maxheap 1024000000

另一种启动方式就是带指定redis.conf配置文件的启动方式。例如以下:

Redis具体解释_redis_03

当你想使用不同的配置文件来设置不同server參数的时候就须要这样,默认会使用根文件夹下的配置文件。

redis-server /biran/conf/redis.conf 启动并加装指定配置文件

redis-server - (read config from stdin) 使用标准输入读取配置为启动參数

redis-server --test-memory 256 检測256MB内存

redis-server –version 查版本

假设准备长期使用,则须要注冊为系统服务.

进入CMD,切换到redis所在文件夹:

注冊服务,能够保存为 service-install.bat 文件:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

redis-server --service-start

卸载服务, 能够保存为 uninstall-service.bat 文件:

redis-server --service-stop

redis-server --service-uninstall

能够在注冊服务时,通过 –service-name redisService1 參数直接指定服务名,适合安装多个实例的情况,卸载也是相同的道理.

启动redisserver时也能够直接指定配置文件,能够保存为 startup.bat 文件:

redis-server.exe redis.windows.conf

 

2、 redis.windows.conf各项配置參数介绍

# 默认情况下,redis不是在后台模式执行的,假设须要在后台进程执行。把该项的值更改为yes。默觉得no

daemonize:是否以后台daemon方式执行

# 如redis服务以后台进程执行的时候,Redis默认会把pid写入/run/redis.pid文件组,你能够配置到其它文件路径。

# 当执行多个redis服务时,须要指定不同的pid文件和port

pidfile:pid文件位置

# 指定redis监听port,默觉得6379

# 假设port设置为0,Redis就不会监听TCP套接字。

port:监听的端口号

# 指定redis仅仅接收来自于该IP地址的请求,假设不进行设置,默认将处理全部请求,

# 在生产环境中最好设置该项

bind 127.0.0.1

# 设置client连接时的超时时间,单位为秒。当client在这段时间内没有发出不论什么指令,那么关闭该连接

# 默认值:0代表禁用,永不关闭

timeout:请求超时时间

# 指定用来监听连接的unxi套接字的路径。这个没有默认值,所以假设不指定的话,Redis就不会通过unix套接字来监听。

# unixsocket /tmp/redis.sock

# unixsocketperm 755

# 指定日志记录级别

# Redis总共支持四个级别:debug、verbose、notice、warning,默觉得verbose

# debug 记录非常多信息,用于开发和測试

# varbose 非常多精简的实用信息。不像debug会记录那么多

# notice 普通的verbose。经常使用于生产环境

# warning 仅仅有很重要或者严重的信息会记录到日志

loglevel:log信息级别

# 配置log文件名和全路径地址

# 默认值为stdout,使用“标准输出”。默认后台模式会输出到/dev/null

logfile:log文件位置

# 可用数据库数,默认值为16。默认数据库存储在DB 0号ID库中,无特殊需求,建议仅设置一个数据库 databases 1

# 查询数据库使用 SELECT <dbid>

# dbid介于 0 到 'databases'-1 之间

databases:开启数据库的数量

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

rdbcompression:是否使用压缩

dbfilename:数据快照文件名称(仅仅是文件名称,不包含文件夹)

dir:数据快照的保存文件夹(这个是文件夹)

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

appendfsync:appendonlylog怎样同步到磁盘(三个选项,各自是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

########## REPLICATION 同步 ##########

#

# 主从同步。通过 slaveof 配置来实现Redis实例的备份。

# 注意,这里是本地从远端复制数据。也就是说,本地能够有不同的数据库文件、绑定不同的IP、监听不同的port。

# 当本机为从服务时。设置主服务的IP及port,在Redis启动时,它会自己主动从主服务进行数据同步

# slaveof <masterip> <masterport>

# 假设主服务master设置了password(通过以下的 "requirepass" 选项来配置),slave服务连接master的password,那么slave在開始同步之前必须进行身份验证,否则它的同步请求会被拒绝。

#当本机为从服务时,设置主服务的连接password

# masterauth <master-password>

# 当一个slave失去和master的连接,或者同步正在进行中。slave的行为有两种可能:

# 1) 假设 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应client请求,可能是正常数据。也可能是还没获得值的空数据。

# 2) 假设 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。

slave-serve-stale-data yes

# slave依据指定的时间间隔向server发送ping请求。

# 时间间隔能够通过 repl_ping_slave_period 来设置。

# 默认10秒

# repl-ping-slave-period 10

# 以下的选项设置了大块数据I/O、向master请求数据和ping响应的过期时间。

# 默认值60秒。

# 一个非常重要的事情是:确保这个值比 repl-ping-slave-period 大。否则master和slave之间的传输过期时间比预想的要短。

# repl-timeout 60

########## SECURITY 安全 ##########

# 要求client在处理不论什么命令时都要验证身份和设置password。

# 假设你不相信请求者,这个功能非常实用。

# 为了向后兼容的话,这段应该凝视掉。并且大多数人不须要身份验证(比如:它们执行在自己的server上。)

# 警告:外部使用者能够每秒尝试150k的password来试图破解password。这意味着你须要一个高强度的password。否则破解太easy了。

# 设置连接password

# requirepass foobared

# 命令重命名,可设置多个

# 在共享环境下。能够为危急命令改变名字。比方。你能够为 CONFIG 改个其它不太easy猜到的名字,这样你自己仍然能够使用。而别人却没法知道它。

# 比如:

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

# rename-command info info_biran

# rename-command set set_biran

# 甚至也能够通过给命令赋值一个空字符串来全然禁用这条命令:

# rename-command CONFIG ""

########## LIMITS 限制 ##########

# 设置最大同一时候连接client数量。

# 默认没有限制,这个关系到Redis进程可以打开的文件描写叙述符数量。

# 特殊值"0"表示没有限制。

# 一旦达到这个限制,Redis会关闭全部新连接并发送错误"达到最大用户数上限(max number of clients reached)"

# maxclients 128

# 不要用比设置的上限很多其它的内存。

一旦内存使用达到上限,Redis会依据选定的回收策略(參见:maxmemmory-policy:内存策略设置)删除key。

# 假设由于删除策略问题Redis无法删除key,或者策略设置为 "noeviction",Redis会回复须要很多其它内存的错误信息给命令。

# 比如,SET,LPUSH等等。可是会继续合理响应仅仅读命令,比方:GET。

# 在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)的时候,这个选项还是满实用的。

# 警告:当一堆slave连上达到内存上限的实例的时候,响应slave须要的输出缓存所需内存不计算在使用内存其中。

# 这样当请求一个删除掉的key的时候就不会触发网络问题/又一次同步的事件,然后slave就会收到一堆删除指令,直到数据库空了为止。

# 简而言之,假设你有slave连上一个master的话,那建议你把master内存限制设小点儿,确保有足够的系统内存用作输出缓存。

# (假设策略设置为"noeviction"的话就不无所谓了)

# 设置最大内存。达到最大内存设置后。Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。

# maxmemory 256000000分配256M内存

# maxmemory <bytes>

# 内存策略:假设达到内存限制了。Redis怎样删除key。

你能够在以下五个策略里面选:

#

# volatile-lru -> 依据LRU算法生成的过期时间来删除。

# allkeys-lru -> 依据LRU算法删除不论什么key。

# volatile-random -> 依据过期设置来随机删除key。

# allkeys->random -> 无区别随机删。

# volatile-ttl -> 依据近期过期时间来删除(辅以TTL)

# noeviction -> 谁也不删,直接在写操作时返回错误。

#

# 注意:对全部策略来说。假设Redis找不到合适的能够删除的key都会在写操作时返回一个错误。

#

# 这里涉及的命令:set setnx setex append

# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd

# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby

# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby

# getset mset msetnx exec sort

#

# 默认值例如以下:

# maxmemory-policy volatile-lru

# LRU和最小TTL算法的实现都不是非常精确,可是非常接近(为了省内存),所以你能够用例子做測试。

# 比如:默认Redis会检查三个key然后取最旧的那个。你能够通过以下的配置项来设置样本的个数。

# maxmemory-samples 3

########## APPEND ONLY MODE 纯累加模式 ##########

# 默认情况下,Redis是异步的把数据导出到磁盘上。

由于redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内仅仅存在于内存中。这样的情况下。当Redis宕机的时候,最新的数据就丢了。

# 假设不希望丢掉不论什么一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。

# 每次启动时Redis都会把这个文件的数据读入内存里。

#

# 注意,异步导出的数据库文件和纯累加文件能够并存(此时须要把上面全部"save"设置都凝视掉。关掉导出机制)。

# 假设纯累加模式开启了,那么Redis会在启动时加载日志文件而忽略导出的 dump.rdb 文件。

#

# 重要:查看 BGREWRITEAOF 来了解当累加日志文件太大了之后,怎么在后台又一次处理这个日志文件。

# 设置:yes为纯累加模式

appendonly no

# 设置纯累加文件名称字及保存路径,默认:"appendonly.aof"

# appendfilename appendonly.aof

# fsync() 请求操作系统立即把数据写到磁盘上,不要再等了。

# 有些操作系统会真的把数据立即刷到磁盘上;有些则要磨蹭一下,可是会尽快去做。

# Redis支持三种不同的模式:

#

# no:不要立马刷。仅仅有在操作系统须要刷的时候再刷。

比較快。

# always:每次写操作都立马写入到aof文件。慢,可是最安全。

# everysec:每秒写一次。折衷方案。

# 默认的 "everysec" 通常来说能在速度和数据安全性之间取得比較好的平衡。

# 假设你真的理解了这个意味着什么,那么设置"no"能够获得更好的性能表现(假设丢数据的话。则仅仅能拿到一个不是非常新的快照);

# 或者相反的,你选择 "always" 来牺牲速度确保数据安全、完整。

#

# 假设不确定这些模式的使用,建议使用 "everysec"

#

# appendfsync always

appendfsync everysec

# appendfsync no

# 假设AOF的同步策略设置成 "always" 或者 "everysec"。那么后台的存储进程(后台存储或写入AOF日志)会产生非常多磁盘I/O开销。

# 某些Linux的配置下会使Redis由于 fsync() 而堵塞非常久。

# 注意。眼下对这个情况还没有完美修正,甚至不同线程的 fsync() 会堵塞我们的 write(2) 请求。

#

# 为了缓解这个问题,能够用以下这个选项。它能够在 BGSAVE 或 BGREWRITEAOF 处理时阻止 fsync()。

#

# 这就意味着假设有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。

# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)

#

# 假设你有延迟的问题那就把这个设为 "yes",否则就保持 "no"。这是保存持久数据的最安全的方式。

no-appendfsync-on-rewrite no

# 自己主动重写AOF文件

# 假设AOF日志文件大到指定百分比,Redis可以通过 BGREWRITEAOF 自己主动重写AOF日志文件。

#

# 工作原理:Redis记住上次重写时AOF日志的大小(或者重新启动后没有写操作的话。那就直接用此时的AOF文件),

# 基准尺寸和当前尺寸做比較。假设当前尺寸超过指定比例,就会触发重写操作。

#

# 你还须要指定被重写日志的最小尺寸。这样避免了达到约定百分比但尺寸仍然非常小的情况还要重写。

#

# 指定百分比为0会禁用AOF自己主动重写特性。

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

########## SLOW LOG 慢查询日志 ##########

# Redis慢查询日志能够记录超过指定时间的查询。执行时间不包含各种I/O时间。

# 比如:连接client,发送响应数据等。

仅仅计算命令执行的实际时间(这是唯一一种命令执行线程堵塞而无法同一时候为其它请求服务的场景)

#

# 你能够为慢查询日志配置两个參数:一个是超标时间。单位为微妙,记录超过个时间的命令。

# 还有一个是慢查询日志长度。当一个新的命令被写进日志的时候。最老的那个记录会被删掉。

#

# 以下的时间单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志。而0则会强制记录全部命令。

slowlog-log-slower-than 10000

# 这个长度没有限制。仅仅要有足够的内存即可。

你能够通过 SLOWLOG RESET 来释放内存。

slowlog-max-len 128

########## VIRTUAL MEMORY 虚拟内存 ##########

### 警告!虚拟内存在Redis 2.4是反对的,因性能问题。2.4版本号 VM机制彻底废弃,不建议使用此配置!

!!!!

。。。!!

# 虚拟内存能够使Redis在内存不够的情况下仍然能够将全部数据序列保存在内存里。

# 为了做到这一点,高频key会调到内存里,而低频key会转到交换文件中,就像操作系统使用内存页一样。

# 要使用虚拟内存,仅仅要把 "vm-enabled" 设置为 "yes",并依据须要设置以下三个虚拟内存參数就能够了。

vm-enabled no

# 这是交换文件的路径。

预计你猜到了。交换文件不能在多个Redis实例之间共享,所以确保每一个Redis实例使用一个独立交换文件。

# 最好的保存交换文件(被随机訪问)的介质是固态硬盘(SSD)。

# *** 警告 *** 假设你使用共享主机。那么默认的交换文件放到 /tmp 下是不安全的。

# 创建一个Redis用户可写的文件夹。并配置Redis在这里创建交换文件。

vm-swap-file /tmp/redis.swap

# "vm-max-memory" 配置虚拟内存可用的最大内存容量。

# 假设交换文件还有空间的话,全部超标部分都会放到交换文件中。

# "vm-max-memory" 设置为0表示系统会用掉全部可用内存,建议设置为剩余内存的60%-80%。

# 将全部大于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,全部索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,事实上是全部value都存在于磁盘。默认值为0。

vm-max-memory 0

# Redis交换文件是分成多个数据页的。

# 一个可存储对象能够被保存在多个连续页里。可是一个数据页无法被多个对象共享。

# 所以。假设你的数据页太大,那么小对象就会浪费掉非常多空间。

# 假设数据页太小,那用于存储的交换空间就会更少(假定你设置同样的数据页数量)

# 假设你使用非常多小对象,建议分页尺寸为64或32个字节。

# 假设你使用非常多大对象,那就用大一些的尺寸。

# 假设不确定。那就用默认值 :)

vm-page-size 32

# 交换文件中数据页总数。

# 依据内存中分页表(已用/未用的数据页分布情况),磁盘上每8个数据页会消耗内存里1个字节。

# 交换区容量 = vm-page-size * vm-pages

# 依据默认的32字节的数据页尺寸和134217728的数据页数来算,Redis的数据页文件会占4GB,而内存里的分页表会消耗16MB内存。

# 为你的应验程序设置最小且够用的数字比較好。以下这个默认值在大多数情况下都是偏大的。

vm-pages 134217728

# 同一时候可执行的虚拟内存I/O线程数。即訪问swap文件的线程数。

# 这些线程能够完毕从交换文件进行数据读写的操作。也能够处理数据在内存与磁盘间的交互和编码/解码处理。

# 多一些线程能够一定程度上提高处理效率,尽管I/O操作本身依赖于物理设备的限制。不会由于很多其它的线程而提高单次读写操作的效率。

# 特殊值0会关闭线程级I/O。并会开启堵塞虚拟内存机制。

# 设置最好不要超过机器的核数,假设设置为0,那么全部对swap文件的操作都是串行的.可能会造成比較长时间的延迟,可是对数据完整性有非常好的保证.

vm-max-threads 4

########## ADVANCED CONFIG 高级配置 ##########

# 当有大量数据时。适合用哈希编码(这会须要很多其它的内存)。元素数量上限不能超过给定限制。

# Redis Hash是value内部为一个HashMap。假设该Map的成员数比較少,则会採用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,例如以下2个条件随意一个条件超过设置值都会转换成真正的HashMap,

# 当value这个Map内部不超过多少个成员时会採用线性紧凑格式存储,默认是64,即value内部有64个下面的成员就是使用线性紧凑存储,超过该值自己主动转成真正的HashMap。

hash-max-zipmap-entries 512

# 当 value这个Map内部的每一个成员值长度不超过多少字节就会採用线性紧凑存储来节省空间。

hash-max-zipmap-value 64

# 与hash-max-zipmap-entries哈希相类似,数据元素较少的情况下,能够用还有一种方式来编码从而节省大量空间。

# list数据类型多少节点下面会採用去指针的紧凑存储格式

list-max-ziplist-entries 512

# list数据类型节点值大小小于多少字节会採用紧凑存储格式

list-max-ziplist-value 64

# 还有这样一种特殊编码的情况:数据全是64位无符号整型数字构成的字符串。

# 以下这个配置项就是用来限制这样的情况下使用这样的编码的最大上限的。

set-max-intset-entries 512

# 与第一、另外一种情况相似,有序序列也能够用一种特别的编码方式来处理,可节省大量空间。

# 这样的编码仅仅适合长度和元素都符合以下限制的有序序列:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

# 哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。

# redis所用的哈希表实现(见dict.c)採用延迟哈希刷新机制:你对一个哈希表操作越多,哈希刷新操作就越频繁;

# 反之,假设server很不活跃那么也就是用点内存保存哈希表而已。

# 默认是每秒钟进行10次哈希表刷新。用来刷新字典,然后尽快释放内存。

# 建议:

# 假设你对延迟比較在意的话就用 "activerehashing no",每一个请求延迟2毫秒不太好嘛。

# 假设你不太在意延迟而希望尽快释放内存的话就设置 "activerehashing yes"。

activerehashing yes

########## INCLUDES 包括 ##########

# 包括一个或多个其它配置文件。

# 这在你有标准配置模板可是每一个redisserver又须要个性设置的时候非常实用。

# 包括文件特性同意你引人其它配置文件,所以好好利用吧。

# include /path/to/local.conf

# include /path/to/other.conf

改动配置后。假设配置文件涉及到中文内容记得将文件存为UTF-8编码。

 

3、 redis-cli client使用

測试server启动连接情况

127.0.0.1:6379> ping

PONG

查看server级别信息(測试server)

127.0.0.1:6379> info

# Server

redis_version:2.8.19

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:9968db13395be4aa

redis_mode:standalone

os:Windows

arch_bits:64

multiplexing_api:winsock_IOCP

gcc_version:0.0.0

process_id:9204

run_id:fc4a126eaed1572b6855c9af511d3451eb358c85

tcp_port:6379

uptime_in_seconds:2365

uptime_in_days:0

hz:10

lru_clock:3087964

config_file:G:\software\redis\redis.windows.conf

# Clients

connected_clients:1

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:11568456

used_memory_human:11.03M

used_memory_rss:11534800

used_memory_peak:11568456

used_memory_peak_human:11.03M

used_memory_lua:35840

mem_fragmentation_ratio:1.00

mem_allocator:dlmalloc-2.8

# Persistence

loading:0

rdb_changes_since_last_save:0

rdb_bgsave_in_progress:0

rdb_last_save_time:1429148959

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:-1

rdb_current_bgsave_time_sec:-1

aof_enabled:0

加入数据

127.0.0.1:6379> set user hoojo

OK

127.0.0.1:6379> get user

"hoojo"

查看全部的key信息

127.0.0.1:6379> keys *

1) "key:000000000308"

2) "key:000000000900"

3) "key:__rand_int__"

4) "key:000000000809"

5) "key:000000000164"

6) "key:000000000887"

基本參数介绍

-h

设置检測主机IP地址。默觉得127.0.0.1

-p

设置检測主机的port号,默觉得6379

-s<socket>

server套接字(压倒主机和port)

-a

连接到Masterserver时使用的password

-r

运行指定的N次命令

-i

运行命令后等待N秒,如–i 0.1 info(运行后等0.1秒)

-n

指定连接N号ID数据库。如 –n 3(连接3号数据库)

-x

从控制台输入的信息中读取最后一个參数

-d

定义多个定界符为默认输出格式(默认: \n)

--raw

使用原数据格式返回输出内容

--latency

进入一个不断延时採样的特殊模式

--slave

模拟一个从server到主server的命令显示反馈

--pipe

使用管道协议模式

--bigkeys

监听显示数据量大的key值,--bigkeys -i 0.1

--help

显示命令行帮助信息

--version

显示版本

 

4、 redis-benchmark 性能測试工具

默认双击打开是依照默认的測试參数进行測试。

Redis具体解释_数据库_04

输入如上命令后会看到例如以下信息。表明同一时候并发10个连接,总共100次操作。

通俗易懂的说就是10个用户同一时候操作,总共每人操作10次的意思。

100 requests completed in 0.01 seconds (100个请求完毕于0.01秒)

10 parallel clients (10个客户端并发)

3 bytes payload (每次写入3个字节)

keep alive: 1 (保存一个链接数)

100.00% <= 1 milliseconds (100%的操作小于1秒完毕)

16666.67 requests per second (每秒完毕16666.67次查询)

命令參数说明

redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

-h <hostname> 主机名 (默认 127.0.0.1)

-p <port> 主机端口 (默认 6379)

-s <socket> 主机套接字 (覆盖主机和port)

-c <clients> 并发连接的数量 (默认 50)

-n <requests> 请求总数 (默认 10000)

-d <size> SET/GET数据的字节大小(默认 2)

-k <boolean> 1=keep alive 0=reconnect (默认 1)

-r <keyspacelen> SET/GET/INCR使用随机产生的key, SADD使用随机值使用这个选项 get/set keys时会用mykey_rand:000000012456取代常量key。 <keyspacelen>參数决定了随机数产生的最大值,比方,设置參数为10。那么产生的随机数范围是rand:000000000000 -rand:000000000009

-P <numreq> Pipeline请求的数量. 默认 1 (不使用pipeline).

-q 展示query/sec值

--csv 以CSV格式输出

-l 本地循环. 一直执行測试

-t <tests> 在执行逗号切割列表的測试. 測试的名字与产生输出的名字一样。

-I 空暇模式. 打开 N 个空暇连接。然后等待.

执行演示样例

对指定server、port进行20个同一时候并发操作。总共操作100000次

redis-benchmark -h 192.168.1.136 -p 6379 -n 100000 -c 20

測试set写入操作1000000次。随机数范围在100000000

redis-benchmark -t set -n 1000000 -r 100000000

測试ping、set、get操作100000次。结果输出用csv格式

redis-benchmark -t ping,set,get -n 100000 –-csv

redis-benchmark -r 10000 -n 10000 lpush mylist ele:rand:000000000000

 

5、 redis-check-aof 基本使用方法

检查本地日志信息,加--fix參数为修复log文件

redis-check-aof.exe log.aof

 

6、 redis-check-dump 检查数据库文件

redis-check-dump.exe dump.rdb 会输出该文件大小、使用情况。

 

四、影响Redis性能的因素

* 网络带宽和延迟。在运行基准測试前使用ping高速检測client和server端的延迟是一个良好的做法。

对于带宽,比較好的做法是预计Gbits/s 的吞吐量和网络的理论带宽值比較。在非常多实际的情况。Redis的吞吐量在网络之前会受限于CPU。

* CPU也会是一个重要因素。因为单线程的,Redis受益于高速的含有巨大缓存的CPU。

* 内存的速度和容量对于小的对象影响不大。但对于大于10KB的对象,可能对须要注意。通常购买昂贵的高速内存模块并非真正的非常有效。

* Redis在虚拟机上执行慢。虚拟化对非常多普通操作来说代价太高了,Redis并没有添加多少开销在所需的系统调用和网络中断上。

* client和server在一台机器执行,对于基准測试TCP/IP回送和UNIX域套接字都能够使用。取决于平台。但UNIX域套接字比TCP/IP回送添加50%的吞吐量。

* 当大量使用 pipelining时,UNIX域套接字获得的性能优点会降低。

* 当以太网訪问Redis时。在数据大小小于以太网数据包的大小(大约1500字节)时,聚集命令使用 pipelining会很有效。

* 在多CPU套接字server。Redis的表现变得依赖于NUMA配置和处理位置。

* 在高端配置,client连接的数量也是一个重要的因素。基于epool/kqueue模型。Redis的事件循环是相当可伸缩的。

* 在高端的配置,通过调优NIC(s)配置和相关中断可能取得高吞吐量。

* 依据平台,Redis编译能够使用不同的内存分配器,这可能有不同的行为在原始速度,内部和外部的碎片方面