redis演练(1) 搭建redis服务

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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            stringshasheslistssetssorted sets with range queries, bitmapshyperloglogs and geospatial indexes with radius queries. Redis has built-in replicationLua scriptingLRU evictiontransactions 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安装还简单。

1
2
3
4
5
6
7
8
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  install
cp  /usr/local/src/redis-3 .2.3 /redis .conf   /usr/local/redis/

工具列表

1
2
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

1
2
3
4
5
6
/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 高级
...







本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1843574,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
2月前
|
NoSQL Redis Windows
windows服务器重装系统之后,Redis服务如何恢复?
windows服务器重装系统之后,Redis服务如何恢复?
64 6
|
3月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
|
3月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
|
3月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
3月前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
|
2月前
|
NoSQL Linux 测试技术
redis的安装步骤及前台,后台redis服务启动
这篇文章介绍了Redis的安装步骤,包括在Linux系统中下载、传输、解压、编译、安装Redis,以及Redis服务的前台和后台启动方法。
redis的安装步骤及前台,后台redis服务启动
|
2月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
236 3
|
3月前
|
存储 NoSQL Redis
【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)
【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)
【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)
|
3月前
|
NoSQL 网络协议 Linux
【AKS+Redis】AKS中客户端(ioredis)遇见Azure Redis服务Failover后链接中断的可能性
【AKS+Redis】AKS中客户端(ioredis)遇见Azure Redis服务Failover后链接中断的可能性