我一直在考虑深入研究NoSQL 数据库,但不确定我应该从哪一个开始。有一个lot of NoSQL databases在市场上,每个人解决一系列问题。我想学习一个NoSQL数据库,它没有陡峭的学习曲线,并且足够通用,可以解决不止一个问题。所以,当我找到我的出发点时,我开始研究不同的NoSQL数据库:Redis。
Redis是一个内存中的键值数据存储,由Salvatore Sanfilippo。Redis不仅支持字符串数据类型,还支持列表、集合、排序集合、散列数据类型,并提供了一套丰富的操作来处理这些类型。如果你曾与Memcached(内存中的对象缓存系统)你会发现它非常相似,但是Redis是Memcached++的。Redis不仅支持丰富的数据类型,还支持data replication 并且可以将数据保存在磁盘上。Redis的主要优势是:
从Redis开始是非常容易的。在Unix盒子上:
对于窗口用户
我是一个视窗用户,所以我写这篇文章的基础上,从最新的再贴现发行dmajkic git repository。一旦服务器和客户端都运行了,您就可以运行一些命令,如下图所示
redis> pingPONGredis> inforedis_version:2.1.8redis_git_sha1:00000000redis_git_dirty:0arch_bits:64....
如果您能够成功运行所有命令,那么这意味着您的Redis安装完成。如果你不想在你的机器上下载并安装Redis,你可以从浏览器中尝试Redishttp://try.redis-db.com/
Redis支持的数据类型有字符串、列表、集合、排序集合和哈希。我现在将简要地谈论不同的Redis类型,并使用redis-cli。
用线串
字符串是Redis支持的基本数据类型。您可以设置键的字符串值,也可以使用设置和获取命令获取键的字符串值。
redis> set firstname shekharOKredis> set lastname gulatiOKredis> get firstname"shekhar"redis> get lastname"gulati"
还有很多其他的操作,比如追加、获取范围、最小均方误差、长度等。可用于字符串。你可以找到整个列表here。如果您的键的值是整数,那么您可以使用DECR、DECRBY、INCRBY或INCR,它们允许您增加和减少值。这些在你想要保持一个网页点击次数的情况下非常有用。
redis> incr hitcounter(integer) 1redis> incr hitcounter(integer) 2redis> incr hitcounter(integer) 3redis> decr hitcounter(integer) 2
列表
列表是一个有序的集合,您可以在其中添加任意数量的元素。元素可以是唯一的,也可以是非唯一的。除了从列表中添加和获取元素,Redis还支持很多列表操作,如弹出、推送、范围等。您可以找到完整的命令列表here。让我们举一个例子,我们想要维护一个单词列表(唯一性并不重要),我们想要得到我们在系统中添加的最后3个单词。
redis> LPUSH words austerity(integer) 1redis> LPUSH words socialism(integer) 2redis> LPUSH words moritorium(integer) 3redis> LPUSH words socialism(integer) 4redis> LPUSH words socialism(integer) 5redis> LRANGE words 0 21) "socialism"2) "socialism"3) "moritorium"
需要注意的一点是,在Redis中,列表是从零开始的。
设置
集合是二进制字符串的无序集合。要将元素添加到集合中,可以使用SADD命令;要获取集合中的所有成员,可以使用SMEMBERS命令。您可以找到设置命令的完整列表here。让我们举一个例子,我们希望维护一个系统中添加的所有唯一单词的集合。
redis> SADD uniquewords austerity(integer) 1redis> SADD uniquewords pragmatic(integer) 1redis> SADD uniquewords moritorium(integer) 1redis> SADD uniquewords socialism(integer) 1redis> SADD uniquewords socialism(integer) 0
正如你所看到的,因为我们使用了集合,我们不能两次添加同一个词(社会主义)。
排序集
排序集是可以根据分数进行排序的集。所以每次你给集合增加一个值,你就提供一个分数,用来排序。例如,我们想根据单词的长度对它们进行分类。
redis> ZADD wordswithlength 9 austerity(integer) 1redis> ZADD wordswithlength 7 furtive(integer) 1redis> ZADD wordswithlength 5 bigot(integer) 1redis> ZRANGE wordswithlength 0 -11) "bigot"2) "furtive"3) "austerity"
还有很多其他有用的命令可以找到here。
哈希
哈希允许您根据哈希存储键值对。这在希望保存具有多个属性的对象的情况下非常有用。
redis> HSET user:1 name shekhar(integer) 1redis> HSET user:1 lastname gulati(integer) 1redis> HGET user:1redis> HGET user:1 name"shekhar"redis> HGETALL user:11) "name"2) "shekhar"3) "lastname"4) "gulati"
除了提供所有这些数据类型,Redis还支持事务和发布/订阅。我将在以后的帖子中谈论这些特性。
我们将在我将来关于Redis的文章中更深入地研究这些数据类型,我们将使用Redis作为数据存储来构建一个字典应用程序。我将使用春季数据再版支持与再版互动。对Redis的春季支持也是我考虑使用Redis的原因之一。