史上最全Redis高可用技术解决方案大全

2018-4-9 杜世伟 Redis

Redis常见的几种主要使用方式:

  • Redis 单副本

  • Redis 多副本(主从)

  • Redis Sentinel(哨兵)

  • Redis Cluster

  • Redis 自研


Redis各种使用方式的优缺点:

1
Redis单副本

Redis 单副本,采用单个Redis节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。


优点:

1、架构简单、部署方便

2、高性价比,当缓存使用时无需备用节点(单实例可用性可以用supervisor或crontab保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。

阅读全文>>

标签: redis sentinel cluster

评论(0) 浏览(2119)

同为分布式缓存,为何Redis更胜一筹?

2018-3-26 杜世伟 架构

如今,市面上的缓存解决方案已经逐步成熟了,今天我将选取其中一些代表性的方案包括Redis、Memcached和Tair进行对比,帮助大家在生产实践中更好地进行技术选型。


一、常用的分布式缓存的对比


常用的分布式缓存包括Redis、Memcached和阿里巴巴的Tair(见下表),因为Redis提供的数据结构比较丰富且简单易用,所以Redis的使用广泛。



下面我们从9个大方面来对比最常用的Redis和Memcached。

阅读全文>>

标签: redis memcache tari

评论(0) 浏览(2037)

基于php实现多进制转换与兑换码生成的探索

2018-1-15 杜世伟 Php

最近要做一个兑换码生成的功能,之前有做过32位唯一码生成器,但是在业务需求中,32位的兑换码有些过长了,用户在应用内填写的时候会比较麻烦,不是很友好,倒是可以做成二维码的形式扫一下就行了,但是业务中还是存在输入兑换码的行为,所以本篇主要是关于以尽量短的字符来生成兑换码,同时要保证唯一性以及生成机制复用性(也就是利用这套机制可以生成不同种类的兑换码)的探索

以下示例代码均基于TPRCMS编写

探索一: 进制转换

生成的32位唯一码是16进制的哈希字符串,我就在想是不是可以通过提高进制来缩短字符串长度,所以有了如下的代码

代码地址: 多进制转换器ConvertLogic
其中关于10进制与62进制互转的部分,参考了《PHP 10进制与62进制互转,可用于生成短网址》

实例代码

$uuid = "cd5fd2cfeb40aafe060f4d9597348be7";
$str = ConvertLogic::convert( $uuid, 16, 62); 

输出

string(32) "cd5fd2cfeb40aafe060f4d9597348be7"
string(22) "6fxdxREtzxq6qNdSghGm7t" 

阅读全文>>

标签: redis uniqid 进制转换 兑换码

评论(0) 浏览(14383)

《Redis官方教程》Redis集群规范

2016-6-20 杜世伟 Redis

Redis集群规范


欢迎来到Redis集群规范。在这里你可以找到有关Redis的算法和设计的基本原理。这篇文章是一项正在进行的工作,因为它是不断地与Redis的实际实现同步。

 主要属性和设计原理


Redis的集群目标


 Redis集群是一个分布式的实现,具有以下目标,按设计的重要性排序:

  • 高性能,并且多达1000个节点的线性可扩展性。没有代理,使用异步复制,并且在进行赋值时没有合并操作。
  • 可接受程度的写安全:当客户端与大多数master节点建立连接后,系统努力(使用最优的方式)保持来自客户端的写操作。通常有小窗口,其中确认的写操作可能会丢失。当客户端在一个小的分区中,窗口丢失写操作会更大。
  • 可用性:Redis集群支持网络分区——其中大部分主节点都可访问,并且不可访问的各master节点对应的从至少一个可访问。而且采用副本迁移,有多个从的主会提供一个从给没有从的主。

阅读全文>>

标签: redis

评论(0) 浏览(1983)

Redis 未授权访问缺陷可轻易导致系统被黑

2015-11-15 杜世伟 Redis

        Redis 默认情况下,会绑定在 0.0.0.0:6379,并且没有开启auth认证,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。

        解决办法:

        a.配置bind选项, 限定可以连接Redis服务器的IP(如:bind 127.0.0.1), 并修改redis的默认端口6379(如:port 6300)
        b.配置AUTH, 设置密码开启密码验证, 密码会以明文方式保存在redis配置文件中.
        c.配置rename-command CONFIG “RENAME_CONFIG”, 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度
        d.好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如conf

阅读全文>>

标签: redis linux

评论(0) 浏览(9923)

(转)从 Redis 迁移到 SSDB

2015-2-2 杜世伟 ssdb

工具

tools 目录中的 redis-import.php PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上.

用法:

php redis-import.php redis_host redis_port redis_db ssdb_host ssdb_port

参数:

  • redis_host: Redis 运行所在的 IP 或者主机名
  • redis_port: Redis 监听的端口
  • redis_db: Redis 的 DB 编号
  • ssdb_host: SSDB 运行所在的 IP 或者主机名
  • ssdb_port: SSDB 监听的端口

阅读全文>>

标签: redis ssdb

评论(0) 浏览(4946)

Redis配置文件详细介绍

2013-12-31 杜世伟 Redis

Redis是一个开源(BSD许可)的内存数据结构存储,可作为数据库,缓存和消息队列。相比Memcached它支持更多的数据结构,如string(字符串),hash(哈希),list(链表),set(集合),zset(有序集合),位图,hyperloglogs和具有半径查询的地理空间索引。Redis具有内置复制,Lua脚本,LRU回收,事务和不同级别的磁盘持久化,并通过Redis Sentinel提供高可用性和自动分区的Redis Cluster。

本章学习下Redis主配置文件涉及的知识点,有助于更灵活的使用它。

# vi redis.conf

daemonize yes #是否以后台进程运行
pidfile/var/run/redis/redis-server.pid #pid文件位置
port 6379 #监听端口
bind 127.0.0.1 #绑定地址,如外网需要连接,设置0.0.0.0
timeout 300 #连接超时时间,单位秒
loglevel notice #日志级别,分别有:debug (适用于开发和测试),verbose(更详细信息),notice(适用于生产环境),warning(只记录警告或错误信息)
logfile/var/log/redis/redis-server.log #日志文件位置
syslog-enabled no #是否将日志输出到系统日志
databases 16 #设置数据库数量,默认数据库为0
############### 快照方式 ###############

阅读全文>>

标签: redis redis.conf

评论(0) 浏览(1645)

使用Redis的五个注意事项

2012-10-23 杜世伟 Redis

1.使用key值前缀来作命名空间

虽然说Redis支持多个数据库(默认32个,可以配置更多),但是除了默认的0号库以外,其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。

另外,在使用前缀作为命名空间区隔不同key的时候,最好在程序中使用全局配置来实现,直接在代码里写前缀的做法要严格避免,这样可维护性实在太差了。

阅读全文>>

标签: redis

评论(0) 浏览(3859)

redis 排序

2012-9-12 杜世伟 Redis

本篇文章介绍下redis排序命令.redis支持对list,set和sorted set元素的排序。排序命令是sort 完整的命令格式如下:
SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]
下面我们一一说明各种命令选项
(1)sort key
这个是最简单的情况,没有任何选项就是简单的对集合自身元素排序并返回排序结果.下面给个例子

阅读全文>>

标签: redis sort

评论(0) 浏览(4000)

Powered by emlog 沪ICP备2023034538号-1