大家好,欢迎来到半亩塘读书会,今天我们解读一本计算机技术的书籍,对想从事计算机的小伙伴们送上一本书《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类型中,因为评论列表会把用户名、内容和时间都列出来,所以用列表类型很是方便。