搜档网
当前位置:搜档网 › Redis开发常用规范

Redis开发常用规范

Redis开发常用规范
Redis开发常用规范

Redis开发常用规范

1.冷热数据分离,不要将所有数据全部都放到Redis中

虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵。建议根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数据可以使用

MySQL/ElasticSearch/MongoDB等基于磁盘的存储方式,不仅节省内存成本,而且数据量小在操作时速度更快、效率更高!

2.不同的业务数据要分开存储

不要将不相关的业务数据都放到一个Redis实例中,建议新业务申请新的单独实例。因为Redis为单线程处理,独立存储会减少不同业务相互操作的影响,提高请求响应速度;同时也避免单个实例内存数据量膨胀过大,在出现异常情况时可以更快恢复服务!

3.规范Key的格式

合适的key,便于查看,统计,排错。

“平台缩写“+“:”+“项目名”+“:”+“业务含义”

例如:GW:TRADE:USERID

GW是新网关,TRADE是交易项目,USERID为业务ID。

":"-作为key分隔符,方便客户端工具作为目录分级

4.存储的Key一定要设置超时时间

如果应用将Redis定位为缓存Cache使用,对于存放的Key一定要设置超时时间!因为若不设置,这些Key会一直占用内存不释放,造成极大的浪费,而且随着时间的推移会导致内存占用越来越大,直到达到服务器内存上限!另外Key的超时长短要根据业务综合评估,而不是越长越好!(某些业务要求key长期有效。可以在每次写入时,都设置超时时间,让超时时间顺延。)

public Boolean set(final byte[] key, final byte[] value, final long liveTime) {

return redisTemplate.execute(new RedisCallback() {

public Boolean doInRedis(RedisConnection

connection) throws DataAccessException {

connection.set(key, value);

if (liveTime > 0) {

connection.expire(key, liveTime);

}

return Boolean.TRUE;

}

});

}

5.对于必须要存储的大文本数据一定要压缩后存储

对于大文本【超过500字节】写入到Redis时,一定要压缩后存储!大文本数据存入Redis,除了带来极大的内存占用外,在访问量高时,很容易就会将网卡流量占满,进而造成整个服务器上的所有服务不可用,并引发雪崩效应,造成各个系统瘫痪!

public Boolean setBigValue(final byte[] key, final byte[] value, final long liveTime){ return redisTemplate.execute(new RedisCallback() {

public Boolean doInRedis(RedisConnection

connection) throws DataAccessException {

byte[] compressedBytes = https://www.sodocs.net/doc/9615386465.html,press(value);

connection.set(key, compressedBytes);

if (liveTime > 0) {

connection.expire(key, liveTime);

}

return Boolean.TRUE;

}

});

}

压缩可参考:

public class CompressUtil {

private static final Inflater infl = new Inflater();

private static final Deflater defl = new Deflater();

private CompressUtil(){

}

public static byte[] uncompress(byte[] inputByte) throws IOException { int len = 0;

infl.setInput(inputByte);

ByteArrayOutputStream bos = new ByteArrayOutputStream();

byte[] outByte = new byte[1024];

try {

while (!infl.finished()) {

len = infl.inflate(outByte);

if (len == 0) {

break;

}

bos.write(outByte, 0, len);

}

infl.end();

} catch (Exception e) {

} finally {

bos.close();

}

return bos.toByteArray();

}

public static byte[] compress(byte[] inputByte) throws IOException { int len = 0;

defl.setInput(inputByte);

defl.finish();

ByteArrayOutputStream bos = new ByteArrayOutputStream();

byte[] outputByte = new byte[1024];

try {

while (!defl.finished()) {

len = defl.deflate(outputByte);

bos.write(outputByte, 0, len);

}

defl.end();

} finally {

bos.close();

}

return bos.toByteArray();

}

}

6.线上Redis禁止使用Keys正则匹配操作

Redis是单线程处理,在线上KEY数量较多时,操作效率极低【时间复杂度为O(N)】,该命令一旦执行会严重阻塞线上其它命令的正常请求,而且在高QPS情况下会直接造成Redis服务崩溃!如果有类似需求,请使用scan命令代替!

