CODE4FUN
Redis的数据类型

Redis 是一个开源的高级key-value数据库. 由 Salvatore Sanfilippo (就算是老外,名字也够奇怪) 和 Pieter Noordhuis 使用C开发. 如果你使用过 memcached ,就会发现两者十分相似, 但是 Redis 并非memcached的++, Redis不仅支持更丰富的数据结构,并且数据 可持久化 . Redis的两个最大优点:

超级快: 使用Redis自带的redis-benchmark工具测试, 在Linux 2.6,Xeon X3320 2.5G的机器上可以达到每秒110000次SET 81000次GET. 见 How fast is Redis?

丰富的数据类型 Redis目前支持的

数据类型 ,

Redis会在启动后将所有的数据加载到内存,这也是为什么Redis会如此快的原因之一. 但是有时候我们并不需要用到所有数据, 这样加载所有数据对内存是种巨大的浪费. Redis 2.0引进了 Virtual Memory 技术来避免这种情况.

闲话休提, 回归正传. String就不用说它了, 说说其它四种类型

List: Redis中的list是使用 Linkedlist 实现的, 也就是说向list中添加新的数据复杂度为O(1). list主要 操作 :

5.times do |i|
  redis.lpush('list1', "lpush-#{i}")
end

5.times do |i|
  redis.rpush('list1', "rpush-#{i}")
end

puts redis.lrange('list1', 0, -1)

#lpush-4
#lpush-3
#lpush-2
#lpush-1
#lpush-0
#rpush-0
#rpush-1
#rpush-2
#rpush-3
#rpush-4

Set: Set是未排序的集合.

set的主要 操作 :

5.times do |i|
  redis.sadd('set1', "set-#{i}")
end

puts redis.sismember('set1', 'set-2')
#true

puts redis.smembers('set1')
#set-2
#set-3
#set-4
#set-0
#set-1

5.times do |i|
  redis.sadd('set2', "set-#{i + 3}")
end

puts redis.sinter('set1', 'set2')
#set-3
#set-4

Sorted set 与Set十分相似, 但是它是排序的集合.

sorted set的主要 操作 :

#5.times do |i|
#  redis.zadd('sortedset1', rand(100), "sortedset-#{i}")
#end

puts redis.zrange('sortedset1', 0, -1)
#sortedset-1
#sortedset-3
#sortedset-0
#sortedset-2
#sortedset-4
puts redis.zrevrange('sortedset1', 0, -1, {:with_scores => true})
#sortedset-4
#79
#sortedset-2
#62
#sortedset-0
#38
#sortedset-3
#11
#sortedset-1
#4
puts redis.zrangebyscore('sortedset1', 10, 90, :limit => [0, 2], :with_scores => true)
#sortedset-3
#11
#sortedset-0
#38

Hashe hash表结构

Hashe的主要 操作 :

5.times do |i|
  redis.hset("hash1", "field#{i}", "hash-value#{i}")
end

puts redis.hkeys("hash1")
puts '*' * 10
redis.hdel("hash1", "field1")
puts '*' * 10
puts redis.hvals("hash1")
puts '*' * 10
puts redis.hgetall("hash1")
puts '*' * 10
puts redis.hget("hash1", "field2")
puts '*' * 10
puts redis.hmget("hash1", "field0", "field1", "field3", "field4")
#field0
#field1
#field2
#field3
#field4
#**********
#**********
#hash-value0
#hash-value2
#hash-value3
#hash-value4
#**********
#{"field0"=>"hash-value0", "field2"=>"hash-value2", "field3"=>"hash-value3", "field4"=>"hash-value4"}
#**********
#hash-value2
#**********
#hash-value0
#
#hash-value3
#hash-value4