首页 > 代码库 > redis演练(1) 搭建redis服务

redis演练(1) 搭建redis服务

Redis VS Memcached

通过对比学习,可以加深理解组件的特性。下面两段文字,摘自各自的官方文档。

http://www.redis.io/

http://memcached.org/

Redis官方简介

Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as            strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Memcached官方简介

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page        rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

两者主要有以下区别(也是redis更优秀的地方)

  1.  redis可以用来做存储(storge), 而memccached是用来做缓存(cache)
      这个特点主要因为其有”持久化”的功能.

  2. 存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”,
      而redis则可以存储字符串,链表,哈希结构,集合,有序集合.

  3. redis服务端支持高可用。

1.Redis安装与启动

比memcached安装还简单。

$ cd /usr/local/src
$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz
$ tar xzf redis-3.2.3.tar.gz
$ cd redis-3.2.3
#如果要执行make test测试,需要安装tcl
$ yum install tcl
$ make PREFIX=/usr/local/redis
$ cp /usr/local/src/redis.conf  /usr/local/redis/

工具列表

$ ls /usr/local/redis/bin/
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

redis-benchmark  性能测试工具

redis-check-aof  日志文件检测工(比如断电造成日志损坏,可以检测并修复)

redis-check-dump  快照文件检测工具,效果类上

redis-cli  客户端

redis-server 服务端


redis 版hello world

$ /usr/local/redis/bin/redis-server
$ /usr/local/redis/bin/redis-cli 
redis> set foo bar
OK
redis> get foo
"bar"

2.配置文件(redis.conf)

由于redis比memcached功能更全,命令更多,配置参数也响应更多。简单分类下

模块
作用
参数
 INCLUDES包含

 NETWORK
网络

GENERAL
公共
daemonize no

#默认情况下redis 不是以守护进程的模式运行。

pidfile /var/run/redis.pid
#在守护进程模式下,pid进程号文件路径的存储位置

port 6379
#监听的端口号,设置为0的话,redis不会对tcp 连接进行监听
loglevel notice
#记录日志的级别

logfile stdout
#日志文件记录位置, 如果采用daemonize 守护进程的模式,且参数值为stdout,那logs会被重定向到/dev/null

logfile stdout
#日志文件记录位置, 如果采用daemonize 守护进程的模式,且参数值为stdout,那logs会被重定向到/dev/null
syslog-enabled no
#将日志信息记录到 syslog 文件中。默认不允许;
syslog-facility local0  (必须是 LOCAL 0 -- LOCAL 7)
作为syslog 的日志设备
databases 16
#数据库的数量, select dbid ; dbid  取值范围between 0 and ‘databases‘-1

REPLICATION复制
slaveof <masterip> <masterport>

#只在slave添加该参数,用于创建一个镜像服务;

masterauth <master-password>
#如果master使用了requirepass参数,slave就要使用上述参数,进行密码验证。
slave-serve-stale-data yes
#当slave丢失与master端的连接,或者复制仍在处理,那么slave会有下列两种表现:
 当本参数值为yes时,slave为继续响应客户端请求,尽管数据已不同步甚至没有数据(出现在初次同步的情况下);
 当本参数值为no时,slave会返回"SYNC with master in progreee"的错误信息;
slave-read-only yes
# slave是可以写入的数据可以短暂存储,(会被master的数据同步掉);read only slave 并不是
暴漏给不信任的客户端,对于master 传过来的 administrative commands,可以用 rename-command 进行隐藏。

repl-ping-slave-period 10 
#slave根据指定的时间间隔向服务器发送ping请求,默认10s

SNAPSHOTTING

快照

将内存中的数据刷写到磁盘上

save <seconds>  <changes>

触发刷新操作

stop-writes-on-bgsave-error yes
#默认情况下,如果在RDB snapshots持久化过程中出现问题,设置该参数后,Redis是不允许用户进行任何更新操作(set...)

rdbcompression yes  
#在导出.RDB数据库文件的时候采用LZF压缩字符串和对象。想节省一些CPU资源可以设置为no,但数据量可能会很大。
rdbchecksum yes
#RDB快照制作过程中会在文件的末尾写入 crc64的校验值。这样可能很好的保证数据的正确性。

dbfilename dump.rdb
# 快照文件名
dir ./ 
#DB工作目录,必须是目录名,dumpfile存储的位置。

