Redis 到底有多快[译文]

Thumbnail

原文地址 http://redis.io/topics/benchmarks。 拖了一个半月的稿子~ Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 (类似于 Apache ab 程序)。你可以使用 redis-benchmark -h 来查看基准参数。 以下参数被支持: Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>] -h <hostname> Server hostname (default 127.0.0.1) -p <port> Server port (default 6379) -s <socket> Server socket (overrides host and port) -c <clients> Number of parallel connections (default 50) -n <requests> Total number of requests (default 10000) -d <size> Data size of SET/GET value in bytes (default 2) -k <boolean> 1=keep alive 0=reconnect (default 1) -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD Using this option the benchmark will get/set keys in the form mykey_rand:000000012456 instead of constant keys, the <keyspacelen> argument determines the max number of values for the random number. For instance if set to 10 only rand:000000000000 - rand:000000000009 range will be allowed. -P <numreq> Pipeline <numreq> requests. Default 1 (no pipeline). -q Quiet. Just show query/sec values --csv Output in CSV format -l Loop. Run the tests forever -t <tests> Only run the comma separated list of tests. The test names are the same as the ones produced as output. -I Idle mode. Just open N idle connections and wait. 你需要在基准测试之前启动一个 Redis 实例。一般这样启动测试: ...

2014-02-23 · alswl

从 SVN 到 Git,找回丢失的历史

前段时间在将公司的 SVN 项目迁移到 Git 上面去,遇到一个很少见的问题: 有一个小伙伴使用 git-svn 做 rename 操作时候,将一个目录 svn mv 了, 导致新目录只存了最近几个月提交历史,丢失了历史信息。对团队开发而言, 历史提交是非常宝贵的财产,我们想了一些办法,把这些数据提取出来。 # 找出丢失之前的版本,列出丢失目录上层的操作记录。 svn log -l 2000 svn://log4d.com/trunk/apps/ios/ | less # 将重命名之前的版本拷贝到一个临时目录 svn copy svn://log4d.com/trunk/apps/ios/nami@43252 svn://log4d.com/trunk/apps/ios/nami_lost # 准备现有代码到 Git git svn clone svn://log4d.com/ -T trunk/apps/ios/nami -t tags -b branches -r 13532 nami # 修改 .git/config 来加入丢失的历史数据 Remote [svn-remote "svn-lost"] url = svn://log4d.com fetch = trunk/apps/ios/nami_lost:refs/remotes/trunk-lost # 并抓取 Remote 内容 git svn fetch # Rebase 新代码到恢复过来的历史记录上 git checkout master git rebase --committer-date-is-author-date trunk-lost 其中注意的是手动添加一个 svn-remote 地址为历史数据副本地址。 还有就是 rebase 时候参数 --committer-date-is-author-date 可以保证 rebase 不会造成提交时间被修改,方便回溯。 ...

2014-01-21 · alswl

Goodbye 2013, Hello 2014

Thumbnail

2013 年末,我给自己制定了几个年度目标: 离梦想更近一步 找一个靠谱的姑娘,我感觉她需要我,我也需要她了 成为一个为百万用户级别提供技术支撑的人物,要能独当一面 帮助网站进行性能优化 制定规则,平衡猥琐实现和优雅 继续写博客,分享积累 + 翻译文章 关于感情 先来谈谈感情,我和她在一起一年半了,虽然偶尔有小摩擦,但总体上面还是非常幸福的。 找到一个能产生共鸣,生活兴趣相近,相互欣赏的人太难了。一定会珍惜的。 关于工作 再谈谈协作,相当艰辛的跨过了去年年末的痛苦挣扎,然后看待事物和进行平衡选择时候 就没那么痛苦了。我的一大问题就是,从小认为人或事都可以非黑即白,这种决定性的判断, 会让我在处理事情时候,失去对重心的控制,有可能花费大量时间在细枝末节的地方。 2013 年初时候,我甚至想一度放弃,而熬过来之后,工作就又变得非常开心, 现在可以包容别人的不同意见,尝试寻找相同共性(虽然处理的能力还不够)。 ...

2013-12-31 · alswl

Linux 程序员的 Mac 安装记录

