Module: RedisClient::Cluster::KeySlotConverter
- Defined in:
- lib/redis_client/cluster/key_slot_converter.rb
Class Method Summary collapse
Class Method Details
.convert(key) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/redis_client/cluster/key_slot_converter.rb', line 50 def convert(key) return nil if key.nil? hash_tag = extract_hash_tag(key) key = hash_tag unless hash_tag.empty? crc = 0 key.each_byte do |b| crc = ((crc << 8) & 0xffff) ^ XMODEM_CRC16_LOOKUP[((crc >> 8) ^ b) & 0xff] end crc % HASH_SLOTS end |
.extract_hash_tag(key) ⇒ Object
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/redis_client/cluster/key_slot_converter.rb', line 65 def extract_hash_tag(key) key = key.to_s s = key.index(LEFT_BRACKET) return EMPTY_STRING if s.nil? e = key.index(RIGHT_BRACKET, s + 1) return EMPTY_STRING if e.nil? key[s + 1..e - 1] end |
.hash_tag_included?(key) ⇒ Boolean
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/redis_client/cluster/key_slot_converter.rb', line 76 def hash_tag_included?(key) key = key.to_s s = key.index(LEFT_BRACKET) return false if s.nil? e = key.index(RIGHT_BRACKET, s + 1) return false if e.nil? s + 1 < e end |