探索Redis,学习Redis基础用法

作者:Gigi Sayfan 时间:2018.8.28

广告

Redis是一个在内存中的键值数据库,它是免费且开源的。它是用C语言实现的,运行速度非常快。Redis已经是一个成熟(现在是3.03版本)的产品了。它经历了非常严酷的战火的洗礼,给大大小小的用户们使用了多年。Redis提供了非常好的文档,以及供各种编程语言使用的用户库。 在本文中,我会带领大家一起探索Redis,学习它的基本用法。

Redis有什么特殊之处?

Redis的速度非常快。要使一个软件运行速度快,最典型的方法就是关注每个细小的功能片,然后玩命地优化它。Redis则不同。它提供的丰富的高级特性能够匹敌甚至超越大多数的键值数据库,但不影响速度。让我们一起快速过一下Redis的特性:

Redis的基础用例

Redis可用于多种目的。它作为超快的分布式缓冲区非常棒。但是,它常被当作队列(使用命令对一个list的条目作push和pop)使用,或者利用它的发布-订阅系统实现事件路由器功能。Redis通过它的增量命令来计数。对于需要跟踪最后一条item的用例,Redis提供了一个很好的替代方法,不再需要关系数据库中过多的索引,而只是对项目保持一个修剪列表就可以了。

Redis实践

让我们进一步探索Redis。从这里下载和安装Redis。 linking… 如果你使用的是Mac OSX,我建议使用Homebrew来安装。 然后让我们启动redis。在redis-server终端窗口,你会看见这个: img… 还有一些可爱的ASCII艺术字。现在,在另一个终端窗口redis-cli。这里少了一些色彩,你会看到这个:

~>redis-cli127

不管怎样,我们就要开始了。先存一些关键字和值到数据库里去吧。

简单的值

这个例子是关于如何设置和获取简单的字符串型值

:6379> set k vOK:6379> get k:6379> get no_such_key(nil)

哇!你已经掌握了Redis的80%了。这是一个非常简单的高速缓存。 那么怎么删除关键字呢?没问题。

127> del k(integer) 1127> del no_such_key(integer) 0

Redis会告诉有多少个关键字被删除了。

计数

Redis能够支持+1和+n两种计数方式来改变键所对应的值。

127> set counter 0OK127> incr counter 1(integer) 1127> incrby counter 3(integer) 4

“incrby”命令表示+n。因此,你想加多少都可以。redis还可以返回增加后计数器的值。 通过把n设置为负数,你也可以实现向下计数。

127> (integer) 2

计数器的操作是原子操作,这对多用户环境来说很重要。

浏览关键字

如果你想知道哪些关键字是可用的,你可以使用命令”keys”结合模型匹配:

:6379> set k1 1OK:6379> set k2 2OK:6379> keys k*1) “k1″2) “k2″lists

redis不只是可以存储简单的字符串和数字。让我们来看一下list。lists是有序的item集合。你可以从lists尾部push或pop item。你可以查询lists的长度,你可以获取lists的片段。这里有一个简单的例子:

127> (integer) 1127> (integer) 2127> llen superheroes(integer) 2127> lrange superheroes 0 -11) “spiderman”2) “batman

“lrange”命令接收起始索引和最后索引。-1表示显示到最后一条。第一个索引是0。输出结果从1开始时不要觉得困惑。 更多例子:

:6379> rpush superheroes “the incredible hulk” catwoman(:6379> rpop superheroes:6379> lpop superheroes:) “the incredible hulk”

它对数据结构操作的接口非常完整,它能够提供随机访问队列lists(使用lrange),后进先出栈stack(使用lpush/lpop),先进先出队列queue(使用lpush,rpop)或双端队列dequeue(对两端的push/pop)。

sets 对于item的无序集合,常常会选择sets。redis对于管理sets有着非常完整的命令:

127> sadd primes 2 3 5 7 11 13 17 19(integer) 8127> sadd integers_to_10 1 2 3 4 5 6 7 8 9 10(integer) 10

举个例子,这里有两个sets。一个是不超过20的素数,另一个是1-10的整数。 现在,你可以做第一个测试—“sismember”命令:

127> sismember primes 8(integer) 0127> sismember primes 7(integer) 1

找到不超过10的素数,我们可以使用求交集命令

127.0.0.1:6379> sinter primes integers_to_10) “5”4) “7”

这个例子中我们很幸运,因为结果是排序的。但是通常情况下,sets是无序的,我们得到的结果可能是任意序列的。Redis也支持对sets排序,每个item对应一个分数,然后基于这个分数对sets排序。

总结 redis是一个多功能的数据库,拥有丰富的高级特性。它还有一个相对较新的产品配件来扩展它的能力,使它能够处理那些不能只在一个机器上处理的用例。那就花些时间学习并把它用到你的系统中吧。

作者简介: Gigi Sayfan是Aclima一个负责软件架构的主管。Aclima是一个创业公司,负责设计和部署分布式传感器网络,提供高级别的环境意识。Gigi从事专业软件开发20多年了,涉及领域广泛,包括即时通讯、变形、芯片制造工艺控制、游戏控制台和嵌入式多媒体应用、脑启发机器学习、客户浏览器开发、3D分布式游戏平台的WEB服务和最近的物联网传感器。它每天写到产品中的编程语言包括C、C++、C#、Python、Java、Delphi、Javascript,甚至还有为操作系统(Windows3.11到windows7,Linux,Max OSX,, 嵌入式Lynx和索尼游戏机)所写的Cobol和PowerBuilder。它的擅长的技术领域包括数据库、底层网络、分布式系统、非传统的用户接口和通用的软件开发生命周期。

每个人在他的人生发轫之初,总有一段时光,

探索Redis,学习Redis基础用法

相关文章:

你感兴趣的文章:

标签云: