1 |
redis-cli -n 5 -h 127.0.0.1 -p 6379 -a uwhxh2746dbap keys '*' | xargs -I '{}' redis-cli -n 5 -h 127.0.0.1 -p 6379 -a uwhxh2746dbap migrate r-bp1b7f4fc1328784992.redis.rds.aliyuncs.com 6379 '' 5 1000 COPY KEYS '{}' |
Redis内存分析
一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析。
BGSAVE:在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
生成内存快照: redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,主要用它生成内存快照。 Continue reading "Redis内存分析"
MySQL 5.7 中文全文检索使用教程
在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。
从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。
本文使用的MySQL 版本是5.7.22,InnoDB数据库引擎。 Continue reading "MySQL 5.7 中文全文检索使用教程"
Redis集群水平扩展(二)
原始集群(见下图)由6个节点组成,且6个节点都在一台机器上(ip为192.168.0.61),采用伪分布式的三主三从模式。
Redis集群水平扩展(一)
Redis分布式方案一般有两种
1、客户端分区,优点是分区逻辑可控,缺点是需要客户端处理数据路由、高可用、故障转移等。
2、代理方案,优点是简化客户端逻辑和升级,缺点是加重架构复杂性和性能损耗。
Redis Cluster是官方提供的分布式解决方案,从3.0版本正式推出,和以上两种方案都不太一样,采用了虚拟槽分区,分区方式采用了hash分区,它并没有使用一致性hash(增减节点会导致部分数据无法命中,当使用少量节点时节点变化会导致影响数据映射),而是使用改进的一致性hash-虚拟槽方式分区。Redis Cluster使用了 16384 个虚拟槽,槽被分配给节点管理。
Redis数据迁移
一、AOF方式
需求: 一个没有数据的redis。
清空redis数据方法
1 |
bash> echo "keys *" | redis-cli --raw -p 6378 |sed -r 's/(.*)/redis-cli --raw -p 6378 del \1 /g' |bash |
ElasticSearch数据迁移
使用 https://github.com/taskrabbit/elasticsearch-dump
安装 npm后使用 npm install elasticdump -g安装。
使用参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ES=http://search-es-0.search-es.app.svc.cluster.local:9200 ED=http://es-0.es.infra.svc.cluster.local:9200 for index in `curl -s -XGET $ES/_cat/indices?h=i` do # settings, analyzer, data, mapping, alias, template echo "elasticdump --input=$ES/$index --output=$ED/$index" elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=settings --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=analyzer --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=alias --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=template --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=mapping --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=data --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }' echo "" done |
etcd: 从应用场景到实现原理的全方位解读
随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。etcd为解决这类问题带来了福音,本文将从etcd的应用场景开始,深入解读etcd的实现方式,以供开发者们更为充分地享用etcd所带来的便利。 Continue reading "etcd: 从应用场景到实现原理的全方位解读"
MySQL的四种事务隔离级别
一、事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。 Continue reading "MySQL的四种事务隔离级别"
【转】一致性哈希算法
在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。