(7.3.1)--7.3键值数据库Redis.pdf
-
资源ID:57971235
资源大小:1.63MB
全文页数:52页
- 资源格式: PDF
下载积分:10金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(7.3.1)--7.3键值数据库Redis.pdf
键值数据库DB-Engines Ranking数据来源:https:/db- 缓存主要用来存放那些读写比很高、很少变化的数据。如,商品类目信息、热门词的搜索列表信息、热门商品信息等。应用程序读取数据时,先到缓存中读取,如果读取不到或数据已失效,再访问数据库,并将数据写入缓存。键值数据库(Key Value Database)键值数据库是一类轻量级结合内存处理为主的NoSQL数据库,也是数据存储结构最简单的一类NoSQL数据库。轻量级指的是它的存储数据结构特别简单,数据库系统本身规模也比较小;以内存为主的运行处理,其设计目的是为了更快地实现对大数据的处理。键(Key)值(Value)中国:哈尔滨:太平Binary:太平国际机场中国:北京:首都Binary:首都国际机场中国:上海:虹桥Binary:虹桥国际机场中国:上海:浦东Binary:浦东国际机场键值存储实现 键(Key)键起唯一索引值的作用,确保一个键值结构里数据记录的唯一性,也起信息记录的作用。键值对(Key-Value Pair)键和值的组合就形成了键值对,它们之间的关系是一对一映射的关系。如“中国:上海:浦东”只能指向“浦东国际机场”这个值,而不能指向“虹桥机场”。命名空间(Namespace)命名空间是由键值对所构成的集合。通常由一类键值对数据构成一个集合。键(Key)值(Value)中国:哈尔滨:太平Binary:太平国际机场中国:北京:首都Binary:首都国际机场中国:上海:虹桥Binary:虹桥国际机场中国:上海:浦东Binary:浦东国际机场命名空间(机场)键值存储的优点 简单,快速,高效计算,分布式处理 键值存储的缺点 对值进行多值查找功能很弱 缺少约束,意味着更容易出错 不容易建立复杂关系键值存储特点键(Key)值(Value)中国:哈尔滨:太平Binary:太平国际机场中国:北京:首都Binary:首都国际机场中国:上海:虹桥Binary:虹桥国际机场中国:上海:浦东Binary:%&*键值数据库Redis Remote Dictionary Server(Redis,远程字典服务器)是一个由SalvatoreSanfilippo(一个意大利人)写的key-value存储系统。Redis官网https:/redis.io/https:/ X、Windows四大系列。Redis的特点 Redis通常被称为数据结构服务器,它支持的数据结构包括字符串(String)、列表(List)、散列表(Hash)、集合(Set)、带范围查询的有序集合(Sorted set)等。Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis支持master-slave模式的数据备份。Redis的所有操作都是原子性的。Redis主要适用于少量数据存储、高速读写访问的场景。Redis的持久化方式 RDB持久化 可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。RDB 非常适用于灾难恢复(disaster recovery),在恢复大数据集时的速度比 AOF 的恢复速度要快。如果需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合。AOF(append only file)持久化 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。使用 AOF 持久化可以带来更高的数据安全性,即数据持久性。对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。Redis支持的主要数据类型类型简介特性应用场景String(字符串)二进制安全可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512MHash(字典)键值对集合,即编程语言中的Map类型适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)存储、读取、修改用户属性List(列表)链表(双向链表)增删快,提供了操作某一段元素的API最新消息排行等功能(比如朋友圈的时间线);消息队列Set(集合)哈希表实现,元素不重复且无序添加、删除,查找的复杂度都是O(1);为集合提供了求交集、并集、差集等操作共同好友;利用唯一性,统计访问网站的所有独立ip;好友推荐时,根据tag求交集,大于某个阈值就可以推荐Sorted Set(有序集合)将Set中的元素增加一个权重参数score,元素按score有序排列数据插入集合时,已经进行天然排序排行榜;带权重的消息队列14类命令1、字符串Strings2、列表Lists3、集合Sets4、散列表Hashes5、有序集合Sorted Sets6、发布订阅Pub/Sub7、连接Connection8、Server9、脚本Scripting10、键Keys11、HyperLogLog12、地理空间Geo13、事务Transactions14、集群ClusterRedis命令 14类200余种命令键命令 Redis 键(Key)命令用于管理 Redis 的键。序号命令名称命令功能描述1DEL用于在key存在时删除key。2DUMP序列化给定key,并返回被序列化的值。3EXISTS检查给定key是否存在。4EXPIRE为给定key设置过期时间,以秒计。5EXPIREATEXPIREAT的作用和EXPIRE类似,都用于为key设置过期时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(unix timestamp)。6KEYS查找所有符合给定模式(pattern)的 key。7MIGRATE将key原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功,key 保证会出现在目标实例上,而当前实例上的 key 会被删除。8MOVE将当前数据库的key移动到给定的数据库db当中。9OBJECT允许从内部察看给定key的Redis对象。10PERSIST移除key的过期时间,key将持久保持。键命令序号命令名称命令功能描述11PEXPIRE设置 key 的过期时间以毫秒计。12PEXPIREAT设置 key 过期时间的时间戳(unix timestamp)以毫秒计13PTTL以毫秒为单位返回 key 的剩余的过期时间。14RANDOMKEY从当前数据库中随机返回一个 key。15RENAME修改 key 的名称16RENAMENX仅当 newkey 不存在时,将 key 改名为 newkey。17RESTORE反序列化给定的序列化值,并将它和给定的 key 关联。18SORT返回或保存给定列表、集合、有序集合 key 中经过排序的元素。19TTL以秒为单位,返回给定 key 的剩余生存时间(TTL,time to live)。20TYPE返回 key 所储存的值的类型。21SCAN迭代数据库中的数据库键。键命令示例 语法DEL key key.参数说明 key 指定需要删除的字符串键,允许一次删除多个。命令功能 删除指定键的值(任意类型)。返回值 被删除字符串的个数。序号命令名称命令功能描述1Set为指定的一个键设置对应的值(任意类型);若已经存在值,则直接覆盖原来的值。2SetNX在指定的 key 不存在时,为 key 设置指定的值。3SetEX为指定的 key 设置值及其过期时间。如果 key 已经存在,SETEX 命令将会替换旧的值。4PSetEX以毫秒为单位设置 key 的生存时间。5MSet对多个键设置对应的值(任意类型);若已经存在值,则直接覆盖原来的值。该命令是原子操作,操作过程是排它锁隔离的。6MSetNX对多个键设置对应的值(任意类型);该命令不允许指定的任何一个键已经在内存中建立,如果有一个键已经建立,则该命令执行失败。它是原子操作,所执行的命令内容要么都成功,要么都不执行。它适合用于通过设置不同的键来表示一个唯一的对象的不同字段。7Get得到指定一个键的字符串值;如果键不存在,则返回nil值;如果值不是字符串,就返回错误信息,因为该命令只能处理String类型的值。8MGet得到所有指定键的字符串值,与Get的区别是可以同时指定多个键,并可以同时获取多个字符串的值。9StrLen获取指定键的值为字符串的长度。如果值为非字符串,返回错误信息。字符串命令 基本字符串操作命令(设置、获取、删除、取长度)字符串命令示例 语法Set key value EX seconds PX milliseconds NX|XX 参数说明 key value 必选项,填写字符串键和值,键和值中间空一格;EX seconds 设置指定的到期时间,以秒为单位;PX milliseconds 设置指定的到期时间,以毫秒为单位;NX 如果指定的键不存在,仅建立键名;XX 只有指定的键存在时,才能设置对应的值。命令功能 为指定的一个键设置对应的值(任意类型);若已经存在值,则直接覆盖原来的值。返回值 命令执行正常,返回OK;如果命令加了NX或XX参数,但是命令未执行成功,则返回Nil。序号命令名称命令功能描述14Decr对整数做原子减1操作15DecrBy对整数做原子减指定数操作16Incr对整数做原子加1操作17IncrBy对整数做原子加指定数操作18IncrByFloat对浮点数做原子加指定数操作字符串命令 修改数字值操作命令字符串命令示例 语法DecrBy key decrement 参数说明 Key为指定需要做减数操作的字符串的键,decrement为需要减少的整数量。命令功能 将 key 所储存的值减去指定的减量值。返回值 减去指定减量值之后,key的值。如果key不存在,那么key的值会先被初始化为0,然后再执行DecrBy操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。位图命令 Redis的位图就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。位图并不是一种特殊的数据结构,其实本质上是二进制字符串,也可以看做是byte数组。位图命令的优势 基于最小的单位bit进行存储,可以大幅减少存储量;在特定应用场景做数据处理的时候,速度相对较快;方便扩容。一般可以在如下场景使用:用户签到,用户在线状态,统计活跃用户,各种状态值序号命令名称命令功能描述1SetBit设置或者清空指定位置的Bit值2GetBit获取指定位置的Bit值3BitCount统计字符串指定起止位置的值为“1”比特(bit)的位数4Bitop对一个或多个二进制位的字符串进行比特位运算操作5BitPos获取字符串里第一个被设置为1Bit或0Bit的位置6BitField对指定字符串数据进行位数组寻址、位值自增自减等操作位图命令位图命令示例 语法SETBIT key offset value 命令功能 对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。位的设置或清除取决于 value 参数,可以是 0 也可以是 1。当 key 不存在时,自动生成一个新的字符串值。字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。0 praiseCnt:100/点赞数-hostCnt:200/热度-followCnt:332/关注数-fansCnt:123/粉丝数/帖子 counter:topic:topicID-praiseCnt:100/点赞数-commentCnt:322/评论数/话题 counter:subject:subjectID-favoCnt:312/收藏数-viewCnt:321/阅读数-searchCnt:212/搜索进入次数-topicCnt:312/话题中帖子数/获取指定userID的所有计数器HGETALL counter:user:userID/获取指定userID的指定计数器HMGET counter:user:userID praiseCnt hostCnt/指定userID点赞数+1HINCRBY counter:user:userID praiseCnt列表命令 Redis列表(List)是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。Redis list的应用场景非常多,也是Redis最重要的数据结构之一。微博的关注列表、粉丝列表等都可以用list结构来实现;可以实现最新消息排行等功能;列表命令序号命令名称命令功能描述1LPUSH将一个或多个值插入到列表头部2LPUSHX将一个值插入到已存在的列表头部3RPUSH在列表中添加一个或多个值4RPUSHX为已存在的列表添加值5LPOP移出并获取列表的第一个元素6RPOP移除并获取列表最后一个元素7RPOPLPUSH移除列表的最后一个元素,并将该元素添加到另一个列表并返回8LREM移除列表元素9LLEN获取列表长度列表命令序号命令名称命令功能描述10LINDEX通过索引获取列表中的元素11LINSERT在列表的元素前或者后插入元素12LSET通过索引设置列表元素的值13LRANGE获取列表指定范围内的元素14LTRIM对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。15BLPOP移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。16BRPOP移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。17BRPOPLPUSH从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。列表命令示例 语法LPUSH key value1 value2 valueN 命令功能 将一个或多个值插入到列表头部。如果 key 不存在,一个空列表会被创建并执行LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。返回值 执行 LPUSH 命令后,列表的长度。列表命令示例 语法LTRIM KEY_NAME START STOP 命令功能 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以-1 表示列表的最后一个元素,-2 表示列表的倒数第二个元素,以此类推。返回值 命令执行成功时,返回 ok。键值数据库Redis应用场景示例显示最新的项目列表 假设数据库中的每条评论都有一个唯一的递增的ID字段,每次新评论发表时,会将它的ID添加到一个Redis列表:LPUSH ments 将列表裁剪为指定长度,因此Redis只需要保存最新的5000条评论:LTRIM ments 0 4999 每次需要获取最新评论的项目范围时,调用一个函数来完成(伪代码):FUNCTION get_latest_comments(start,num_items)id_list=redis.lrange(“ments”,start,start+num_items 1)IF id_list.length num_itemsid_list=SQL_DB(“SELECT ORDER BY time LIMIT”)ENDRETURN id_listEND集合命令 Redis的集合(Set)是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Set对外提供的功能与List类似,是一个列表的功能,特殊之处在于Set是可以自动排重的。当需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择。利用Set数据结构,可以存储一些集合性的数据。在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作。可以实现如共同关注、共同喜好、二度好友等功能。可以使用不同的命令选择将结果返回给客户端,或是存到一个新的集合中。集合命令序号命令名称命令功能描述1SADD向集合添加一个或多个成员2SMEMBERS返回集合中的所有成员3SINTER返回给定所有集合的交集4SDIFF返回给定所有集合的差集5SUNION返回所有给定集合的并集6SINTERSTORE 返回给定所有集合的交集并存储在 destination 中7SDIFFSTORE返回给定所有集合的差集并存储在 destination 中8SUNIONSTORE 所有给定集合的并集存储在 destination 集合中集合命令序号命令名称命令功能描述9SCARD获取集合的成员数10SISMEMBER判断 member 元素是否是集合 key 的成员11SMOVE将 member 元素从 source 集合移动到 destination 集合12SPOP移除并返回集合中的一个随机元素13SRANDMEMBER 返回集合中一个或多个随机数14SREM移除集合中一个或多个成员15SSCAN迭代集合中的元素集合命令示例 语法SADD KEY value1.valueN 命令功能 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如key不存在,则创建一个只包含member元素作成员的集合。当 key 不是集合类型时,返回一个错误。返回值 被添加到集合中的新元素的数量,不包括被忽略的元素。集合命令示例 语法SMEMBERS KEY 命令功能 返回集合 key 中的所有成员。不存在的 key 被视为空集合。返回值 集合中的所有成员。有序集合命令 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,通过分数(score)来为集合中的成员进行从小到大的排序。当需要一个有序的并且不重复的集合列表,就可以选择sorted set数据结构。还可以用Sorted Sets来做带权重的队列。比如,普通消息的score为1,重要消息的score为2,然后按score的倒序来获取工作任务,让重要的任务优先执行。有序集合命令序号命令名称命令功能描述1ZADD向有序集合添加一个或多个成员,或者更新已存在成员的分数2ZCARD获取有序集合的成员数3ZCOUNT计算在有序集合中指定区间分数的成员数4ZINCRBY有序集合中对指定成员的分数加上增量 increment5ZINTERSTORE计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中6ZLEXCOUNT在有序集合中计算指定字典区间内成员数量7ZRANGE通过索引区间返回有序集合成指定区间内的成员8ZRANGEBYLEX通过字典区间返回有序集合的成员9ZRANGEBYSCORE 通过分数返回有序集合指定区间内的成员10ZRANK返回有序集合中指定成员的索引有序集合命令序号命令名称命令功能描述11ZREM移除有序集合中的一个或多个成员12ZREMRANGEBYLEX移除有序集合中给定的字典区间的所有成员13ZREMRANGEBYRANK移除有序集合中给定的排名区间的所有成员14ZREMRANGEBYSCORE移除有序集合中给定的分数区间的所有成员15ZREVRANGE返回有序集中指定区间内的成员,通过索引,分数从高到底16ZREVRANGEBYSCORE返回有序集中指定分数区间内的成员,分数从高到低排序17ZREVRANK返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序18ZSCORE返回有序集中,成员的分数值19ZUNIONSTORE计算给定的一个或多个有序集的并集,并存储在新的 key 中20ZSCAN迭代有序集合中的元素(包括元素成员和元素分值)键值数据库Redis应用场景示例排行榜 各种数据库的数据并非存储在内存中,因此在按得分排序以及实时更新这些几乎每秒钟都需要更新的功能上,数据库的性能不够理想。在线游戏的排行榜中每次获得新得分时进行更新ZADD leaderboard 列出前100名高分选手ZREVRANGE leaderboard 0 99 列出某用户当前在全部用户中的排名 ZRANK leaderboard发布订阅命令 Redis的发布订阅(pub/sub)是一种消息通信模式。发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。可以设定对某一个key值进行消息发布及消息订阅。当一个 key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最典型的应用是实时消息系统。即时聊天,群聊等。发布订阅命令序号命令名称命令功能描述1PSUBSCRIBE订阅一个或多个符合给定模式的频道。2PUBLISH将信息发送到指定的频道。3PUBSUB查看订阅与发布系统状态。4PUNSUBSCRIBE退订所有给定模式的频道。5SUBSCRIBE订阅给定的一个或多个频道的信息。6UNSUBSCRIBE指退订给定的频道。发布订阅命令