repl-timeout 60
#设置了大块数据I/O、向master请求数据和ping响应的过期时间,默认60s,
确保这个值比 repl-ping-slave-period 大,否则master和slave之间的传输过期时间比预想的要短。
repl-disable-tcp-nodelay no
#默认为no,当选择yes的时候, master会向slave发送少量的tcp packets,(当然占用的带宽是很少的)
这样的一个负面影响 delay slave接受数据时间,40 milliseconds 的延迟,在 高流量或者 master slave之间中间节点数很多的情况
下,建议变为 yes
slave-priority 100
#该参数主要是在HA 方面的应用, 优先级越低,月可能成为master候选人

SECURITY安全

#requirepass foobared

配置redis访问密码的参数

#rename-command

重命名或禁用某些命令

LIMITS限制
maxclients 10000

#最大并发连接数,默认为一万,这个跟系统本身的 open-file-limit 有关

maxmemory <bytes>
#最大使用内存;

maxmemory-policy  
# 内存策略:如果达到内存限制了,Redis如何删除key。你可以在下面五个策略里面选
volatile-lru -> 根据LRU算法生成的过期时间来删除。
allkeys-lru -> 根据LRU算法删除任何key。
volatile-random -> 根据过期设置来随机删除key。
allkeys->random -> 无差别随机删。
volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
noeviction -> 谁也不删,直接在写操作时返回错误。
对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。
maxmemory-samples 3
#个人认为该参数主要用于测试达到内存最大的时候的,现象吧。
LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),可以用样例做测试

APPEND ONLY MODE
appendfilename appendonly.aof
#append file 的文件名称

appendfsync everysec
#append log AOF日志文件同步的频率刷写磁盘的频率
fsync() 请求操作系统马上把数据写到磁盘上
Redis支持三种不同的模式:
no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
always:每次写操作都立刻写入到aof文件。慢,但是最安全。
everysec:每秒写一次。折衷方案。
默认的 "everysec" 通常来说能在速度和数据安全性之间取得比较好的平衡。

no-appendfsync-on-rewrite no
# 如果AOF的同步策略设置成 "always" 或者 "everysec",那么后台的存储进程(后台存储或写入AOF日志)会产生很多磁盘I/O开销。
某些Linux的配置下会使Redis因为 fsync() 而阻塞很久。
目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们的 write(2) 请求。
为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止 fsync()。
这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
如果有延迟的问题那就把这个设为 "yes",否则就保持 "no",这是保存持久数据的最安全的方式。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#AOF文件自动重写。
LUA SCRIPTING 
LUA脚本

REDIS CLUSTER 
集群

cluster-enabled

用于开实例的集群模式

cluster-conf-file

设定了保存节点配置文件的路径, 默认值为 nodes.conf 。

cluster-node-timeout 15000

#节点互连超时的阀值 

cluster-slave-validity-factor

slave节点检测因数,开始failover的超时时限是通过factor与timeout的乘积来确定的。

 cluster-require-full-coverage <yes/no> : 如果某一些key space没有被集群中任何节点覆盖,集群将停止接受写入。
   cluster-migration-barrier <count>: 数据迁移的副本临界数,这个参数表示的是,一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来给另一个没有任何从节点的主节点。

 SLOW LOG日志
#Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间。
例如:连接客户端,发送响应数据等。只计算命令运行的实际时间(这是唯一一种命令运行线程阻塞而无法同时为其他请求服务的场景
slowlog-log-slower-than 10000(单位微秒)
#慢查询日志长度,这个长度没有限制。只要有足够的内存就行可以通过 SLOWLOG RESET 来释放内存(当一个新的命令被写进日志的时候,最老的那个记录会被删掉。)。
slowlog-max-len 128
(ps:日志居然是在内存里面的,)

对于虚拟内存的使用,
### 警告!虚拟内存在Redis 2.4是反对的。
### 非常不鼓励使用虚拟内存!!
在2.6中 根本没有其相关配置,
 LATENCY MONITOR监控报告
...
EVENT NOTIFICATION
通知,消息队列
...
ADVANCED CONFIG高级
...




参考资源

http://weipengfei.blog.51cto.com/1511707/1217504


本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/1843574

redis演练(1) 搭建redis服务