Hash
说起Hash大家其实很容易想到java中的集合类HashMap,这里其实就是一个套娃,键值对套了一层键值对他的指令也很简单
首先是设置键值对
这里就是设置两个键值对
我们可以进行获取
使用hget获取值
或者我们使用hgetall来查询所有值
hmset/hmget是批量查找查询,和上面的操作类似
同样的hdel是删除指令
hlen查看键值对数量
hexists 表 字段
这里是查找表中是否存在这个变量
hkeys 字段
hvals 字段 这里就是单独查询字段键和值的全部
hincrby /hincrbyfloat 自增操作,见下图
hsetnx 如果键不存在则可以设置,这里的nx就是not\ exist的意思,存在就不赋值
Set
一说到这个我们就可以想到HashSet 的特征 有序且无重复值
sadd key values
这里我们可以一次性加入多个数值
smembers key 查看set的所有元素
sismember set 数值或者字符串 1 表示存在 0表示不存在
srem key value 删除元素 可删除多个元素
'
scard key 查看set中的元素个数
srandmember 随机展示set中的一个元素 (不删除) 可以应用于猜你喜欢 可能认识的人?
spop 随机弹出一个元素(删除)
smove key1 key2 7 将后面的7从key1中加入key2
注:7一定得在key1存在
集合运算
sdiff a b 查看 两个集合的差集 只在 a 不在 b 的元素
sinter 查看交集
sintercard 集合数量 集合 1 集合 2.... 返回的是后面所有的集合取交集去重后基数的数量
Zset
在set 的基础上加上了 一个分数score 这也造成了其可排序的特性 按照分数排序
有人可能会说和set有啥区别,区别就是这里对于字符串他也可以排序
注:这里的分数在数值前面
zadd key score value
按照下标遍历数据
zrange key start end (0 -1表示全部遍历)
加上withscores就是带上分数一起遍历
zrangebyscore key 区间 可以找出分数在这个区间之内的values
zscore key member 查看元素的分数
zcard key 查看元素个数
zrem key value 根据值删除
zincrby key n member
给 member 加上 n分
zcount key range 数一下这个范围有几个数字
zrank key member
查看对应元素的下标值
Bitmap
相信大家都听过这种数据结构
bitmap常用于比如说统计签到天数,如果用一张表来表示这里占的空间就太大了
或者还可以用于统计电影是否被播放过,用户是否登录等状态
我们使用bitmap就可以实现一个二进制位标识签到或者没签到两个状态
底层数据结构还是String本质还是一种数组
下面我们来介绍基本指令操作吧
setbit key offset val
这里是堆位图的某一位进行设置,只能设置01 offset表示偏移量
这里就是对第五位设置为0或者1 返回值位设置之前的位数据
getbit key offset 获取第几位的比特数据
bitcount key start end
查看此bitmap在范围内的1的数量
bitop operation destkey key 这里的operation指的是与或非
将对应的两个bitmap进行位运算并且放在第一个第一个bitmap中
strlen key 统计占用多大的字节(注意八位为1字节)
HyperLogLog
基数统计
主要是用于统计UV的大型数据
注意这里只用于统计而并不保存可视数据
场景:统计天猫亿级UV的统计
注:UV的含义是独立访客 比如统计一下访问量 这里对应的相同IP无论访问多少次其实都只算一次访问
常用的指令也比较少 例如
pfadd key values
增加数量
pfcount key 就是统计数量
注意这里是不重复的哦
合并两个hyperloglog
pfmerge hylog3 hylog4 这里就是将两个hyperloglog合并并且赋给 hylog3
GEO
这里的GEO的其实是为了实现一个范围地理区域的查找
主要的应用是在打车上,比如查看附近的空车辆,查看附近的人?等等
有人会问,为啥不使用sql来查找呢
这里我可以给出几点缺陷
1.sql的查找主要是矩形查找而这里可以做到圆形查找
2.sql的性能问题
下面我们来学习指令
其实这里的GEO可以看做是zset的子类,所以可以使用zget查看
本质上也是key带上一个map
这里就不做过多介绍
geoadd 增加节点
比如geoadd 长城 精度 纬度
查看两个经纬度之间的距离
geodist city 天安门 长城 单位(m/km)
geohash 返回某个 key的base32编码