]>
Commit | Line | Data |
---|---|---|
8de4907a | 1 | # redis-sha1.rb - Copyright (C) 2009 Salvatore Sanfilippo |
2 | # BSD license, See the COPYING file for more information. | |
3 | # | |
4 | # Performs the SHA1 sum of the whole datset. | |
5 | # This is useful to spot bugs in persistence related code and to make sure | |
6 | # Slaves and Masters are in SYNC. | |
7 | # | |
8 | # If you hack this code make sure to sort keys and set elements as this are | |
9 | # unsorted elements. Otherwise the sum may differ with equal dataset. | |
10 | ||
11 | require 'rubygems' | |
12 | require 'redis' | |
13 | require 'digest/sha1' | |
14 | ||
15 | def redisSha1(opts={}) | |
16 | sha1="" | |
17 | r = Redis.new(opts) | |
18 | r.keys('*').sort.each{|k| | |
8de4907a | 19 | vtype = r.type?(k) |
20 | if vtype == "string" | |
b32627cd | 21 | len = 1 |
22 | sha1 = Digest::SHA1.hexdigest(sha1+k) | |
8de4907a | 23 | sha1 = Digest::SHA1.hexdigest(sha1+r.get(k)) |
24 | elsif vtype == "list" | |
b32627cd | 25 | len = r.llen(k) |
26 | if len != 0 | |
27 | sha1 = Digest::SHA1.hexdigest(sha1+k) | |
28 | sha1 = Digest::SHA1.hexdigest(sha1+r.list_range(k,0,-1).join("\x01")) | |
29 | end | |
8de4907a | 30 | elsif vtype == "set" |
b32627cd | 31 | len = r.scard(k) |
32 | if len != 0 | |
33 | sha1 = Digest::SHA1.hexdigest(sha1+k) | |
34 | sha1 = Digest::SHA1.hexdigest(sha1+r.set_members(k).to_a.sort.join("\x02")) | |
35 | end | |
5ad3c8c8 | 36 | elsif vtype == "zset" |
b32627cd | 37 | len = r.zcard(k) |
38 | if len != 0 | |
39 | sha1 = Digest::SHA1.hexdigest(sha1+k) | |
40 | sha1 = Digest::SHA1.hexdigest(sha1+r.zrange(k,0,-1).join("\x01")) | |
41 | end | |
8de4907a | 42 | end |
b32627cd | 43 | # puts "#{k} => #{sha1}" if len != 0 |
8de4907a | 44 | } |
45 | sha1 | |
46 | end | |
47 | ||
57172ffb | 48 | host = ARGV[0] || "127.0.0.1" |
49 | port = ARGV[1] || "6379" | |
e96e4fbf | 50 | db = ARGV[2] || "0" |
51 | puts "Performing SHA1 of Redis server #{host} #{port} DB: #{db}" | |
52 | p "Dataset SHA1: #{redisSha1(:host => host, :port => port.to_i, :db => db)}" |