//此操作禁止

public Set get(final byte[] pattern){

return redisTemplate.execute(new RedisCallback>() {

@Override

public Set doInRedis(RedisConnection

connection) throws DataAccessException {

return connection.keys(pattern);

}

});

}

7.可靠的消息队列服务

Redis List经常被用于消息队列服务。假设消费者程序在从队列中取出消息后立刻崩溃,但由于该消息已经被取出且没有被正常处理,那么可以认为该消息已经丢失,由此可能会导致业务数据丢失,或业务状态不一致等现象发生。为了避免这种情况,Redis提供了RPOPLPUSH命令,消费者程序会原子性的从主消息队列中取出消息并将其插入到备份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。同时还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它的消费者程序继续处理。

8.谨慎全量操作Hash、Set等集合结构

在使用HASH结构存储对象属性时,开始只有有限的十几个field,往往使用HGETALL获取所有成员,效率也很高,但是随着业务发展,会将field扩张到上百个甚至几百个,此时还使用HGETALL 会出现效率急剧下降、网卡频繁打满等问题【时间复杂度O(N)】,此时建议根据业务拆分为多个Hash 结构;或者如果大部分都是获取所有属性的操作,可以将所有属性序列化为一个STRING类型存储!同样在使用SMEMBERS操作SET结构类型时也是相同的情况!

9.根据业务场景合理使用不同的数据结构类型

目前Redis支持的数据库结构类型较多:字符串(String),哈希(Hash),列表(List),集合(Set),有序集合(Sorted Set), Bitmap, HyperLogLog和地理空间索引(geospatial)等,需要根据业务场景选择合适的类型,常见的如:String可以用作普通的K-V、计数类;Hash可以用作对象如商品、经纪人等,包含较多属性的信息;List可以用作消息队列、粉丝/关注列表等;Set可以用于推荐;Sorted Set可以用于排行榜等!

redis3.0.2 分布式集群安装详细步骤

redis3.0.2 分布式集群安装详细步骤 --(centos5.8 X64系统) 版本历史 一: redis cluster介绍篇 1:redis cluster的现状 目前redis支持的cluster特性(已亲测): 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 2:redis cluster 架构 1)redis-cluster架构图

