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

时间: 2024-12-28 15:22:28

redis演练(1) 搭建redis服务的相关文章

Redis → Windows下搭建redis集群

一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主服务器宕机无备用服务器,多个节点网络互联数据共享,所有节点都是一主一从(也可以一主多从),其中不提供服务,只做为备份,emmm我就不多说废话了,直接进入主题. 没有多的服务器就只能单机搭建集群了 原文地址:https://www.cnblogs.com/BalmyLee/p/12019398.html

memcached演练(1) 搭建memcached服务

memcached已经火了好多年了,现在网上关于memcached的资源相当多了,我就不浪费话语了.干脆写一个实战系列,坚持一切用实施说话. 环境介绍 Linux虚拟机 内核信息 [[email protected] ~]# uname -aLinux hadoop1 2.6.32-358.el6.i686 内存:1G 安装过程 1.准备编译环境,安装必须的gcc,make工具,如果没有安装yum,最好安装下.网上有很多共享的yum源. 2.下载最新版本的libevent # wget http

redis演练聚集

redis演练(1) 搭建redis服务 redis演练(2) 最全redis命令列表 redis演练(3) redis事务管理 redis演练(4) redis基准测试 redis演练(5) redis持久化 redis演练(6) redis主从模式搭建 redis运维命令及参数整理 redis演练(7) redis Sentinel实现故障转移 redis演练(8) redis Cluster 集群环境安装

redis演练(7) redis Sentinel实现故障转移

书接上文<redis演练(6) redis主从模式搭建>. <redis演练(6) redis主从模式搭建>中仅仅配置了redis主从环境.分别配置了2个主从结构. 分别是1.有向无环,2星型模型.配置起来非常简单.但是,遗留了一个尾巴,没有阐述.如果master宕掉了怎么办?redis如何实现fail-over故障转移?本文,就重点说一下这块.主要内容 手动实现fail-over效果 sentinel实现自动fail-over效果 手动实现fail-over效果 #有向无环模型(

redis+mysql架构搭建

redis+mysql框架搭建 redis是一个key-value存储系统.和memcached类似,不过redis支持的value类型更多,主要有:string(字符串).list(链表).set(集合).zset(有序集合)和hash(哈希类型).redis和memcached一样,为了保证效率,都是把数据缓存在内存中.区别是redis会周期性的把更新的数据写入磁盘或者把修改的操作写入追加的记录文件,并且在此基础上实现master-slave主从同步. 简单的比较redis和memcache

memcached演练(2) 访问memcached服务

通过上节<memcached演练(1) 搭建memcached服务>,已经成功在linux虚拟机上安装了memcached服务,并设置了自启动. STAT version 1.4.29 Mem:          1891 主要内容 使用telnet命令行工具,操作memcached服务 使用java spymemcached工具访问memcached服务 监控插入不同数据量的数据,响应时间 监控memcached主机繁忙&清闲对比情况 调整memcached的内存指标,插入相同的数据

使用Codis搭建redis集群服务

转(http://www.jianshu.com/p/f8e968e57863) 一. 应用场景 redis 作为数据结构存储引擎,有着很多优点 高性能单机引擎可以达到5-10W qps 数据结构全面,支持快速开发业务string,list,set,sorted set, hashes 问题: 存储容量受限单机最大容量即为单机内存最大容量 单机数据的持久化依赖aof和rdb机制,如果机器整个down掉,服务不可用 二. redis集群选型 正是由于单机redis引擎有着这样的问题,所以,基本每个

【docker构建】基于docker搭建redis数据库缓存服务

搭建redis服务 首先拉取镜像==>运行镜像为容器 # 先搜索下redis镜像 [[email protected]_0_10_centos wordpress]# docker search redis # 拉取镜像(不接版本,默认拉取最新版本) [[email protected]_0_10_centos wordpress]# docker pull redis Using default tag: latest latest: Pulling from library/redis 00

day24——NoSQL简介、redis服务搭建、redis连接池、redis管道

一.Redis 安装 yum install -y epel-releaseyum install -y gcc jemalloc-devel wgetcd /usr/local/srcwget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 -O redis-2.8.21.tar.gztar xf redis-2.8.21.tar.gzcd redis-2.8.21makemake PREFIX=/usr/local/redis