作为一个 Linux 的老用户,我再一次验证了那句老话「Linux 用户有钱就换 Mac」。 前段时间,托朋友从香港购入一台 rMBP,下面就是我的 Mac 使用安装记录。 Brew Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。 安装 Brew: ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)" 我安装的 Brew 包: brew install ack brew install adns brew install android-sdk brew install ansible brew install ansible20 brew install apple-gcc42 brew install apr brew install apr-util brew install archey brew install aria2 brew install asciidoc brew install asio brew install atk brew install augeas brew install autoconf brew install autojump brew install automake brew install avr-binutils brew install avr-gcc brew install avr-libc brew install awscli brew install axel brew install bdw-gc brew install bfg brew install boost brew install burp brew install c-ares brew install cabal-install brew install cairo brew install certbot brew install cliclick brew install cloog brew install cmake brew install cmatrix brew install colordiff brew install connect brew install coreutils brew install cowsay brew install cpp-netlib brew install cscope brew install ctags brew install curl brew install curl-ca-bundle brew install dcfldd brew install ddrescue brew install dialog brew install dirmngr brew install dnstop brew install docbook brew install docker brew install docker-compose brew install docker-machine brew install dos2unix brew install erlang brew install ettercap brew install ext4fuse brew install faac brew install fcitx-remote-for-osx brew install fd brew install fetchmail brew install ffind brew install ffmpeg brew install figlet brew install findutils brew install fontconfig brew install fortune brew install fping brew install freetype brew install fzf brew install gcc brew install gd brew install gdbm brew install gdk-pixbuf brew install gettext brew install gflags brew install gfortran brew install ghc brew install ghc@8.0 brew install gifsicle brew install git brew install git-extras brew install git-flow brew install git-lfs brew install git-number brew install giter8 brew install glew brew install glib brew install glog brew install gmp brew install gmp@4 brew install gnu-getopt brew install gnu-sed brew install gnu-tar brew install gnu-time brew install gnupg brew install gnupg2 brew install gnutls brew install go brew install goaccess brew install gobject-introspection brew install godep brew install gource brew install gpg-agent brew install gradle brew install grafana brew install graphite2 brew install graphviz brew install grep brew install grok brew install groovy brew install gtk+ brew install haproxy brew install harfbuzz brew install hicolor-icon-theme brew install html2text brew install htop-osx brew install httpie brew install hydra brew install icu4c brew install ifstat brew install iftop brew install imagemagick brew install influxdb brew install ipcalc brew install iperf brew install isl brew install isl@0.12 brew install jansson brew install jemalloc brew install jenv brew install jetty brew install jnettop brew install jpeg brew install jq brew install jshon brew install kafka brew install lame brew install languagetool brew install libao brew install libarchive brew install libassuan brew install libconfig brew install libdaemon brew install libev brew install libevent brew install libexif brew install libffi brew install libgcrypt brew install libgpg-error brew install libiodbc brew install libksba brew install libmagic brew install libmpc brew install libnet brew install libpng brew install librdkafka brew install libressl brew install librsync brew install libsodium brew install libsoxr brew install libssh brew install libtasn1 brew install libtermkey brew install libtiff brew install libtool brew install libunistring brew install libusb brew install libusb-compat brew install libuv brew install libvo-aacenc brew install libvterm brew install libxml2 brew install libyaml brew install libzip brew install little-cms brew install lldpd brew install lrzsz brew install lsyncd brew install lua brew install lua52 brew install luajit brew install luarocks brew install lynx brew install lz4 brew install lzlib brew install lzo brew install makedepend brew install maven brew install mbedtls brew install memcache-top brew install memcached brew install mercurial brew install mit-scheme brew install mitmproxy brew install mongodb brew install mono brew install mp4v2 brew install mpfr brew install mpg123 brew install msgpack brew install msodbcsql brew install mssql-tools brew install mtr brew install multitail brew install mycli brew install mysql brew install neovim brew install nettle brew install nghttp2 brew install nginx brew install nload brew install nmap brew install node brew install nodeenv brew install npth brew install nspr brew install nsq brew install nuget brew install objective-caml brew install ocaml brew install oniguruma brew install opencc brew install openssl brew install openssl101 brew install openssl@1.1 brew install openvpn brew install osquery brew install ossp-uuid brew install p11-kit brew install p7zip brew install pandoc brew install pango brew install pcre brew install perl brew install phantomjs brew install pinentry brew install pixman brew install pkg-config brew install plantuml brew install pngpaste brew install popt brew install privoxy brew install protobuf brew install proxychains-ng brew install pth brew install pwgen brew install python brew install python3 brew install qt brew install qt5 brew install r brew install rapidjson brew install rclone brew install readline brew install reattach-to-user-namespace brew install redis brew install rename brew install rlwrap brew install rmtrash brew install rocksdb brew install rsync brew install ruby brew install ruby-build brew install s-lang brew install s3cmd brew install sbt brew install scala brew install scons brew install sdl2 brew install sdl2_image brew install shadowsocks-libev brew install shairport brew install shairport-sync brew install shared-mime-info brew install shyaml brew install siege brew install sleuthkit brew install snappy brew install sntop brew install socat brew install source-highlight brew install spark brew install spdylay brew install sphinx-doc brew install springboot brew install sqlite brew install sqlmap brew install ssh-copy-id brew install sshfs brew install sshpass brew install stunnel brew install subversion brew install swig brew install sysbench brew install taglib brew install texi2html brew install the_silver_searcher brew install thefuck brew install thrift brew install tidy-html5 brew install tig brew install tinyproxy brew install tldr brew install tmate brew install tmux brew install tokyo-cabinet brew install tree brew install typescript brew install udns brew install udptunnel brew install unibilium brew install unison brew install unixodbc brew install utf8proc brew install vim brew install w3m brew install watch brew install watchman brew install webkit2png brew install webp brew install wget brew install wxmac brew install x264 brew install xclip brew install xvid brew install xz brew install yara brew install yasm brew install yuicompressor brew install zookeeper brew install zsh brew install zstd Brew cask Brew cask 是类似 Brew 的管理工具, 直接提供 dmg 级别的二进制包,(Brew 是不带源码,只有对应项目所在的 URL)。 ...

