1、1 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发 键值数据库的基本概念 键值数据库的数据模型 Redis数据库 Redis数据类型2 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发一、键值数据库的基本概念KV:Key-Value(键值)存储模型是Nosql中最基本的数据存储模型,KV类似于哈希表,在键和值之间建立映射关系,键值模型极大的简化了关系数据模型,具有高效灵活的特点。键值数据库一致性表现在针对单个键的操作包括“获取”、“设置”、或者“删除”,保证“一致性”,也可以用“最终一致性模型”实现一致性3 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发键值数据库的
2、类型根据数据的保存方式,可分为临时性、永久性和两者兼有三类。临时性键值存储是在内存中保存数据,可进行非常快速的保存和读取处理,数据可能丢失永久性键值存储是在硬盘上保存数据;两者兼有的键值存储可以同时在内存和硬盘上保存数据,进行非常快的保存和读取处理,并且保存在硬盘上的数据不会消失,即使消失也可以恢复-Redis。4 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发二、键值数据库的数据模型1 数据结构:键值模型(Key-Value模型),每行记录由主键和值两个部分组成,值可以是各种类型的数据 2 数据操作:Get(key)、Set(key,value)、Delete(key)等3 数据完
3、整性:针对单个键的操作才区别“一致性”。5 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发三、Redis数据库Redis 是Remote Dictionary Server的缩写,开源的KV数据库。Redis是KV类型的内存数据库Redis通过Key-Value的单值不同类型来区分,支持的数据类型:字符串类型(String)、哈希表类型(Hash)、链表类型(List)、集合类型(Set)、有序集合类型(ordered set,zset)。Redis的缺点是数据库容量受到物理内存的限制。Redis可保存多种数据结构,单个值的最大限制是1GB。用List来做FIFO双向链表可实现轻量级
4、的高性 能消息队列服务,用Set可做高性能的tag系统等,对存入的KV设置expire时间,通过异步的方式将数据写入磁盘,具有快速和数据持久化的特征。6 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发三、Redis数据库-特点Redis将键值存储在主存中,快速读写。Redis支持主从复制。数据读在slave完成,数据写入在 master 完成。Redis使用RAM作为内存式存储,用虚拟内存来保存数据。Redis支持创建发布和订阅通道Redis将内存中的数据定期保存到文件系统中,用于故障恢复。Redis有丰富的SDK支持。所有 Redis 的操作都是原子7 数据库原理及应用电子科技大学
5、-张凤荔数据库系统原理与开发四、Redis的数据类型Redis的每个数据库中的所有数据都是Key-Value对,底层的都是二进制字节数组的格式存放。客户端取的时候需要自己来转换。Redis 键值是二进制安全的,用任何二进制序列作为key值。空字符串也是有效key值;key取值太长导致查找键值的计算成本高、太短可读性较差。Redis支持Value类型:字符串类型(String)、哈希表类型(Hash)、链表类型(List)、集合类型(Set)、有序集合类型(order set)8 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发1.字符串-stringredis最基本的类型,string
6、类型是二进制安全的,string可以包含任何数据。String是最常用的一种数据类型,可应用于普通的key/value 存储,具有定时持久化、操作日志及 Replication等功能。字符串操作包括set、get、decr、incr、mget等,获取字符串长度、append、设置和获取字符串的某一段内容、设置及获取字符串的某一位(bit)、批量设置一系列字符串的内容等。9 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发2.ListList列表即数组是简单的字符串列表,按照插入顺序排序,lpush、rpush、lpop、rpop、lrange等。l和 r表示左和右。用来实现twitte
7、r的关注列表、粉丝列表等、最新消息排行等功能。实现为一个双向链表,支持反向查找和遍历,使用时要考虑部分额外的内存开销,发送缓冲队列等也都是用的这个数据结构。10 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发2.List的特征链表双端:链表节点都有prev和next指针,获取一个节点前置和后置的算法复杂度都为O(1)。无环:list的第一个节点(头节点)的prev和最后一个节点(尾节点)的next都指向NULL。带表头指针和表尾指针:通过list的head和tail两个指针,链表的头和尾进行操作。带链表长度计数器:可以通过len成员来获取链表的节点的个数,复杂度O(1)。多态:链表使
8、用void*指针来保存value,并且可以通过dup,free,match来操控节点的value值,因此,该链表可以保存任意类型的值。11 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发3.Hash(哈希)表 Hash(哈希)是一个键值对集合,一个 string 类型的 field 和 value 的映射表。常用命令:hget、hset、hgetall等。实例:用户信息包含:ID为key,value包含姓名、年龄、生日、专业等信息,如果用普通的key/value结构来存储:第一种:将用户ID作为查找key,其他信息封装成一个对象以序列化的方式存储。第二种:把用户信息对象中所有成员都存
9、成单个key-value对,用用户ID+对应属性的名称作为唯一标识来标示对应属性值。12 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发3.Hash(哈希)表 Redis Hash的解决方案,内部存储的Value为一个HashMap,提供直接存取这个Map成员的接口13 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发4.集合 SetRedis中的集合是string类型一个无序的、去重的集合,元素是字符串类型。对外提供的功能是一个列表,set是自动排重的,用set存储一个列表数据且数据不重复set 的内部实现是一个 value永远为null的HashMap,通过计算hash的
10、方式来快速排重的存储(sadd)、删除(srem)、读取(smembers)、元素是否存在(sismember)、差集运算(sdiff)、交集运算(sinter)、并集运算(sunion)、获取元素数量(scard)、随机获得元素(srandmember)、存储差集(sdiffstore)、交集(sinterstore)和并集(sunionstore)等。14 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发5.有序集合Sorted set/zset有序集合的操作类似Set集合,有序的、去重的、元素是字符串类型、不允许重复的成员,每一个元素都关联着一个浮点数分值(Score),按照分值
11、从小到大的顺序排列集合中的元素。成员唯一的,但分数(score)可重复。常用命令:zadd、zrange、zrem、zcard等通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序HashMap里放的是成员到score的映射,跳跃表里存放的是所有的成员,排序依据是HashMap里存的score15 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发Redis 总结键值数据库 KV-键值数据库的数据模型:数据结构、操作、完整性Redis数据库-KV Redis数据类型-字符串类型(String)、哈希表类型(Hash)、链表类型(List)、集合类型(Set)、有序集合类型(order set)-操作函数16 数据库原理及应用电子科技大学-张凤荔数据库系统原理与开发