Created
January 24, 2011 01:12
-
-
Save therealadam/792648 to your computer and use it in GitHub Desktop.
Cassandredis, a possibly ill-advised hack
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# cassandredis.rb - It makes your Cassandra look like a Redis. | |
require "cassandra/0.7" | |
class Cassandredis | |
# Connect to a keyspace and column family. | |
def initialize(keyspace, cf) | |
@client = Cassandra.new(keyspace) | |
@cf = cf | |
end | |
# Add a value to a set. | |
def sadd(key, member) | |
client.insert(cf, "set:#{key}", {member => ''}) | |
end | |
# Count the values in a set. | |
def scard(key) | |
# This bonks due to a problem in cassandra/0.7 ? | |
client.count_columns(cf, "set:#{key}") | |
end | |
# Determine if a given value is a member of a set | |
def sismember(key, member) | |
!client.exists?(cf, "set:#{key}", member).nil? | |
end | |
# Get all the members in a set | |
def smembers(key) | |
client.get(cf, "set:#{key}").keys | |
end | |
# Remove a member from a set | |
def srem(key, member) | |
client.remove(cf, "set:#{key}", member) | |
end | |
# Add multiple sets | |
def sunion(*keys) | |
client. | |
multi_get(cf, keys.map { |k| key_for(k) }). | |
inject([]) { |result, set| | |
result << set.last.keys | |
}. | |
flatten | |
end | |
protected | |
def client | |
@client | |
end | |
def cf | |
@cf | |
end | |
def key_for(k) | |
"set:#{k}" | |
end | |
end | |
gizmo = Cassandredis.new("Cassandredis", :Gizmo) | |
gizmo.sadd("beatles", "john") | |
gizmo.sadd("beatles", "paul") | |
gizmo.sadd("beatles", "george") | |
gizmo.sadd("beatles", "ringo") | |
# if gizmo.sismember("beatles", "john") | |
# puts "John is a Beatle." | |
# else | |
# puts "John is not a Beatle." | |
# end | |
# puts "Current Beatles: #{gizmo.smembers("beatles").inspect}" | |
# | |
# gizmo.srem("beatles", "john") | |
# | |
# puts "Current Beatles: #{gizmo.smembers("beatles").inspect}" | |
gizmo.sadd("stones", "mick") | |
gizmo.sadd("stones", "keif") | |
gizmo.sadd("stones", "ronnie") | |
gizmo.sadd("stones", "charlie") | |
p gizmo.sunion("beatles", "stones") | |
# puts "Beatles and Stones: #{gizmo.sunion("beatles", "stones").inspect}" | |
# p gizmo.scard("beatles") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment