五十二、Redis 数据库 2:set类型、zset类型、hash类型
一、set集合类型(无序集合类型)
redis里面的set集合类型是string类型的无序集合,被称为无序集合类型。
set元素最大可以包含(2的32次方-1)个元素。
1、集合满足三个特点:
无序性:集合里面的数据是没有顺序之分。
唯一性:集合里面的数据彼此是不能重复。
确定性:集合里面的数据的个数是确定的。
2、该类型应用场合:qq好友推荐
3、sadd向集合里面添加元素: sadd 集合名 数值
4、smembers获取集合里面的元素
5、srem移除集合里面指定的某个元素,成功返回1
6、spop随机的弹出集合里面的某个元素
7、sismember 集合名 元素: 判断 元素 是否在集合中
8、scard 集合名:返回set的元素个数
9、smove p1 p2 元素:从p1对应集合中移除给定元素,并将指定的元素添加到p2中,成功返回1
二、集合的一个实际使用场景
1、一般redis里面的集合被用在社交类型的网站里面做好友关系展示。例如:实现好友的推荐,共同好友......
2、设置4个用户(一个集合)
3、设计好友的集合(另写一个集合)
① 用户id为3的用户好友集合里面有1和2:代表的含义是3号用户有两个好友。
王五的好友是:张三和李四。
Set是个集合名,格式可自己一级一级写(起名有意义,可自己定义键值名)
② 用户id为45的用户好友集合里面的数据是2:代表的含义是45号用户有一个好友。
赵六的好友是:李四。
4、求交集、并集、差集
① 获取3号和45号的共同好友(求交集) sinter
② 获取3号和45号的全部好友(求并集)sunion
③ 让3号用户给45号用户推荐好友(求差集) sdiff(以前一个为准,求前面的差集,如果前:1,2,后2,后-前 差集为空)
三、Redis 数据库 --zset类型
(1)zset(sorted set)类型(有序集合)
和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个权。
通过权值可以有序的获取集合中的元素。
redis里面的zset类型被称为有序集合,意味着有序集合里面的元素是排好序的,也满足唯一性和确定性。
1、有序集合概图:
2、zadd添加元素到集合,元素在集合中存在则更新,不存在添加
zadd key 权重 元素
下面的1 / 5 / 15 / 45就是权重:
如果元素本已存在,添加不同权重的重复元素不会生成新元素,会更新值:
3、zrange key start end:返回指定区间的元素,返回的是按权重升序
4、zrange key start end withscores 获取集合内容的时候,显示权重信息
(2)案例:利用sort set实现获取最热门的前5贴子信息。
1、添加元素:
按照帖子回复量排序:102是权重,11是元素
2、zrevrange key start end:返回指定区间的元素,返回的是按权重(也就是贴子的回复量)降序
3、zremrangebyrank key min max:删除集合中排名在给定区间的元素(权值从小到大排序)索引从0开始
4、增加一个新元素,就删除一个旧元素(回复量最低的)
zremrangebyrank key 0 0 (权值从小到大排序,索引从0开始)
5、zrank key 元素:返回指定元素在集合中的排名(下标),集合中元素是按升序的
6、zrevrank key 元素:返回指定元素在集合中的排名(下标),集合中元素是按降序的
7、zcard key:返回集合中元素个数
8、zscore key 元素:返回给定元素对应的权重
9、zincrby key 增长的值 指定元素:使指定元素的权重增加对应的值,并返回增加后的值
10、zrem key 指定元素:删除指定元素,1表示成功,元素不存在返回0
四、Redis 数据库 --hash类型
1、hset设置单个值:(重复设置相同的则更新)
2、hget获取值:
3、hmset设置多个值:
4、hgetall获取hash全部的值:
5、hset:设置散列值(带:号形式的)
6、hget:获取散列值
7、hmget:获取多对散列值
8、hmset:设置多对散列值
9、hkeys:返回所有keys
10、hvals:返回所有Values
11、hlen:返回散列包含域(field)的数量
12、hdel:删除散列指定的域(field)(删除值)
13、hexists:判断是否存在,返回1存在,返回0不存在
14、hincrby:将指定的hash filed加上给定值