Redis入门指南第1集Redis的

北京皮肤病医院那家好 http://pf.39.net/bdfyy/bdfal/150702/4648924.html

大家好,欢迎来到半亩塘读书会,今天我们解读一本计算机技术的书籍,对想从事计算机的小伙伴们送上一本书《Redis入门指南》。

我们知道数据是需要存到数据库中的,数据库分两种,一种是关系数据库,一种是非关系数据库。

作为PHP开发来说,关系数据库最长用到的是mysql,非关系数据库经常打交道的是redis。

持久化存储

跟关系数据库不同,redis的数据是存储在内存中,这也让读取数据的性能更好。那小伙伴要问了,一断电,内存中的数据都丢了咋整?

放心,redis也提供持久化存储,经过一些配置可以把数据存储在硬盘中,这样就不怕断电了。

持久化存储分两种,一种是RDB存储,一种是AOF存储。

RBD存储需要制定条件,需要修改配置文件的参数。比如save,意思是在秒内至少有1个键被改动,则执行一次持续化存储,存储时把所有文件都存储一遍。

存储的过程是这样的,先复制一下父进程形成一个子进程,子进程进行快照,生成rbd文件,等子进程把内存中的数据都写入硬盘了,才会替换旧的rbd文件。所以,任何时候rdb文件都是完整的。

除了自动快照,还可以手动发送SAVE或者BGSAVE命令执行快照。

AOF存储与RBD的触发条件不同,只要redis中有内容更改,则立马进行持久化存储。

AOF存储默认是关闭的,怎样启用AOF存储呢?

调整配置文件为appendonlyyes,就行了。会生成一个***.aof文件。

上面说完了持久化存储,下面我们开始讲redis的5个数据类型:

字符型、散列型、列表型、集合型、有序集合型。

我们拿一个例子来说事儿。话说小明是一名程序员,用WordPress搭建了一个博客,看到页面底部的poweredbywordpress小明就很不爽。

想起最近学习了redis数据库,所以尝试用redis来搭建这个博客。

首先第一个功能,发布文章,文章的发布有两部分内容,一个是标题,一个是内容。

这个功能可以用redis的字符型数据类型来实现。

字符类型

字符型智能存储字符串,所以把标题和内容合并为字符串,

data=json_encode(array(title,content));

Setpost:4:datadata;

等读取的时候再反序列化:

data=getpost:4:data;

data=json_deconde(data);

除了写入和获取数据外,字符型还有删除等操作

Delpost:4:data

除了存储文章内容,小明还想实现访问量的功能:这个很好实现:

Incrpost:4:pageview;

Decrpost:4:pageview

……

那如果小明想修改内容,每次都需要反序列数据,然后再进行序列化后存储,很是麻烦,那有没有更好的办法呢?

有的,是散列数据类型。

散列类型

所谓散列,就是我们常说的数组。有字段有数值。

Hsetkeyfieldvalue

HMsetkeyfieldvalue[,fieldvalue]

比如保存文章数据,可以如下:

Hsetpost:42title‘《redis入门通》’;

Hsetpost:42author“李子骅”;

Hsetpost:42content“今天是第一课”;

如果想更改文章的content呢,只需要更改一个字段就可以了:

Hsetpost:42content“今天是第二课”;

散列类型也支持自增功能:

#每次增长2

HincrBypost:42:pageView2;

#获取key的所有字段和值

HGetAllpost:42:data

#一次获取key的多个字段的值

HMGetpost:42:datatitle,content,author

HMSETpost:42:datatitle“《redis入门指南》”,author“李子骅”,content“这是我写的第一本书”;

还有更多命令,书友可以自己查阅原著。

文章的数据算是保存到redis里面了,下面小明想把文章列表显示出来,这时候需要知道文章都有哪些id,因为中间有的文章id被删除了,小明就需要去判断文章是否存在。

如果用keys命令查看都要哪些文章呢?

redis会遍历所有的键,性能消耗很大,那有没有更好的方法呢?

列表类型

我们可以把文章id存入到列表类型字段里面。这样在删除文章的时候,我们可以方便的把文章id列表取出来,我们也可以删除列表中的文章id。

#把文章id存入列表中

Lpushpost:listpostid;

#只保留post:list键中1到2区间内的元素,其它的删除

Ltrimpost:list12;

#把post:list键中第1个元素的值设置成54

Lsetpost:list;

#把post:list键中从1到6的元素取出来。

Lrangepost:list16;

#获取post:list键中第1个元素的值

Lindexpost:list1;

还有更多命令,比如Rpush,Rpop等等,大家有兴趣可以查看原著进行学习。

用列表还可以实现评论的呈现。

当用户评论的时候,我们把用户名、评论内容和评论时间存入List类型中,因为评论列表会把用户名、内容和时间都列出来,所以用列表类型很是方便。




转载请注明:http://www.aierlanlan.com/cyrz/3129.html