刚才存储文章的例子,需要序列化和反序列化之后在进行读写。会造成2个问题:
新增一个需求,一般文章都会有缩略名。比如文章的标题叫做"This is a great post",它的缩略名可以为"this-is-a-greate-post"。缩略名可以用于生成文章的地址栏或者其它用处。
// 散列其实就是hash hget hset
var redis = require('redis');
var client = new redis({
//一些配置
});// # 1. 文章的赋值
// # 自增的id
var $post_id = client.incr('posts:count');
var $slug = 'hello-world';
var $title = 'hello world';
var $content = 'xxxxxxxxxxxxx';
var views = 0;
// # 文章的缩略名和id互相有一个引用来维持关系 id
// # HSETNX 也是赋值 如果这个值已经存在 则返回0,并且赋值失败 反之返回1, 赋值成功
var isSlug = client.hsetnx(id ${$slug} ${$post_id}`);// # 1.通过散列去存储文章
if(isSlug === 0) {it();
} else {client.hmset(`post:${$post_id} title ${$title} content ${$content} views ${$views}`)
}// # 2. 读取文章
var postID = client.hget(id $slug');
if (!postID) {it('文章不存在')
} else {var post = client.hgetall(`post:${postID}`, (err, data) => {console.log(data)})
}// # 3.修改缩略名
// # 加入你要给id=42的文章 修改缩略名
var newSlug = 'xxx';
var isSlugExit = client.hsetnx(id ${newSlug} 42`) if(isSlugExit === 0) {exit('缩略名已存在,请换其它')
} else {var oldSlug = client = client.hget(`post:42 slug`);client.hset(`post:42 slug ${newSlug}`);client.hdel(id ${$oldSlug}`);
}
HKEYS key
HVALS key
HLEN key
hash_demo.js
var data = {a: 1,b: 2
}// a做了一个操作 data.a = 10;
// b 也做了一个操作 data.b = 20;// "{a: 1, b: 2}"// a "{a: 10, b: 2}"
// b "{a: 1, b: 20}"var redis = require('redis');
var client = new redis({// option
});var $post_id = client.incr('post:count');var $slug = 'hello-world';
var $title = 'hello world';
var content = 'xxxxxxxxxxxxxx';
var $views = 0;// 存储逻辑
// 生成文章之前,校验缩略名是否可用 hsetnx, 属性存在则修改失败,反之成功
// 用关系性数据库 会额外建一张表来存储 文章的ID 和 缩略名直接的映射关系 。 散列 类型 叫做 ld 专门存储 文章的ID 和 缩略名
var isSlug = client.hsetnx(id ${$slug} $post_id`); // 缩略名和id就能一一对应if (isSlug === 0) {it('缩略名已存在');
} else { // 散列存储逻辑client.hmset(`post:${$post_id} title ${$title} content ${$content} views ${$views}`);
}// 读取
// 1. 获取idvar postID = client.hget(id ${$slug}`);if (!postID) {it('文章不存在')
} else {var post = client.hgetall(`post:${$post_id}`, (err, data) => { //node会封装console.log(data);});
}// 修改缩略名var newSlug = 'xxxxx';
var isSlugExit = client.hsetnx(id ${newSlug} 42`);if(!isSlugExit) {it('缩略名已经存在');
} else {var olgSlug = client.hget(`post:42 slug`); // 先获取旧的client.hset(`post:42 slug ${newSlug}`); // 赋值新的client.hdel(id ${olgSlug}`);}
本文发布于:2024-01-27 17:33:25,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063480041673.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |