图3-5使用散列类型存储汽车对象结构图
键 | 字段 | 字段值 |
---|---|---|
car:2 | color | 白色 |
car:2 | name | 奥迪 |
car:2 | price | 90万 |
赋值与取值
hset key field value
单个字段赋值
hget key field
单个字段取值
hmset key field value [field value ...]
多个字段赋值
hmget key field [field ...]
多个字段取值
hgetall key
获取所有字段和字段值
127.0.0.1:6379> hset car price 500
1
127.0.0.1:6379> hset car name BMW
1
127.0.0.1:6379> hget car name
BMW
127.0.0.1:6379> hget car price
500
127.0.0.1:6379> hmset car name BMW price 500
OK
127.0.0.1:6379> hmget car name price
BMW
500
127.0.0.1:6379> hgetall car
name
BMW
price
500
判断字段是否存在
hexists key field
127.0.0.1:6379> hexists car name
1
当字段不存在时赋值
hsetnx key field value
127.0.0.1:6379> hsetnx car color red 1 127.0.0.1:6379> hget car color red 127.0.0.1:6379> hsetnx car color white 0 127.0.0.1:6379> hget car color red
增加数字
hincrby key field increment
127.0.0.1:6379> hget person score
60
删除字段
hdel key field [field...]
127.0.0.1:6379> hmset car name BWM color red
OK
127.0.0.1:6379> hgetall car
name
BWM
color
red
127.0.0.1:6379> hdel car color
1
127.0.0.1:6379> hgetall car
name
BWM
存储文章数据
3.2.3节介绍了将文章对象序列化后使用一个字符串类型键储存,可是这种方法
无法提供对单个字段的原子读写操作,从而产生竞态条件,如两个客户端同时获
得并反序列化某个文章的数据,然后分别修改不同的属性后存入,显然后存入的
数据会覆盖之前的数据,最后只会有一个属性被修改.并且即使只需要修改文章
标题,程序也不得不将文章内容在内所有文章数据取出并反序列化,比较消耗资源
使用多个字符串类型来存储一篇文章数据:
图3-6使用多个字符串类型存储一个对象
键 | 键值 |
---|---|
post:42:title | 第一篇日志 |
post:42:author | 小白 |
post:42:time | 2012年9月21日 |
post:42:content | 今天是星期五... |
使用一个散列类型键存储一个对象:
图3-7使用散列类型键存储一个对象
键 | 字段 | 字段值 |
---|---|---|
post:42 --> | title --> | 第一篇日志 |
post:42 --> | author --> | 小白 |
post:42 --> | time --> | 2012年9月21日 |
post:42 --> | content --> | 今天是星期五... |
存储文章缩写名
我们可以使用一个散列类型的键slug.to.id
来存储文章缩写名和ID之间的映射关系
这样我们就可以使用hexists来判断缩写名是否存在,使用hget命令来获取缩写名对应的文章的ID.
现在发布文章可以修改成如下伪代码:
$postID = incr posts:count
判断用户输入的slug(文章缩写名)是否可用,如果可用则记录
$isSlugAvailable = hsetnx slug.to.id,$slug,$postID
if $isSlugAvailable is 0
# slug已经用过了,需要提示用户更换slug
# 这里为了演示方便直接退出
exit
hmset post:$postID,title,$title,content,$content,slug,$lug,...
用户访问时获取文章ID伪代码:
$postID = hget slug.to.id,$slug
if not $postID
print 文章不存在
exit
$post = hgetall post:$postID
print 文章标题:$post.title
如果修改文章的缩略名一定要修改slug.to.id
键对应的字段,伪代码:
# 判断新的slug是否可用
$isSlugAvailable = hsetnx slug.同.id,$newSlug,42
if $isSlugAvailable is 0
exit
# 获得旧的缩略名
$oldSlug = hget post:42,slug
# 设置新的缩略名
hset post: 42 ,slug,$newSlug
# 删除旧的缩略名
hdel slug.to.id,$oldSlug
只获取字段名或字段值
hkeys key
: 获取键中所有字段
hvals key
: 获取键中所有字段值
127.0.0.1:6379> hmset car color red name BWM
OK
127.0.0.1:6379> hkeys car
color
name
127.0.0.1:6379> hvals car
red
BWM
获取字段数量 : hlen key
127.0.0.1:6379> hlen car
2
原文:https://www.cnblogs.com/wangbaby/p/10206896.html