2013-12-08 · alswl

Postfix 基本配置[译文]

原文地址:Postfix Basic Configuration 。 有少许编译。 介绍 Postfix 的配置文件 main.cf 有数百个配置参数, 幸运的是,所有参数都有合理的默认配置项。 大部分时候,只需要配置两三个参数即可。 安装 Postfix 的方法可以参见 安装方法。 特殊场景用途的配置方式,如邮件中枢,防火墙,拨号环境客户端的说明可以在 标准配置说明 里面查看。 Postfix 配置语法 Postfix 的配置文件默认在 /etc/postfix。主力配置文件是 main.cf 和 master.cf。用户权限必须是 root 的。 /etc/postfix/main.cf 配置语法有两个要点:不用引号,可以使用 $ 来引用参数。 # 定义一个参数 /etc/postfix/main.cf: parameter = value # 引用一个已有参数 /etc/postfix/main.cf: other_parameter = $parameter 引用参数时候,可以再定义之前先引用(Postfix 使用延迟计算技术)。 ...

2013-11-09 · alswl

在 Python 中使用 GDB 来调试[译文]

大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已。 另外还有强悍的 jStack 和 jConsole 来进行运行期侦测,JVM 的工业级强度果然不是盖的。 当时公司技术方面也遇到了一些瓶颈,一部分原因是 CPython 本身的 IO 模型问题, 另一方面也和早期代码写的极不工整脱不了关系。万般无奈之下,我们用 Jython 推翻重做了主要业务,效果立竿见影,但同时也把真实问题给规避掉了。 在这之后我们在 JVM 的领导下,走上了康庄大道。但我心中始终还有一个梗, 就是想对性能遇到瓶颈的 Python Process 进行线上侦测。 这篇文章就是开始的第一步。 ...

2013-11-01 · alswl

15 分钟学会 R 语言[译文]

仗着自己有几门语言的基础,我在学新语言时候,都会选择一些快速入门教程。 比如 Learn X in Y minuts 就是我经常光顾的站点。 前段时间,小柒在用 R 写数据分析脚本,我就建议她把 Learn X in Y minuts 里面的 R 语言教程翻译出来。话说 Learn X in Y minuts 里面的中文贡献还是非常多的,赞。 Learn X in Y minuts 的源码托管在 Github。 小柒被我逼着把这篇 R 语言教程 翻译到 R 语言教程中文版。 下面是译文,有不妥的地方可以留言或者直接去 Github 上面 Pull request。 R 是一门统计语言。它有很多数据分析和挖掘程序包。可以用来统计、分析和制图。 你也可以在 LaTeX 文档中运行 R 命令。 ...

2013-10-29 · alswl

读《大规模Web服务开发技术》

Thumbnail

年前看了这本书《大规模Web服务开发技术》,当时给的评价是: 很好,让我这个渣渣看的很感动,数据翔实,经历可靠,翻译的也不错,我给 4.2 分 现在经历过 Python / Django / 烂代码的阵痛,开始有更多的想法, 在整理这些粗糙的想法之前,我又把这本书翻了一遍,写个流水帐读书笔记。 《大规模Web服务开发技术》@豆瓣: http://book.douban.com/subject/6758780/ 规模 小规模 / 大规模 / 超大规模的侧重点各不相同:保持扩展性/保持冗余/低成本运维/开发合作方便 内存、磁盘、负载 内存快,磁盘慢,IO 速度的差异 ...

2013-06-29 · alswl

Arch,再见

Thumbnail

Arch 是我真正使用的第一款 Linux 发行版,大约使用了三年, 现在的这个 VPS 跑的系统也是 Arch。 然而随着时间变化,我从最早的天天更新狂,到一周、一个月、三个月和不主动更新。 彻底从从不折腾会死星人变成了一个尽量避免变更的老用户。 Arch 很适合作为第二个(第一个是新手使用的 Ubuntu),它的哲学 KISS 非常优雅, Keep It Simple And Stupid。基于这原则,它将 Linux 内部的使用、运维细节都展现出来。 毫不夸张的说,被 Arch 折腾几年,就能胜任 Linux SA 的角色了(笑)。 ...

2013-04-13 · alswl

读《人件》

Thumbnail

事情起源于动态语言和静态语言之争,最后争论焦点转移到:「相信人本身的能力重要, 还是通过语言/工具来约束人重要」。 我认为项目开发中最重要的是个人能力和团队协作能力,工具只是加分项。 如果代码质量差、监控难、性能难以优化,解决根本问题的关键还是在人身上。 并不是静态编译和工具检查就能搞定了。 我愤愤的在 QQ 对话框中写道: 我工作第一年痛苦于开发流程,阅读了《人月神话》,就开始坚信软件工程的哲学 后来痛苦与代码质量,阅读了《重构》,开始坚信代码质量决定产品质量 现在痛苦于人和语言的冲突,动态和静态的冲突,我想读《人件》了 ...

2013-04-10 · alswl