第二章redis数据类型的使用和介绍
redis数据类型的使用
list 列表
最多可以存2的32次方减1 个
元素组成列表
用来存储多个有序的字符串。
在redis中,可以对列表俩端插入(push)和(pop)弹出,还可以获得制定范围的元素列表,获取指定索引下表的元素等
元素可以重复
命令操作
操作类型 操作
添加 : rpush lpush linsert
查 : lrange lindex llen
删除 : lpop rpop lrem ltrim
修改 : lset
阻塞操作 : blpop br pop
string字符串
1.缓存功能
2.计数
3.共享session(会话)
4.限速
hash哈希
还叫字典或关联数组
哈希类型是指键值本身就是一种键值对结构
key value
value={field,value}
字符串键值对
key value
name tom
哈希类型
user: 1 : name tom
哈希模式命令格式
1.hset key field(区域) value
2.hget key value
3.hdel key field 删除(可以删除多个)
4.hlen key 计算field的个数
5.批量设置或获取field-value
hmset key field value value .....
hmget key filed value
6.hkeys key 获取所有的键
7.hgetall key 获取所有field
8.hincrby key field 自增
hincrbyfloat key field
9.hstrlen key value
内部编码
ziplist(压缩列表)
当以下两种情况使用ziplist
1.当哈希类型元素个数小于hash-max-ziplist-entries (512个)
2.所有值都小于hash-max-ziplist-value(64字节)
hashtable(哈希表)
关系型数据库与哈希类型不同
1.哈希类型是稀疏的
完全结构化
2.关系型数据库可以做复杂的查询(子查询左查询右查询)
列表list
有序 由元素组成 2的32次方减一
1.列表中元素有序插入新元素后其他元素下标顺延
2.列表中的元素可以重复
命令
添加 rpush lpush linsert
查看 lrange lindex llen (0到-1就是查看全部)
删除 lpop rpop lrem ltrim
修改 lset
阻塞操作 blpop brpop
查看
获取指定范围内的元素列表
lrange key start stop
获取列表指定索引下标的元素
lindex key index
llen
删除
lpop key 左侧删除
rpop key 右侧删除
删除指定的元素
lrem key count value
count > 0 代表从左往右删除最多删除count的个数
count < 0 代表从右往左删除
count=0 代表删除所有
按照索引范围修剪列表
ltrim key start end
修改
修改指定索引下标的元素
lset key index newvalue
阻塞操作
blpop key key ... timeout
brpop key key .... timeout
linkedlist (链表)
lpush+lpop=stack(栈)
lpush+rpop=queue(列队)
lpush+ltrim=capped callection(有限集合)
lpush+brpop=message queue (消息列队)
集合set
集合内部命令
添加元素
sadd key element .....
删除元素
srem key element ....
计算元素个数
scard key
判断元素是否在集合中
sismember key element
随机从集合返回指定个数的元素
srandmember key count
从集合随机弹出元素
spop key
获取所有元素
smember key
集合间的命令
交集
sinter key ...
sinterstore user:a_b:sinter user:a user:b
并集
sunion key ...
sunionstore
差集
sdiff key ....
差集之间,有相对于的概念
内部编码
intset(整数集合):当集合的元素都是整数并且元素的个数小于set-max-intest-entries(512个)
超过 512 默认更改为hashtable
hashtable(哈希表):当集合类型无法满足intset的条件时,redis
会使用hashtable
使用场景
标签tag
有序集合 (zset)
有序集合相对于哈希,列表/集合有一点的陌生,它有序
不能重复
数据结构 能否重复 是否有序 有序的实现方式
列表 1 1 下表索引
集合 0 0 没有
有序集合 0 1 分值
zadd 创建有序集合,添加成员以及分数
zcard key' 查看成员个数
zscore key member (member :成员的名字)
计算成员的排名
zrank key member 从低到高
zrevrank key member 从高到低
zrem key member 删除成员
zrincrby key 增加的分数 成员名字
返回指定排名范围的成员 :
zrange key start end (索引下角标 ) withscores 从低到高的排名
zrevrange key start end (索引下角标 ) withscores 从高到底
zrangebyscore key min max 返回指定分数范围的成员 withscores : 分数,可加选项
zrevrangebyscore key max min 删除指定的排名内的升序元素
zremrangebyrank key start end
zcount key min max 返回指定分数范围的成员
zremrangebyrank key min max 删除 指定排名的成员
zremrangebyscore key min max withscores 删除指定分数范围的成员
zremrangebyscore l (4 +inf //删除 不包括4分 ,以及4分以上的所有人
inf :无穷大或者无穷小
( : 不包含
zinterstore 交集的名字 个数 有序集合1 有序集合2
zunionstore 交集的名字 个数 有序集合1 有序集合2
有序集合内部编码
ziplist(压缩表)
skiplist(跳跃列表)
zremrangebyscore key min max
有序集合交集
zinterstore destination numkeys key
交集 名字 数字
[weight] [aggregate sum | min max ]
destination
numkeys
numkeys destination numkeys key withscores
[weight] [aggregate sum | min max ]
withscores :显示出分数
内部编码 :
Ziplist 压缩里列 ,当有序集合的元素个数小于 zset-max-ziplist-entries (128个)
同时每个元素的值都小于 zset-max-ziplist-value (64字节)
Skiplist :跳跃表
使用场景
排行榜系统
按照时间 ,播放量
添加用户的点赞数
zadd user:ranking:2018_01_08
21 zhangyi
Zrem rankingL:2018_01_08 zhangyi
zrevrangebyrank user user: ranking :2018_01_08 0 9
Hgetall user:info