I am working on a small Ruby app that uses Redis. It won’t really do much. I am just doing it to work with Redis a bit. I am using the Redis gem.
For my reference, here are some commands from The Little Redis Book. (I think this is allowed under the license.)
https://github.com/karlseguin/the-little-redis-book/blob/master/en/redis.md
set users:leto “{name: leto, planet: dune, likes: [spice]}”
get users:leto
set users:leto “{name: leto, planet: dune, likes: [spice]}”
> strlen users:leto
(integer) 42
> getrange users:leto 27 40
“likes: [spice]”
> append users:leto ” OVER 9000!!”
(integer) 54
> incr stats:page:about
(integer) 1
> incr stats:page:about
(integer) 2
> incrby ratings:video:12333 5
(integer) 5
> incrby ratings:video:12333 3
(integer) 8
hset users:goku powerlevel 9000
hget users:goku powerlevel
hmset users:goku race saiyan age 737
hmget users:goku race powerlevel
hgetall users:goku
hkeys users:goku
hdel users:goku age
lpush newusers goku
ltrim newusers 0 50
keys = redis.lrange(‘newusers’, 0, 10)
redis.mget(*keys.map {|u| “users:#{u}”})
sadd friends:leto ghanima paul chani jessica
sadd friends:duncan paul jessica alia
sismember friends:leto jessica
sismember friends:leto vladimir
sinter friends:leto friends:duncan
sinterstore friends:leto_duncan friends:leto friends:duncan
zadd friends:duncan 70 ghanima 95 paul 95 chani 75 jessica 1 vladimir
zcount friends:duncan 90 100
zrevrank friends:duncan chani
Has a good summary of Big O notation
Bad command:
set users:leto@dune.gov “{id: 9001, email: ‘leto@dune.gov’, …}”
set users:9001 “{id: 9001, email: ‘leto@dune.gov’, …}”
better:
set users:9001 “{id: 9001, email: leto@dune.gov, …}”
hset users:lookup:email leto@dune.gov 9001
get users:9001
id = redis.hget(‘users:lookup:email’, ‘leto@dune.gov’)
user = redis.get(“users:#{id}”)
sadd friends:leto ghanima paul chani jessica
sadd friends_of:chani leto paul
keys = redis.lrange(‘newusers’, 0, 10)
redis.mget(*keys.map {|u| “users:#{u}”})
sadd friends:vladimir piter
sadd friends:paul jessica leto “leto II” chani
Ruby:
redis.pipelined do
9001.times do
redis.incr(‘powerlevel’)
end
end
A transaction:
multi
hincrby groups:1percent balance -9000000000
hincrby groups:99percent balance 9000000000
exec
In Ruby:
redis.multi()
current = redis.get(‘powerlevel’)
redis.set(‘powerlevel’, current + 1)
redis.exec()
Or better yet:
redis.watch(‘powerlevel’)
current = redis.get(‘powerlevel’)
redis.multi()
redis.set(‘powerlevel’, current + 1)
redis.exec()
Bad idea in production:
keys bug:1233:*
Better:
hset bugs:1233 1 “{id:1, account: 1233, subject: ‘…’}”
hset bugs:1233 2 “{id:2, account: 1233, subject: ‘…’}”
expire pages:about 30
expireat pages:about 1356933600
ttl pages:about
persist pages:about
setex pages:about 30 ‘<h1>about us</h1>….’
It has pub/sub. Can it be used instead of/in place of something like Rabbit or ZeroMQ?
subscribe warnings
publish warnings “it’s over 9000!”
config set slowlog-log-slower-than 0
slowlog get
slowlog get 10
rpush users:leto:guesses 5 9 10 2 4 10 19 2
sort users:leto:guesses
sadd friends:ghanima leto paul chani jessica alia duncan
sort friends:ghanima limit 0 3 desc alpha
sadd watch:leto 12339 1382 338 9338
set severity:12339 3
set severity:1382 2
set severity:338 5
set severity:9338 4
sort watch:leto by severity:* desc
A group:
hset bug:12339 severity 3
hset bug:12339 priority 1
hset bug:12339 details “{id: 12339, ….}”
hset bug:1382 severity 2
hset bug:1382 priority 2
hset bug:1382 details “{id: 1382, ….}”
hset bug:338 severity 5
hset bug:338 priority 3
hset bug:338 details “{id: 338, ….}”
hset bug:9338 severity 4
hset bug:9338 priority 2
hset bug:9338 details “{id: 9338, ….}”
end of group
sort watch:leto by bug:*->priority get bug:*->details
sort watch:leto by bug:*->priority get bug:*->details store watch_by_priority:leto
config get *log*
rename-command CONFIG 5ec4db169f9d4dddacbfb0c26ea7e5ef
rename-command FLUSHALL 1041285018a942a4922cbf76623b741e
“type $KEY_NAME” is a good command as well
Image from the Rheinau Psalter, a 13th century manuscript housed at Central Library of Zurich. Image from e-Codices. This image is assumed to be allowed under Fair Use.