架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value 2) redis-cluster选举:容错

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master 节点通信超过(cluster-node-timeout),认为当前master节点挂掉. (2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的 操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态. b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态. 二.Redis集群安装篇(centos5.8 X64系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)

Redis在大数据中的使用技巧

Redis在大数据中的使用技巧 今天将会跟大家讨论一些Redis在大数据中的使用,包括一些Redis的使用技巧和其他的一些内容。 一、Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。 这里可以打开看一下,NewLife.Core里面有一个NewLife.Caching的命名空间,里面有一个Redis类,里面实现了Redis的基本功能;另一个类是RedisClient是Redis的客户端。 Redis的核心功能就是有这两个类实现,RedisClient代表着Redis客户端对服务器的一个连接。Redis真正使用的时候有一个Redis连接池,里面存放着很多个RedisClient对象。 所以我们Redis的封装有两层,一层是NewLife.Core里面的Redis以及RedisClient;另一层就是NewLife.Redis。这里面的FullRedis是对Redis的实现了Redis的所有的高级功能。 这里你也可以认为NewLife.Redis是Redis的一个扩展。 二、Test实例讲解Redis的基本使用 1、实例 这里https://www.sodocs.net/doc/9615386465.html,eConsole();是向控制台输出日志,方便调试使用查看结果。 接下来看第一个例子Test1,具体的我都在代码中进行了注释 Set的时候,如果是字符串或者字符数据的话,Redis会直接保存起来(字符串内部机制也是保存二进制),如果是其他类型,会默认进行json序列化然后再保存起来。

Get的时候,如果是字符串或者字符数据会直接获取,如果是其他类型会进行json反序列化。 Set第三个参数过期时间单位是秒。 vs调试小技巧,按F5或者直接工具栏“启动”会编译整个解决方案会很慢(VS默认),可以选中项目然后右键菜单选择调试->启动新实例,会只编译将会用到的项目,这样对调试来说会快很多。 大家运行调试后可以看到控制台输出的内容:向右的箭头=》是ic.Log=XTrace.Log 输出的日志。 字典的使用:对象的话,需要把json全部取出来,然后转换成对象,而字典的话,就可以直接取某个字段。 队列是List结构实现的,上游数据太多,下游处理不过来的时候,就可以使用这个队列。上游的数据发到队列,然后下游慢慢的消费。另一个应用,跨语言的协同工作,比方说其他语言实现的程序往队列里面塞数据,然后另一种语言来进行消费处理。这种方式类似MQ的概念,虽然有点low,但是也很好用。 集合,用的比较多的是用在一个需要精确判断的去重功能。像我们每天有三千万订单,这三千万订单可以有重复。这时候我想统计下一共有订单,这时候直接数据库group by是不大可能的,因为数据库中分了十几张表,这里分享个实战经验: 比方说揽收,商家发货了,网点要把件收回来,但是收回来之前网点不知道自己有多少货,这时候我们做了一个功能,也就是订单会发送到我们公司来。我们会建一个time_site 的key的集合,而且集合本身有去重的功能,而且我们可以很方便的通过set.Count功能来统计数量,当件被揽收以后,我们后台把这个件从集合中Remove掉。然后这个Set中

Redis-集群 - 三台服务器

Redis-集群安装详细步骤 一、Redis集群部署文档(centos6系统) 现有三台物理机10.18.154.2 10.18.154.3 10.18.154.4 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 10.18.154.2:7000 10.18.154.2:7001 10.18.154.3:7000 10.18.154.3:7001 10.18.154.4:7000 10.18.154.4:7001 二、安装Redis(10.18.154.2、10.18.154.3、10.18.154.4) 下载redis-3.2.1.tar.gz [root@localhost ~]# tar zxvf redis-3.2.1.tar.gz [root@localhost ~]# cd redis-3.2.1 [root@localhost redis-3.2.1]# make [root@localhost redis-3.2.1]# make install [root@localhost ~]# mv redis-3.2.1 /usr/local/redis [root@localhost ~]# cd /usr/local/redis/ [root@localhost ~]# mkdir /usr/local/cluster [root@localhost ~]# cp /usr/local/redis/redis.conf /usr/local/cluster/ [root@localhost ~]# vi /usr/local/cluster/redis.conf ##修改配置文件中的下面选项 port 7000 bind 10.18.154.2 127.0.0.1 daemonize yes#如果你想让它在后台运行,你就把它改成yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes [root@localhost ~]# mkdir /usr/local/cluster/7000 [root@localhost ~]# mkdir /usr/local/cluster/7001 [root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7000 [root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7001 [root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7002 [root@localhost 7000]# redis-server redis.conf ---启动redis服务##注意:拷贝完成之后要修改7001目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称 ##启动之后使用命令查看redis的启动情况ps -ef|grep redis

Redis的5个常见使用场景

Redis的5个常见使用场景概括 大家平时在使用Redis的时候有没有总结过Redis常用于哪些场景呢。下面科多老师带着大家一起来总结一下,希望能够帮助到各位同学。 1、会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis 来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。 2、全页缓存(FPC) 除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性 问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。 再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。 此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。 3、队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis 能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这 里去查看。 4、排行榜/计数器 Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set) 和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES

Redis集群研究

Redis Sentinel数据库M-S配置(Redis的分片与复制集技术) 1.Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常工作; 通知,当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序;自动故障恢复,如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知。 Redis Sentinel是一个分布式系统,可以部署多个Sentinel实例来监控同一组Redis实例,它们通过Gossip协议来确定一个主实例宕机,通过 Agreement协议来执行故障恢复和配置变更,一般在生产环境中部署多个实例来提高系统可用性,只要有一个Sentinel实例运行正常,就能保证被监控的Redis实例运行正常(类似Zookeeper,通过多个Zookeeper来提高系统可用性); 2.Redis HA方案 HA的关键在于避免单点故障及故障恢复,在Redis Cluster未发布之前,Redis 一般以主/从方式部署(这里讨论的应用从实例主要用于备份,主实例提供读写,有不少应用是读写分离的,读写操作需要取不同的Redis实例,该方案也可用于此种应用,原理都是相通的,区别在于数据操作层如何封装),该方式要实现HA主要有如下几种方案: 1).keepalived:通过keepalived的虚拟IP,提供主从的统一访问,在主出现问题时,通过keepalived运行脚本将从提升为主,待主恢复后先同步后自动变为主,该方案的好处是主从切换后,应用程序不需要知道(因为访问的虚拟IP 不变),坏处是引入keepalived增加部署复杂性; 2).zookeeper:通过zookeeper来监控主从实例,维护最新有效的IP,应用通过zookeeper取得IP,对Redis进行访问; 3).sentinel:通过Sentinel监控主从实例,自动进行故障恢复,该方案有个缺陷:因为主从实例地址(IP&PORT)是不同的,当故障发生进行主从切换后,应用程序无法知道新地址,故在Jedis2.2.2中新增了对Sentinel的支持,应用通过 redis.clients.jedis.JedisSentinelPool.getResource()取得的Jedis 实例会及时更新到新的主实例地址。 笔者所在的公司先使用了方案1一段时间后,发现keepalived在有些情况下会导致数据丢失,keepalived通过shell脚本进行主从切换,配置复杂,而且keepalived成为新的单点,后来选用了方案3,使用Redis官方解决方案;(方

Redis内存使用优化与存储

Redis内存使用优化与存储 Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ?String ?Hash ?List ?Set ?Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value 对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。 这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描述。通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。 下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式: ?String 常用命令:

set,get,decr,incr,mget 等。 应用场景: String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。 实现方式: String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。 Hash 常用命令: hget,hset,hgetall 等。 应用场景: 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息: 用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式: 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

redis集群部署

redis 3.07的集群部署一:关于redis cluster 1:redis cluster的现状 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 2:redis cluster 架构 1) redis-cluster架构图 架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护 node<->slot<->value 2) redis-cluster选举:容错 (1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉. (2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误 a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态. b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态. 二:redis cluster的使用 1:安装redis cluster所需软件

Redis数据库安装使用说明

Redis数据库安装使用说明 Redis数据库安装使用说明 Windows 安装说明 下载 文件 配置 启动 CentOS 安装说明 下载 安装 配置 启动 关闭 redis-py 检测 安装 说明 官方网站 Windows 安装说明 Windows下启动请使用Administrator账户 下载

请点击这里选择需要下载的版本 Windows版本只是为了开发使用,正式环境请选择在Linux下安装使用文件 程序说明 redis-benchmark.exe Redis性能测试工具 redis-check-aof.exe数据修复 redis-check-dump.exe检查导出工具 redis-cli.exe Redis客户端 redis-server.exe Redis服务器 redis.windows.conf配置文件 配置 配置文件为 redis.windows.conf 主要修改以下几个参数: 内网运行,建议不设置认证密码 port6379#端口,默认为6379 logfile"redis.log"#日志文件

dbfilename dump.rdb #数据库文件 maxheap1024000000#修改为该值即可 dir ./ #路径(当前目录下) 启动 进入控制台,并跳转到reids-server.exe目录下,输入以下命令即可: redis-server redis.windows.conf 设置快捷启动 在redis程序文件夹下创建StartRedisDB.bat文件,并写入如下内容 redis-server redis.windows.conf pause 保存即可,下次可以直接点击运行Redis服务端 CentOS 安装说明 如果安装使用过,请使用你自己的方法;如果没有安装使用过,请根据我的步骤安装

网络攻击常用命令综述

网络攻击常用命令综述 工欲善其事,必先利其器”——当然不是让你再满世界去找新的黑客软件啦(其实我不反对使用这些软件,相反我很喜欢用它们,但是必须是在知其所以然的情况下使用,才有可能对自身的电脑水平有所帮助),要进行入侵工作的话,至少(我认为)得装上NT操作系统,以它作为入侵平台,因为NT本身对网络的支持可以说比WIN9X来得更强大得多……当然,如果想对UNIX系统动点小手术(网络中的UNIX可始终还是主流呀)而又没钱装UNIX的话,LINUX也极佳 的选择(特别是现在国内至少有七八种中文LINUX版本——想当年要给REDHAT 配上中文支持是何等麻烦……),至少你可以借此了解UNIX系统的基本操作以及文件存放位置、系统配置、编译器、各种动作之后的记录等等…… 然后还得再学点编程语言,至少C与UNIX下的SHELL编程得会一点,能看懂人家写的利用各种漏洞的程序,能对它进行修改,偶尔还能写几个小程序放到网上让大伙儿乐乐,这样玩起来才可能有成就感(其实我自己还不太行,但这多少是个目标) 好了,废话少说,先讲讲一些MS系统里自带的相关网络程序的使用吧。 在MS的操作系统中,与网络安全较有关系的几个命令/程序 是:ping\winipcfg\tracert\net\at\netstat,且待我慢慢道来: 1. ping:这是TCP/IP协议中最有用的命令之一 它给另一个系统发送一系列的数据包,该系统本身又发回一个响应,这条实用程序对查找远程主机很有用,它返回的结果表示是否能到达主机,宿主机发送一个返回数据包需要多长时间。 Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] destination-list Options: -t Ping the specifed host until interrupted.(除非人为中止,否则一直ping下去) -a Resolve addresses to hostnames.(把IP转为主机名) -n count Number of echo requests to send.(响应请求的数量) -l size Send buffer size.(封包的大小)

redis-cluster原理分析

Redis Cluster 原理分析 文章较长,如需转载可分段。转载请标明作者以及文章来源,谢谢! 作者介绍 姓名:李航 工作经历: 5年多互联网工作经验,先后在58同城,汽车之家,优酷土豆集团工作。目前主要在优酷土豆集团任职高级开发工程师,目前主要负责大数据基础平台Redis集群开发及运维等工作。主要关注领域Nginx,Redis,分布式系统,分布式存储。如果对nginx或者redis感兴趣的同学可以发简历到gaosong@https://www.sodocs.net/doc/9615386465.html,。本文来源自“Redis技术交流群”线上分享。李航ID:Lucien_168。群主ID:gnuhpc。redis中国用户组qq群:374538650。后期的分享我们会同期进行。 这次主要是给大家分享的提纲如下: 1.简介 2.集群通信 3.数据分布及槽信息 4.数据迁移 5.通信故障 1.简介 继上次分享的优酷土豆的Redis服务平台化之路,这次着重来分享下Redis Cluster浅析,欢迎大家互相多交流学习。 Redis Cluster是一个高性能高可用的分布式系统。由多个Redis实例组成的整体,数据按照Slot存储分布在多个Redis实例上,通过Gossip协议来进行节点之间通信。

Redis Cluster功能特点如下: 1)所有的节点相互连接 2)集群消息通信通过集群总线通信,,集群总线端口大小为客户端服务端口+10000,这个 10000是固定值 3)节点与节点之间通过二进制协议进行通信 4)客户端和集群节点之间通信和通常一样,通过文本协议进行 5)集群节点不会代理查询 6)数据按照Slot存储分布在多个Redis实例上 7)集群节点挂掉会自动故障转移 8)可以相对平滑扩/缩容节点

