Redis开发者手册

1.Redis简介
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了五种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,除此之外,通过复制、持久化(persistence)和分片(sharding)等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒钟处理上百万次请求的系统。
Redis不使用表,它的数据库也没有预定义或者强制的方式来要求用户关联Redis存储的不同数据。
附加特性:
“当服务器被关闭时,服务器存储的数据将何去何从呢?”Redis拥有两种不同形式的持久化方法,它们都可以用小而紧凑的格式将存储在内存中的数据写入到磁盘:第一种持久化方法为时间点转储(point-in-time dump),转储操作既可以在“指定时间段内有指定数量的写操作执行”这一条件被满足时执行,又可以通过调用两条转储到磁盘(dump-to-disk)命令中的任何一条来执行;第二种持久化方法将所有修改了数据库的命令都写入到一个只追加(append-only)文件里面,用户可以根据数据的重要程度,将只追加写入设置为从不同步(sync)、每秒钟同步一次或者每写入一个命令就同步一次。

另外,尽管Redis的性能很好,但受限于Redis的内存存储设计,有时候只使用一台Redis服务器可能没有办法处理所有请求。因此,为了扩展Redis的读性能,并为Redis提供故障转移(failover)支持,Redis实现了主从复制特性:执行复制的从服务器会连接上主服务器,接收主服务器发送的完整数据库的初始副本(copy);之后主服务器执行的写命令,都会被发送给所有连接着的从服务器去执行,从而实时地更新从服务器的数据集。因为从服务器包含的数据会不断地进行更新,所以客户端可以向任意一个从服务器发送读请求,以此来避免对主服务器进行集中式的访问。
1.3 使用Redis的理由
有memcached使用经验的读者可能知道,用户只能用APPEND命令将数据添加到已有字符串的末尾。memcached的文档中声明,可以用APPEND命令来管理元素列表。这很好!用户可以将元素追加到一个字符串的末尾,并将那个字符串当作列表来使用。但随后如何删除这些元素呢?memcached采用的办法是采用黑名单(blacklist)来隐藏列表里面的元素,从而避免对元素执行读取、更新、写入(或者数据库请求和memcached写入)等操作。相反地,Redis的LIST和SET允许用户直接添加或者删除元素。

使用Redis代替memcached可以解决这个问题以及其他问题,不仅可以让代码变得更简短、更易懂、更易维护,而且还可以使代码的运行速度更快(因为用户不需要通过读取数据库来更新数据)。除此之外,在其他许多情况下,Redis的效率和易用性也比关系数据库要好得多。

使用Redis而不是关系数据库或者其他磁盘存储数据库,可以避免写入不必要的临时数据,也免去了对临时数据进行扫描或者删除的麻烦,并最终改善程序的性能。虽然上面列举的都是一些简单的例子,但它们很好地证明了“工具会极大地改变人们解决问题的方式”这一点。

在了解了Redis是什么、它能做什么以及我们为什么要使用它之后,是时候来实际地使用一下它了。接下来将对Redis提供的数据结构进行介绍,说明这些数据结构的作用,并展示一部分操作这些数据结构的命令。
Redis数据结构简介
Redis可以存储键与5种不同数据结构类型之间的映射.
这5种数据结构类型分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)。有一部分Redis命令对于这5种结构都是通用的:比如DEL、TYPE、RENAME等等;但也有一部分Redis命令只能对特定的一种或者两种结构使用。

大部分程序员应该都不会对Redis的STRING、LIST、HASH这3种结构感到陌生,因为它们和很多编程语言内建的字符串、列表和散列等结构在实现和语义(semantics)方面都非常相似。有些编程语言还有集合数据结构,在实现和语义上类似于Redis的SET。ZSET在某种程度上是一种Redis特有的结构,但是当你熟悉了它之后,就会发现它也是一种非常有用的结构。表1-2对比了Redis提供的5种结构,说明了这些结构存储的值,并简单介绍了它们的语义。
在这里插入图片描述
redis使用SDS(simple dynamic string简单动态字符串)表示字符串的值.
在redis的数据库里面,包含字符串值的键值对在底层都是由SDS实现的.
执行命令:SET msg "hello world"
那么,Redis将在数据库中创建一个新的键值对.
键值对的键是一个字符串对象,并且其对象的底层实现是一个保存着字符串"mag"的SDS
键值对的值是一个字符串对象,并且其对象的底层实现是一个保存着字符串"hello world"的SDS
执行命令:PUSH fruits “apple” “banana” "cherry"
那么Redis将在数据库中创建一个新的键值对:
键:字符串对象,并且其对象的底层实现是一个保存着字符串"fruits"的SDS.
值:列表对象,列表对象包含了三个字符串对象,这三个字符串对象分别由三个SDS实现.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值