Redis零起点-探索Redis,学习Redis基础用法

作者:Gigi Sayfan 时间:2018.8.28

广告

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

Redis有什么特殊之处?

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

  • 丰富的键值类型:字符串,字典(哈希),集合,位图和hyperlogs
  • 对这些值的高级操作
  • 可选择的持久性
  • 主-从式设置
  • 异步复制
  • 监控哨兵、通过、自动故障处理
  • 事务
  • 发布、订阅消息
  • 自动回收最不常用的键值
  • 自动回收超时的键值
  • 脚本(使用Lua)

Redis的基础用例

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

Redis实践

让我们进一步探索Redis。从这里下载和安装Redis。
http://www.cnblogs.com/super-d2/p/3819385.html
如果你使用的是Mac OSX,我建议使用Homebrew来安装。
然后让我们启动redis。在redis-server终端窗口,你会看见这个:
这里写图片描述
还有一些可爱的ASCII艺术字。现在,在另一个终端窗口redis-cli。这里少了一些色彩,你会看到这个:

~>redis-cli
127.0.0.1:6379

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

简单的值

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

127.0.0.1:6379> set k v
OK
127.0.0.1:6379> get k
"v"
127.0.0.1:6379> get no_such_key
(nil)

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

127.0.0.1:6379> del k
(integer) 1
127.0.0.1:6379> del no_such_key
(integer) 0

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

计数

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

127.0.0.1:6379> set counter 0
OK
127.0.0.1:6379> incr counter 1
(integer) 1
127.0.0.1:6379> incrby counter 3
(integer) 4

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

127.0.0.1:6379> incrby counter -2
(integer) 2

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

浏览关键字

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

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> keys k*
1) "k1"
2) "k2"

lists

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

127.0.0.1:6379> lpush superheroes batman
(integer) 1
127.0.0.1:6379> lpush superheroes spiderman
(integer) 2
127.0.0.1:6379> llen superheroes
(integer) 2
127.0.0.1:6379> lrange superheroes 0 -1
1) "spiderman"
2) "batman

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

127.0.0.1:6379> rpush superheroes "the incredible hulk" catwoman
(integer) 4
127.0.0.1:6379> rpop superheroes
"catwoman"
127.0.0.1:6379> lpop superheroes
"spiderman"
127.0.0.1:6379> lrange superheroes 0 -1
1) "batman"
2) "the incredible hulk"

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

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

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

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

127.0.0.1:6379> sismember primes 8
(integer) 0
127.0.0.1:6379> sismember primes 7
(integer) 1

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

127.0.0.1:6379> sinter primes integers_to_10
1) "2"
2) "3"
3) "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。它的擅长的技术领域包括数据库、底层网络、分布式系统、非传统的用户接口和通用的软件开发生命周期。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值