本章重点
Redis与其他软件的相同之处与不同之处。
Redis用法。
使用Python示例代码与Redis进行简单的互动。
使用Redis解决实际问题
1.Redis简介
Redis数据存储结构:K-V数据库(形如map),value共有5种数据类型分别为string,list,set,hash(形如map),zset(有序的set)。
Redis的基本信息及特点:NoSQL数据库,非关系型,无表,不强制关联,内存数据库,能持久化到硬盘,有两种持久化方式,支持主从复制。与关系型数据库比,快,可以用来缓存中间状态的数据,与其他内存数据库相比更灵活。
2.Redis数据结构简介
讲解value的5种数据结构,以及一些基础命令。其中List,set,hash,zset这些集合类型的数据结构中
只支持字符串或者数值类型。
String,字符串:
Set:set key value ,成功返回OK;
Get:返回value;
Del:返回数量。
List,列表,链表结构:
Rpush:返回总数量,开头l代表左,r代表右;
Lrange:lrange key x y(x开始坐标,y结束坐标,0,0表示第一个,0,-1表示全部);
Lindex:返回值;
Lpop:弹出,返回值,开头l代表左,r代表右;
Set,集合,集合中value唯一:
Sadd:返回添加的数量;
Smembers:返回所有;
Sismember:检查是否存在,返回0或1;
Srem:移除,返回数量;
Hash,散列,应该对应的是一个HashMap:
Hset:返回添加数量(key的数量)
Hget:返回值,第一行是key,第二行是value
Hgetall:返回所有值
Hdel:删除值,一个key
Zset,有序集合,相对于set,集合内每一项增加一个浮点类型score字段。
Zadd:zadd key score member 返回添加数量;
Zrange:与lange类似,加withscores,显示score;
Zrangebyscore:使用score当坐标,第二个坐标不能为-1
Zrem:根据member删除值,返回个数
String与Hash两种结构多数命令相似,区别Hash增加前缀H;Set与Zset两种结构命令相似,区别是Set前缀为S,Zset前缀是Z;List自成一体。
3.Redis的一个应用实例
使用redis实现一个文章投票系统。
对文章进行投票
基本需求:用户可以为文章投票,文章根据投票和时间计算分数,系统根据分数对文章进行排序展示。
数据结构定义:
使用Hash存储文章,用户的基本信息,一个hash对应一个文章(用户),其中“标识+连接符+ID”字符串充当redis中的key,举例文章的一个key:“article:9527”,这样多个key组成文章集合;
使用set存为文章投票的用户,一个文章一个set;
使用zset存文章发布时间、文章所得分数,分别使用score存时间和分数,分数初始值为文章创建时间;
投票操作:更新文章对应的投票用户set,插入成功,更新文章hash中的投票分数字段,分数zset中指定文章的分数自增。
发布并获取文章
数据结构延用上文的设计。发布操作生成新文章的ID,初始化对应的Hash和投票用户set,发布时间和分数zset增加新文章信息。使用分数zset批量获取命令获取文章ID,再用存文章的hash获取文章信息。
对文字进行分组
增加文章组set,一个组对应一个set,获取组内文章,使用zinterstore,操作组set和分数zset,可以为组内的文章根据分数排序。
总结
本章介绍了一下redis的基本特性,与其他数据库的简单比较,最后用一个实例说明了一下redis的应用,与传承关系型数据库有比较大的差别,使用相同规则的key存储一类事物是redis存储复杂数据结构的有效手段,这个规则就类似与关系型数据库的表名。