首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ruby学习笔记(11)--symbol与hash参数

symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001".object_id...object_id puts "0001".object_id 输出结果类似如下: 32088750 32088730 32088710 32088690 可以发现即使是同样内容的字符串"0001",在ruby...解释器内部每次也都是当作不同的对象来处理的,这样随着字符中的调用次数增加,ruby解释器的负担不是越来越重,内存消耗越来越大?...有没有一种方法,让ruby在内部记录一下,如果遇到相同内容的字符串,就不用再生成新的String对象,而是直接取已经存在的对象返回呢?...puts "#{key} is #{value}"} end my_method("1","2",:title=>"标题",:id=>123) 参数定义中我们用options={}定义了一个空的hash

1K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《Effective-Ruby》读书笔记

    年轻代的对象数量可以用 heap_live_slot 减去 old_object 来获得 该散列中还有几个有趣的数字,但在介绍之前,让我们来学习垃圾收集器的最后一个要点。还记得对象是存在槽中的吧。...下面是 Ruby 2.1 中用于调优的环境变量(仅供参考): 环境变量名 说明 RUBY_GC_HEAP_INIT_SLOTS 初始槽的数量。...默认为 10k,增加它的值可以让你的应用程序启动时减少垃圾收集器的工作效率 RUBY_GC_HEAP_FREE_SLOTS 垃圾收集器运行后,空槽数量的最小值。...如果空槽的数量小于这个值,那么 Ruby 会申请额外的页,并放入堆中。默认值是 4096 RUBY_GC_HEAP_GROWTH_FACTOR 当需要额外的槽时,用于计算需要增加的页数的乘数因子。...RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR 用于计算出发主要模式垃圾收集器的门限值的乘数因子。门限由前一次主要清除后年老代对象数量乘以该因子得到。

    4K60

    03 . Redis集群

    常见的 哈希分区 规则有几种,下面分别介绍: 节点取余分区 使用特定的数据,如 Redis 的 键 或 用户 ID,再根据 节点数量 N 使用公式:hash(key)% N 计算出 哈希值,用来决定数据...一致性哈希分区 一致性哈希 可以很好的解决 稳定性问题,可以将所有的 存储节点 排列在 收尾相接 的 Hash 环上,每个 key 在计算 Hash 后会 顺时针 找到 临接 的 存储节点 存放。...普通 的 一致性哈希分区 在增减节点时需要 增加一倍 或 减去一半 节点才能保证 数据 和 负载的均衡。...环境 wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz tar zxvf ruby-2.3.5.tar.gz cd ruby.../configure --prefix=/opt/ruby make && make install ln -s /opt/ruby/bin/ruby /usr/bin/ruby ln -s /opt

    63960

    redis集群设计方案及原理

    (1)哈希取余分区     哈希取余分区思路非常简单:计算key的hash值,然后对节点数量进行取余,从而决定数据映射到哪个节点上。...(1)安装Ruby环境   以Ubuntu为例,如下操作即可安装Ruby环境:   1 apt-get install ruby #安装ruby环境   2 gem install redis #gem...是ruby的包管理工具,该命令可以安装ruby-redis依赖   (2)启动节点   与第一种方法中的“启动节点”完全相同。   ...Hash Tag Hash Tag原理是:当一个key包含 {} 的时候,不对整个key做hash,而仅对 {} 包括的字符串做hash。...不过Hash Tag可能会带来数据分配不均的问题,这时需要:(1)调整不同节点中槽的数量,使数据分布尽量均匀;(2)避免对热点数据使用Hash Tag,导致请求分布不均。

    63010

    【优选算法】Sliding-Chakra:滑动窗口的算法流(下)

    ,即进窗口,判断不断循环,然后right依次向后移并不断往哈希表录入每个位置种类和更新数据,直到哈希表内的键值对大于2,即种类大于2;此时left减去第一个数据,即出窗口,判断不断循环,然后不断向后移直到哈希表里的一个种类数据变为...,被寻找的字符串创建模拟哈希表hash2,对比两个哈希表的种类及数量就能准确得出是否为异位词 第二步: 具体实现的流程图如图所示,与前些写的题有些许不同 先让第一个数据录入,即进窗口,判断不断循环,然后...right依次向后移并不断往哈希表中录入,直到left和right之间的长度大于字符串p;此时left减去第一个数据,即出窗口,判断不断循环,然后向后移1位使长度继续维持为字符串p,check然后如果符合要求则更新结果...,通常想不到,因此很有学习价值 先统计字符串p中的字符种类及数量,count表示s中left和right之间的种类数量,在right移动过程中,字符串s的起始种类数量都为0,然后当字符串s的种类数量小于等于字符串...,无论其他的字符有多少个 细节问题 所以本题虽说是困难难度,但是依据前几题的思路铺垫,这道题也能说不在话下了,依旧是模拟哈希表+滑动窗口(因为哈希表太占空间了,影响效率) 注意当是当hash2中的种类数量和

    8210

    Redis集群搭建

    集群中放置一个key-value时,Redis先对key使用crc16算法算出一个结果,然后把结果对 16384 求余数,这样每个key都会对应一个编号在 0-16383 之间的哈希槽,Redis 会根据节点数量大致均等的将哈希槽映射到不同的节点...ruby环境 Redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境: 安装ruby: yum install ruby yum install rubygems 但是这种安装方式装好的...注意创建过程的日志,每个redis都获得了一个编号,同时日志也说明了哪些实例做主机,哪些实例做从机,每个从机的主机是谁,每个主机所分配到的hash槽范围等等。...再注意:删除已经占有hash槽的结点会失败,报错如下: [ERR] Node 127.0.0.1:7005 is not empty!...需要将该结点占用的hash槽分配出去(分配方式与上文一致,不赘述)。 好了,redis集群搭建我们先说这么多,有问题欢迎留言讨论。

    99211

    Redis特性和应用场景

    incrby 对可以的value加指定的值, key如果不存在会设置key并value为0incrby key1 5 //对key1的值加5 decr 对key的值做减减操作 -1 decrby 对key的值减去指定值...hincrby 给hash表的某个字段增加值 hexists 判断hash表中某个key是否存在 hlen 返回hash表中的key数量 hdel 删除指定hash表的某个键值对 hkeys...返回hash表中所有的key hvals 返回hash表中所有的value hgetall 获取hash表中所有key和value 1.3. ...-1 //逆序后的元素 zrangebyscore 根据排序索引的scores来返回元素 zrangebyscore myzset 1 3 withscores// zcount 返回集合中给定区间的数量...tag表使用集合来存储数据,因为集合擅长求交集、并集 sadd tag:ruby 1 sadd tag:ruby 2 sadd tag:web 2 sadd tag:erlang 3 //即属于ruby

    1.4K70

    Redis特性和应用场景

    incrby 对可以的value加指定的值, key如果不存在会设置key并value为0 incrby key1 5 //对key1的值加5 decr 对key的值做减减操作 -1 decrby 对key的值减去指定值...hincrby 给hash表的某个字段增加值 hexists 判断hash表中某个key是否存在 hlen 返回hash表中的key数量 hdel 删除指定hash表的某个键值对 hkeys...返回hash表中所有的key hvals 返回hash表中所有的value hgetall 获取hash表中所有key和value 1.3. ...-1 //逆序后的元素 zrangebyscore 根据排序索引的scores来返回元素 zrangebyscore myzset 1 3 withscores// zcount 返回集合中给定区间的数量...tag表使用集合来存储数据,因为集合擅长求交集、并集 sadd tag:ruby 1 sadd tag:ruby 2 sadd tag:web 2 sadd tag:erlang 3 //即属于ruby

    1.9K70

    redis应用场景

    2、Hash 常用命令:hget,hset,hgetall 等。...那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图: ?...实现方式: 上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储...如果过滤器的数量受到限制,你可以简单的为每个不同的过滤器使用不同的Redis列表。毕竟每个列表只有5000条项目,但Redis却能够使用非常少的内存来处理几百万条项目。...想知道特定用户的数量吗?只需要使用 SCARD page:day1: 需要测试某个特定用户是否访问了这个页面?

    77010

    redis应用场景

    2、Hash 常用命令:hget,hset,hgetall 等。...那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图 ?...实现方式: 上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储...如果过滤器的数量受到限制,你可以简单的为每个不同的过滤器使用不同的Redis列表。毕竟每个列表只有5000条项目,但Redis却能够使用非常少的内存来处理几百万条项目。...想知道特定用户的数量吗?只需要使用 SCARD page:day1: 需要测试某个特定用户是否访问了这个页面?

    1.5K20

    【Leetcode】“滑” 出新天地:滑动窗口法的思路转换与问题破解

    每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。...变为求一定连续的中间的数字组合为数组总和-目标数; 2.求最小的组合数字之和,变为求中间区间满足条件的长度; 3.最后返回时,进行“取反”即可 具体的图示如下: 解释: 此时就变成了典型滑动窗口的问题了,即在满足连续区间为数组总和减去这里目标数的值...,最后在求到最大的长度后,用数组总长度减去区间长度即可~~~ 所以解决这类问题的时候,要注意变换思路来进行解决,如果按照题目描述这样来进行操作,那么此时就会导致思路“卡死”的情况;当然有这种解法,可以在评论区评论哦...int out=fruits[left]; hash.put(out,hash.get(out)-1); if(hash.get(out)...; 一类时哈希表,HashMap所占用的空间就是和存储的键值对数量相关,其空间复杂度为O(N)量级。

    9510

    深入学习Redis:集群

    (1)安装Ruby环境 以Ubuntu为例,如下操作即可安装Ruby环境: apt-get install ruby #安装ruby环境 gem install redis #gem是ruby的包管理工具...(1)哈希取余分区 哈希取余分区思路非常简单:计算key的hash值,然后对节点数量进行取余,从而决定数据映射到哪个节点上。...槽是介于数据和实际节点之间的虚拟概念;每个实际节点包含一定数量的槽,每个槽包含哈希值在一定范围内的数据。引入槽以后,数据的映射关系由数据hash->实际节点,变成了数据hash->槽->实际节点。...Hash Tag Hash Tag原理是:当一个key包含 {} 的时候,不对整个key做hash,而仅对 {} 包括的字符串做hash。...不过Hash Tag可能会带来数据分配不均的问题,这时需要:(1)调整不同节点中槽的数量,使数据分布尽量均匀;(2)避免对热点数据使用Hash Tag,导致请求分布不均。

    1.5K20

    Redis

    一个hash表中有多个hash节点,每个hash节点存储一组键值对,采用链表解决hash冲突,即将多个哈希值相同的键值对连接在一起。...hash表中生效。...指向跳跃表的表头节点 tail:指向跳跃表的表尾巴=节点 level:记录目前跳跃表内层数最大的那个节点层数,图中L开头的数字表示第几层,每一层有若干节点 length:记录跳跃表的长度,即跳跃表目前包含节点的数量...线程写完毕后再继续执行下一步;个人理解这样做的目的可避免内存的同步竞争; 多个IO线程充分利用了多CPU优势缓解Scocket读写引起的用户态至内核态系统调用成本; image.png 图片来源:https://ruby-china.org...参考文献: https://www.cnblogs.com/powertoolsteam/p/redis.html http://dockone.io/article/10137 https://ruby-china.org

    46850

    YAML 语言入门教程 转

    基本语法规则: 1.大小写敏感 2.使用缩进表示层级关系 3.不允许使用TAB键来缩进,只允许使用空格键来缩进 4.缩进的空格数量不重要 5.使用"#"来表示注释 支持的数据格式:...以下分别介绍这三种数据格式 对象 对象的一组键值对,是用冒号结构来表示 animal: pets 转为JavaScript { animal: 'pets' } YAML也支持另一种写法,将所有的键值对写成一个行内对象 hash...: { name: steve, foo: bar } 转为JavaScript { hash: { name: 'steve', foo: 'bar'}} 数组 一组连词线开头的行,构成一个数组 -...- Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: user.perl.org...转为JavaScript { languages: [ 'Ruby', 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby

    1.2K30
    领券