Redis常用命令汇总

Redis常用命令汇总 Redis::__construct 描述: 创建一个Redis客户端 范例: $redis = new Redis(); connect, open 描述: 实例连接到一个Redis. 参数:host: string port: int 返回值:BOOL 成功返回:TRUE;失败返回:FALSE 范例: $redis->connect(‘127.0.0.1′, 6379); get 描述: 获取有关指定键的值 参数:key 返回值:string或BOLL 如果键不存在,则返回 FALSE。否则,与此相关的关键值返回。 范例: $redis->get(‘key’); set 描述: 设置关键值参数 参数:Key Value 返回值:BOOL 范例: $redis->set(‘key’, ‘value’) setnx

描述: 如果在数据库中不存在该键,设置关键值参数 参数:key value 返回值:BOOL 范例: $this->redis->setnx(‘key’, ‘value’); $this->redis->setnx(‘key’, ‘value’); delete 描述: 删除指定的键 参数:一个键,或不确定数目的参数,每一个关键的数组:key1 key2 key3 … keyN 返回值:删除的项数 范例: $redis->set(‘key1′, ‘val1′); $redis->set(‘key2′, ‘val2′); $redis->set(‘key3′, ‘val3′); $redis->set(‘key4′, ‘val4′); $redis->delete(‘key1′, ‘key2′); $redis->delete(array(‘key3′, ‘key4′)); exists 描述: 验证指定的键是否存在 参数key 返回值:Bool 范例: $this->set(‘key’, ‘value’); $this->exists(‘key’); $this->exists(‘NonExistingKey’); incr 描述:

