Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
谢文威
@vincent
VIP
NO. 332 / 2011-11-29

薄荷科技
上海
25 Topics / 529 Replies
111 Followers
6 Following
16 Favorites
写优雅的程序,做一个优雅的人
GitHub Public Repos
  • redis_scanner 85

    RedisScanner is a tiny tool for scanning redis's keys and creating statistic information.

  • sneakers_packer 53

    Microservice communication, job message, event broadcast and remote procedure call based on Rabbi...

  • migrate-ssdb2pika 5

    迁移 SSDB 到 Redis/Pika 工具集,Ruby 实现

  • grpc_for_rails 3

    Make grpc server and client easy for rails project.

  • gruf 1

    gRPC Ruby Framework

  • wechat 1

    API, command and message handling for WeChat in Rails

  • my-slides 1

    my slides for sharing

  • sneakers 1

    A fast background processing framework for Ruby and RabbitMQ

  • capistrano-sneakers 1

    Sneakers support for Capistrano

  • shortme 1

    Yet Another URL Shortening Service in Golang

More on GitHub
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • Redis MySQL 混用的最佳实践 at January 11, 2015

    #12 楼 @msg7086 对的,关系数据库查询比较方便,有强大的 SQL 支持,而 NoSQL 通常查询有很大限制。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 11, 2015

    招聘还在继续,欢迎自荐和推荐,😄

  • Ruby Shanghai 2014 年 终聚会 总结 at January 11, 2015

    感谢 @gene_wu 就是发得好像晚了一点,😄

  • Capistrano 中的一些知识 at January 06, 2015

    这篇文件讲的是 Capistrano 2 的用法,有些在 Capistrano 3 下已经没法用了。比如 run 已经被 execute 取代,等等,文字应该声明一下适用的版本。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 06, 2015

    #32 楼 @jullian 如果底子很好,初中级也可以考虑。

  • Redis MySQL 混用的最佳实践 at January 06, 2015

    @jasonliu @hooooopo @Rei @42thcoder @msg7086 可能对于论坛帖子的例子优化的必要性不大,但楼主提到的情形还是有很多现实的场景。

    例如:有很大的用户表 users(数千万),用户有一些属性包括性别,年龄,地区等等,另外通过 redis 记录用户最新访问时间,业务上有很多筛选客户的需求,需要组合各种属性条件和最新访问时间,这个时候就需要聚合数据了。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 05, 2015

    #29 楼 @Victor 谢谢!可惜了,欢迎到上海来坐一坐,:)

  • Redis MySQL 混用的最佳实践 at January 05, 2015

    针对你提到的例子,我想可以这样子解决:

    同时在 MySQL 里存储一份数据,也就是说帖子的喜欢数和点击数同时也放在帖子表(或者新建一张帖子统计信息表),因为实时更新 MySQL 可能导致性能问题,可以定期同步数据,比如每天凌晨的时候跑一个任务更新数据表。 这样就可以使用 MySQL 查询过滤获取所需数据,但是存在数据不那么精确问题,需要考虑需求方能否接受。

    推广到更广泛的问题,因为 Redis 和 MySQL 分开存储,如果业务需要联合使用这两部分的数据,就需要聚合数据,简单的聚合数据可以在程序里完成,复杂的聚合可能需要在 MySQL 同时保持数据的副本,而且可能导致数据非实时同步问题。

    再广泛的情况,聚合数据,还可以通过建立数据集市(数据仓库),导入专门的检索系统(比如 solr / elastic search)完成。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 05, 2015

    #23 楼 @linjunhalida 这张是在薄荷办公室里办的 ruby 聚会的图片,大多是 ruby 程序员,当然绝大部分都是男的的,不是薄荷的员工照哦,哎,看来还是得上一些薄荷 girl 的图片才行,:)

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 04, 2015

    #11 楼 @meeasyhappy 现在有 5 位 ruby 工程师,需要扩充到 10 位。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 04, 2015

    #18 楼 @jullian 欢迎进入 ruby 的世界!其实薄荷最早曾经用 java 实现的,后来全部用 ruby 改写了一遍。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 04, 2015

    #16 楼 @Victor 谢谢,考虑来上海发展否?

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 04, 2015

    #14 楼 @lgn21st 是啊,你都已经当爹了,哈哈,欢迎常回来看看。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 03, 2015

    #2 楼 @xiaoronglv 看来真得上一些图片,哈

  • 寻找一个创业技术合伙人 at January 02, 2015

    貌似你已经有很深的技术背景了,为什么还需要找技术合伙人呢?通常这种情况找产品领域或者市场方面的合伙人更合适啊,难道是纯技术领域的创业?

  • 大格局, 大使命 -- 2014年 度总结 at January 02, 2015

    #9 楼 @lyfi2003 楼主很坦诚,能勇敢直面自己的失败,非常棒!创业就是这样的,理想和现实总是存在种种差距,需要在过程不断摸索调整,甚至壮士断腕,重新再来,相信你一定找到属于你自己的成功道路。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 02, 2015

    #6 楼 @zhangsm 我们也欢迎优秀有潜力的应届毕业生啊,如果是应届毕业生,得先实习一段时间看看。

  • [上海] 薄荷诚邀 Ruby 好手 (新传图片,薄荷 girl 向你招手,是否考虑换个不一样的环境呢) at January 02, 2015

    #4 楼 @lgn21st 哈,大家非常想念你啊,快回来吧!

  • 总结 Web 应用中常用的各种 Cache at December 23, 2014

    Tengine(nginx 淘宝版本) http://tengine.taobao.org/changelog.html 支持 gzip_clear_etag 声明,可以通过 gzip_clear_etag off; 设置不去除 etag,避免 hack nginx 源码,:)

  • [上海][2014年12月20日] 上海及长三角年度聚会 (12 月 19 日 求借移动投影屏幕) at December 21, 2014

    #95 楼 @akirapanda #96 楼 @tzwm 谢谢!酸奶可以在薄荷 app 里买哦,现在还有优惠,送酸奶机的,:)

  • [上海][2014年12月20日] 上海及长三角年度聚会 (12 月 19 日 求借移动投影屏幕) at December 20, 2014

    #93 楼 @akirapanda #91 楼 @Grant 抱歉,忘记提示停车地方了,展想这边停车很贵,对面天之骄子广场周六周日停车免费,说晚了,😚

  • [上海][2014年12月20日] 上海及长三角年度聚会 (12 月 19 日 求借移动投影屏幕) at December 18, 2014

    非常欢迎大家到薄荷参加这一次的 Ruby 活动!为方便大家,附上导航地图。 薄荷科技办公地点: 祖冲之路 2290 号 1 号楼 2101 室 2 号线广兰路站下车,2 号口出,向中环方向(往东走),步行 8 分钟左右,最高的一幢楼,进入大厦后,就会有薄荷的美女引导了,:)

  • 为什么感觉 Ruby China 里的程序员,基本上是做 Web 的? at December 13, 2014

    1.因为 ruby 最擅长的就是这个领域,rails 引领潮流

    1. web(包括移动 app)技术开发是最活跃的领域
    2. 其实 ruby 在测试和运维配置管理领域也很活跃
  • [上海][2014年12月20日] 上海及长三角年度聚会 (12 月 19 日 求借移动投影屏幕) at November 21, 2014

    @yedingding 玎玎已经确定了一个 topic 哦,是关于 MySQL 的

  • sidekiq 并发控制的问题 at November 05, 2014

    MyToken.acquire 是资源生成的过程,生产后就加入到 connection pool 内部的队列里了,所以只会调用 5 次,connection pool 在调用 MyToken.acquire 会加锁的。没有必要再 token 放到 @tokens 中了。

  • sidekiq 并发控制的问题 at November 05, 2014

    #5 楼 @kingwkb 那我就好人做到底吧,你看看下面的代码:

    class MyToken
       @tokens = %w(111 222 333 444 5555)
    
       def self.acquire
          @tokens.pop
       end
    end
    
    $token_pool = ConnectionPool.new(size: 5, timeout: 5) { MyToken.acquire }
    
    $token_pool.with do |token|
        # use token
        puts token
    end
    

    把每一个 token 作为 connection pool 里一个资源,通过 MyToken.acquire 生成新的资源,这里有一个要注意的问题是,connection pool 的 size 不能超过 tokens 的长度,否则可能引起 pool 里存在空 token 的情况。 另外,不能保证顺序读到 token,但能保证某一个 token 同一时间只被一个线程使用,保证如果 token 不够使用时,申请使用的线程等待执行。

  • 爬虫获取 ruby-china 职位地区分布数量统计 at November 05, 2014

    #2 楼 @ibugs 酷炫!这个招聘贴是一年多前的了,我们刚刚已经搬了办公地方,不过招聘牛人一直在继续,新的办公室也极有特色,哈!

  • sidekiq 并发控制的问题 at November 05, 2014

    #2 楼 @kingwkb 我觉得自己做队列的方式本质上和 connection_pool 的机制是一样的,不管线程数和资源数是否数量一致,都需要控制获取资源,释放资源的过程,还不如 connection_pool 来得灵活。

  • sidekiq 并发控制的问题 at November 05, 2014

    @kingwkb 不客气。其实我对你的问题有一些疑惑,我理解应该是两种问题:

    1. 如何保证多线程(以及多进程)环境下对某个资源的互斥使用。 这个问题通过一个分布式锁处理就可以了,redis 很好实现这个机制。

    2. 如何在多线程下对有限个资源的使用,保证每个资源不会被多个线程同时使用。 例如 sidekiq 中对 database connection 的使用,资源有限,线程数多于资源数,通过 ActiveRecord 自带的 connection pool 实现这种方式的资源使用。有一个 gem https://github.com/mperham/connection_pool 就是用于解决这个问题的,作者也是 sidekiq 的作者。

  • sidekiq 并发控制的问题 at November 05, 2014

    你可以用 redis 实现跨进程分布式锁来解决这个问题。 关于 redis 分布式锁,详见 http://redis.io/topics/distlock。

    直接使用 redis 的命令实现原理并不复杂,但是蛮繁琐的,好在有一个 gem redis-objects https://github.com/nateware/redis-objects 可以简化操作。

    举个例子,假如对某一个 user 有一个长时间处理的任务,希望避免同时执行,就可以用下面的代码实现。

    class User
       include Redis::Objects
    
       lock :large_job, expiration: 120.seconds
    
       #...
    
       def execute_large_job
           large_job_lock.lock do 
              # do something slowly
           end
       end
    
       # ...
    end
    

    把执行 execute_large_job 过程放入 sidekiq 处理,sidekiq 本身有重试机制,当出现同时争取执行这个任务时,只有一个可以执行,另一个会抛异常,然后过一段时间之后重试。

    希望对你有帮助。

  • Prev
  • 1
  • 2
  • …
  • 5
  • 6
  • 7
  • 8
  • 9
  • …
  • 16
  • 17
  • Next
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English