赞
踩
目录
1、Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的应用程序的完美解决方案。
2、Redis从它的许多竞争继承来的三个主要特点:
优势:
1.解压缩redis-2.8.3.tar.gz
2.make
3.make install
4.启动服务redis-server redis.conf
5.测试服务安装,运行客户端:redis-cli
6.主从配置
- 修改从服务器的redis.conf,添加slaveof 192.168.137.18 6379
- 运行过程中,通过redis-cli中命令可以动态不停机切换主从
- 主:slaveof no one
- 从:slaveof 192.168.137.19 6379
7.配置从的持久化aof方式:
- 关闭自动snapshot:
-
- #save 900 1
- #save 300 10
- #save 60 10000
-
- 开启snapshot:
- appendonly yes
-
- 此处可以动态在redis-cli中不停机运行命令:CONFIG SET APPENDONLY YES
- 下载redis3.0.5
- wget http://download.redis.io/releases/redis-3.0.5.tar.gz
-
- 解压文件,并创建软件连接
- tar -zxvf redis-3.0.5.tar.gz -C /export/servers/
- ln –s redis-3.0.5/ redis
-
- 编译redis源码
- cd /export/servers/redis
- make(先安装gcc)
-
- 将编译后的可执行文件安装到/user/local/redis
- make PREFIX=/usr/local/redis install
- 启动方式一:Redis前台默认启动
- 进入redis安装目录,并启动Redis服务
- cd /usr/local/redis/bin/
- ./redis-server
-
- 启动方式二:Redis使用配置文件启动
- 拷贝源码中的redis.conf文件到redis的安装目录
- cp /export/servers/redis/redis.conf /usr/local/redis/
-
- 修改redis.conf的属性
- daemonize no è daemonize yes
-
- 启动redis服务
- cd /usr/local/redis
- bin/redis-server ./redis.conf
- 修改生成默认日志文件位置
- logfile "/usr/local/redis/logs/redis.log"
-
- 配置持久化文件存放位置
- dir /usr/local/redis/data/redisData
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.8.0</version>
- </dependency>
有两种持久化方案:RDB和AOF
1) RDB方式按照一定的时间间隔对数据集创建基于时间点的快照。
2) AOF方式记录Server收到的写操作到日志文件,在Server重启时通过回放这些写操作来重建数据集。该方式类似于MySQL中基于语句格式的binlog。当日志变大时Redis可在后台重写日志。
1)修改redis.config配置文件,找到appendonly。默认是appendonly no。改成appendonly yes
2)再找到appendfsync 。默认是 appendfsync everysec
- appendfsync always
- #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
-
- appendfsync everysec
- #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
-
- appendfsync no
- #完全依赖os,性能最好,持久化没保证
默认情况下,Redis保存数据集快照到磁盘,名为dump.rdb的二进制文件。可以设置让Redis在N秒内至少有M次数据集改动时保存数据集,或者你也可以手动调用SAVE或者BGSAVE命令。
例如,这个配置会让Redis在每个60秒内至少有1000次键改动时自动转储数据集到磁盘
save 60 1000
连接操作相关的命令
持久化
远程服务控制
对value操作的命令
对String操作的命令
对List操作的命令
对Set操作的命令
对Hash操作的命令
数据类型 | 使用场景 |
String | 比如说 ,我想知道什么时候封锁一个IP地址。Incrby命令 |
Hash | 存储用户信息【id,name,age】 Hset(key,field,value) Hset(userKey,id,101) Hset(userKey,name,admin) Hset(userKey,age,23) ----修改案例---- Hget(userKey,id) Hset(userKey,id,102) 为什么不使用String 类型来存储 Set(userKey,用信息的字符串) Get(userKey) 不建议使用String 类型 |
List | 实现最新消息的排行,还可以利用List的push命令,将任务存在list集合中,同时使用另一个命令,将任务从集合中取出[pop]。 Redis—list数据类型来模拟消息队列。【电商中的秒杀就可以采用这种方式来完成一个秒杀活动】 |
Set | 特殊之处:可以自动排重。比如说微博中将每个人的好友存在集合(Set)中, 这样求两个人的共通好友的操作。我们只需要求交集即可。 |
Zset | 以某一个条件为权重,进行排序。 京东:商品详情的时候,都会有一个综合排名,还可以按照价格进行排名。 |
概念:访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
解决方案:
概念:大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
解决方案:可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。
概念:一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。
解决方案:在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。Redis 的策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
主从复制优缺点:
优点
缺点
Redis的主从复制模式下,当主节点不能提供服务,需要手动将一台从节点切换为主节点,这不是一种推荐的方式。为此,Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题。
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行 failover(故障转移) 过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,也就是大部分哨兵节点对主节点的下线做了同意的判定,那么这个判定就是客观的,即客观下线。接着哨兵之间就通过投票的方式选举出一个哨兵节点作为领导者,负责进行故障转移(failover)的工作(故障转移的工作只需要一个哨兵节点来完成)。具体包括:
哨兵模式的优缺点:
优点
缺点
Redis 的哨兵模式解决了主从不能自动故障恢复的问题,但在这种模式下 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容。Redis Cluster是一种服务器 Sharding 技术。
集群的数据分片:Redis 集群没有使用一致性 hash,而是引入了虚拟槽分区的算法。会把Redis 集群分成16384 个槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽。集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点:
当客户端的请求过来,会首先通过对key进行 CRC16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作,这样就实现了数据的访问更新。
集群模式的优缺点
优点
缺点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。