redis twemproxy集群安装手册

一、概述 1、Redis集群安装有两种方式,第一种为编译源码安装,第二种为二进制安 装,具体选择哪一种方式根据实际情况决定。 2、本文档所使用版本如下: redis:redis-3.0.0-rc5 Twemproxy:nutcracker-0.4.0 autoconfig:2.69 3、常用Linux命令不清楚可以查看相关网站 4、本文档所述redis集群架构如下: 5、本文档使用120和121搭建redis集群,每台机器各启动两个redis实例 和一个twemproxy实例。Redis端口分别为6379 6380 6、采用源码编译方式安装需服务器具有访问外网权限,二进制安装不需求。 7、所有安装包均已上传至文件服务器 二、源码编译方式安装 1、安装automake 执行:yum install automake,出现如下输入Y完成安装:

2、libtool安装 执行:yum install libtool 出现如下输入yes完成安装 3、autoconfig安装 ①上传autoconf-2.69.tar.gz至/usr/local/src目录下 ②执行tar -xzvf autoconf-2.69.tar.gz ③cd autoconf-2.69 ④执行./configure ⑤执行make ⑥执行make install 至此,autoconfig安装完毕 4、redis安装 ①上传redis-3.0.0-rc5.zip至/usr/local/src目录下 ②执行unzip redis-3.0.0-rc5.zip ③执行cd redis-3.0.0-rc5 ④执行make&&make install ⑤执行mkdir /usr/local/redis ⑥执行cp src/redis-server src/redis-cli /usr/local/redis ⑦执行cd /usr/local/redis ⑧执行chmod 777 redis-server redis-cli ⑨执行./redis-server --port 6379 --save "" & 出现如下 ⑩执行./redis-cli -p 6379出现如下

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

redis系列三-springboot如何使用redis做缓存及缓存注解的 用法总结 1. 概述 本文介绍spring boot 如何使用Redis做缓存,如何对redis 缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。 2. spring boot集成redis 2.1. application.properties 配置application.properties,包含如下信息: 指定缓存的类型 配置redis的服务器信息 请不要配置spring.cache.cache-names值,原因后面再说 ## 缓存 # spring.cache.cache-names=book1,book2 spring.cache.type=REDIS # REDIS (RedisProperties)

spring.redis.database=0 spring.redis.host=192.168.188.7 spring.redis.password= spring.redis.port=6379 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=100 spring.redis.pool.max-wait=-1123456789101112131234567891 0111213 2.2. 配置启动类 @EnableCaching: 启动缓存 重新配置RedisCacheManager,使用新的配置的值 @SpringBootApplication @EnableCaching // 启动缓存 public class CacheApplication { private static final Logger log = LoggerFactory.getLogger(CacheApplication.class); public static void main(String[] args) { https://www.sodocs.net/doc/9615386465.html,("Start CacheApplication.. ");

Redis 集群部署手册

