除了散列类型,其他数据类型不支持嵌套
一个散列类型键只能包含2^32-1字段
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,字段值存储属性值。
也就是说:同样的对象,各自却可以添加减少属性,有各自额外的特性。
例如一个NBA球员属性
NBAplayer:ID height rate
NBAplayer:ID height rate
比如上述类型球员都有着
height rate属性
那么如果有个属性chinaaddress,这个表示在NBA打球的中国球员,是其他国家球员不具备的属性
放在关系数据库中,我们得额外开启一个字段,但是很明显中国球员很少,这个字段无疑是一个浪费!
那么可不可以大部分属性一致,然后特殊对象可以拥有自己独一无二的的属性且不造成表冗余?
同理:我可以将博客文章存储在散列中,article.title article.id article.time article.content
避免了牵一发动全身,只需要修改该散列中相应的字段值便可以完成局部字段更新,不必所有内容更新
可以:
redis支持散列 hash
hset key field value
hget key field
hmset
key field value [field value...]
hget key field[field....
]
hgetall key
hexists key field
hsetnx key field value //字段不存在时候赋值
hincrby key field incrment
hdel key field[field....] 删除键一个或者多个字段/属性
hlen key 获得键的字段/属性的个数
//只获取字段名或字段值
hkeys key
hvals key
<?php
$redis = new Redis();
$redis->connect('192.168.104.10',6379);
$first = 'nba:Tmac';//NBA本土球员 麦迪
$redis->hset($first,'height','203');
$redis->hset($first,'rate','43');
print_r($redis->hgetall($first));
echo "<hr>";
$first = 'nba:Yao';//姚明
$redis->hset($first,'height','203');
$redis->hset($first,'rate','43');
$redis->hset($first,'chinaAddress','上海');
print_r($redis->hgetall($first));
?>