Redis集群部署手册 一.部署环境 OS:Red Hat Enterprise Linux Server release 6.7 Redis Version: 3.0.0 IP-01: 10.32.60.138 Port:6380,6381 IP-02:10.32.60.139 Port:6382,6383 IP-03:10.32.60.140 Port:6383,6384 主节点01:10.32.60.138:6380 主节点02:10.32.60.139:6382 主节点03:10.32.60.140:6384 从节点01:10.32.60.138:6381 从节点02:10.32.60.138:6383 从节点03:10.32.60.138:6385 二.安装路径 redis主目录:/opt/software/redis-server redis 配置文件目录:/etc/redis 日志存放目录:/opt/software/redis 三.Redis 安装配置 1.安装 #tar –xzvf redis-3.0.0.tar.gz 解压 #cd /opt/software/redis3.0.0 #make && make PREFIX=/opt/software/redis-server install 编译安装 #cp redis.conf /etc/redis/redis-6380.conf 配置文件 #cp redis.conf /etc/redis/redis-6381.conf 配置文件 2.配置 以10.32.60.138 6380 节点为例 redis 配置文件放在 /etc/redis 目录下,根据端口来配置节点 设置后台运行:改为daemonize yes 修改默认端口:port 6380其他节点根据端口号修改 使用默认的日志级别:loglevel notice 修改日志路径:改为logfile /opt/software/redis/redis-6380.log 其他节点根据端口号修改日志文件名称 注释rdb保存条件(这样在运行过程中将不触发rdb模式):改为 #save 900 1

Spring-data-redis使用手册

Spring-data-redis使用手册

文档信息(Document Info) 标题(Title) Spring-data-redis使用手册 文档编号(No) 2012-02-14 作者(Author) 黄承开 最后发布时间(Last Update) 2012-08-10 概述(Summarize) 掌握spring-data-redis的使用方法,一些最佳实践

修订信息(Revise Info) 修订日期(Date)修订人(Reviser) 修订内容(Revises) 2012-05-21 梁国锋 2.2 redis下载地址(Linux版、Windows版) 3.4.6常用api的方法 5.1mercury项目实战 2012-06-25 黄承开新增maven依赖配置方法,整理了章节2012-06-26 黄承开新增章节 2012-08-10 张瑜新增Tinybee实战配置,增加KEY序列化配置

附件信息(Attachment Info)

目录 文档信息(Document Info) (2) 修订信息(Revise Info) (3) 附件信息(Attachment Info) (4) 1.概述 (6) 1.1.目的 (6) 1.2.范围 (6) 2.准备 (6) 2.1.环境配置 (6) 2.2.下载地址 (7) 3.Spring-data-redis (7) 3.1.背景 (7) 3.1.1.高级API (7) 3.1.2.低级API (7) 3.2.Maven配置 (7) 3.3.JedisConnectionFactory (8) 3.4.RedisTemplate和StringRedisTemplate (8) 3.5.API概览 (8) 3.5.1.Java集合和Redis集合 (8) 3.5.2.Operations (9) 3.5.3.ValueOperations和BoundValueOperations (9) 3.5.4.ListOperations和BoundListOperations (9) 3.5.5.SetOperations和BoundSetOperations (10) 3.5.6.ZSetOperations和BoundZSetOperations (11) 3.5.7.HashOperations和BoundHashOperations (11) 3.5.8.其他 (12) 3.6.Callback (12) 3.7.Topic和Messaging/PubSub (12) 3.8.Cache (12) 4.NoSQL数据库设计 (12) 4.1.一般经验 (12) 4.1.1.不持久化业务实体 (12) 4.1.2.Key的设计 (12) 4.2.官方例子中的设计 (13) 4.3.NoSQL 数据建模技术 (13) 5.最佳实践 (13) 5.1.项目案例1(Mercury项目) (13) 5.1.1.配置 (13) 5.1.2.总结 (14) 5.2.项目案例2(Tinybee项目) (14) 5.2.1.配置(更新) (14)

redis集群配置参数及优化

Redis集群配置参数及优化 Redis的主要参数配置在redis.conf文件中。 1.conf 内存值 2.bind ip 默认情况下,如果没有指定“bind”配置指令,Redis将侦听服务器上可用的所有网络接口的连接。 默认情况:bind 127.0.0.1 实际配置:bind 本机ip 3.protected-mode yes 启用默认保护模式。只有当您确定您希望其他主机的客户端连接到Redis 时,您才应该禁用它,即使没有配置身份验证,也没有使用“bind”指令显式列出特定的接口集。 4.tcp-keepalive 300 如果非零,请使用SO_KEEPALIVE向没有通信的客户发送TCP协议。 这很有用,有两个原因: a)检测死同伴 b)从中间的网络设备的角度进行连接 在Linux上,指定的值(以秒为单位)是用于发送ack的周期。 注意,要关闭连接,需要双倍的时间。这个选项的合理值是300秒,这 是新的Redis默认值,从Redis 3.2.1开始。 5.timeout 0 在客户机空闲N秒后关闭连接(0到禁用) 6.port 6379 在指定端口上接受连接,默认值是6379 7.daemonize yes redis后台运行 8.pidfile /var/run/redis_6379.pid 如果指定了一个pid文件,Redis会在启动时指定,并在退出时删除它。 当服务器运行非守护进程时,如果配置中没有指定pid文件,则不会创建pid文件。当服务器被守护时,即使没有指定,也会使用pid文件,默认为“/var/run/redis.pid”。 创建一个pid文件是最好的工作:如果Redis不能创建它,那么服务器就会正常启动和运行。

redis在JAVA中使用

Redis 一、Redis介绍 什么是Redis? redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash (哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 它有什么特点? (1)Redis数据库完全在内存中,使用磁盘仅用于持久性。 (2)相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。 (3)Redis可以将数据复制到任意数量的从服务器。 Redis 优势? (1)异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。(2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。 (3)操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

(4)多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。 Redis 缺点? (1)单线程 (2)耗内存 二、使用实例 spring把专门的数据操作独立封装在spring-data系列中,spring-data-redis自然是针对Redis的独立封装了。 主要是将jedis、jredis、rjc以及srp等Redis Client进行了封装,同时支持事务。 1、引入相关jar包(连接池不做考虑) 1. 2. 3.org.springframework.data 4.spring-data-redis 5.1. 6.1.RELEASE 6. 7. 8.redis.clients 9.jedis 10.2.7.3 11. 12. 2、配置bean

REDIS常用命令操作(带截屏)

REDIS常用命令操作 准备 在本地下载并安装redis客户端后,在windows命令行窗口通过cd命令进入bin目录,运行redis-cli.exe 进入命令行操作界面,如下图所示: 常用命令 Key(键) DEL 业务场景: 删除不需要使用的一个或多个KEY 不存在的KEY会被忽略

参数说明: DEL key [key…..] 这个key就是要删除的键,如果要删除多个key,则多个key之间以空格分隔返回值: 被删除key的数量 使用示例: EXISTS 业务场景: 验证是否存在某个key 参数说明: Exists key key代表要判断的键 返回值: 如果key存在,则返回1,不存在则返回0 使用示例:

KEYS 业务场景: 查找当前redis数据库中有哪些key 参数说明: Keys pattern 其中pattern为正则表达式,其正则语法完全同原生的正则语法一样 比如: Keys * 匹配数据库中所有key Keys h?llo 匹配hello、hallo、hxllo等,?代表任意一个字符 Keys h*llo 匹配hllo、heeeeeello等 Keys h[ae]llo 仅匹配hello和hallo 返回值: 符合给定模式的key列表 使用示例:

String(字符串) DECR 业务场景: 将key中所存储的数字值减1 如果key不存在,那么key的值会先初始化为0,然后再执行DECR操作 如果值包含错误的类型或者字符串类型的值不能表示为数字,那么返回一个错误本操作的值限制在64位(bit)有符号数字表示之内 参数说明: DECR key key为操作的键 返回值: 减一后的值 使用示例: DECRBY

相关主题