Redis的数据类型
Posted 小康也想变大佬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis的数据类型相关的知识,希望对你有一定的参考价值。
五大数据类型
String(字符串)
String数据类型就是常规的get/set操作
value除了是 String 也可以是数字
reids String 的操作命令:
命令 | 描述 |
---|---|
set key value | 设置值,如果key存在就覆盖value的值 |
get key | 得到值 |
mget key1 [key2…] | 获取所有(一个或多个)给定 key 的值。 |
mset [key value …] | 同时设置一个或多个 key-value 对。 |
key* | 得到所有的key |
exists key | 判断这个key是否存在 |
addend key value | 追加字符串,如果当前key不存在,就相当于set key |
strlen key | 获取字符串的长度 |
incr key | 自增1 |
decr key | 自减1 |
incrby key increment | 指定增量 |
decrby key increment | 指定减量 |
gettrange key start end | 截取字符串 。如果是 0,-1就是获取全部的字符串 |
setrange key offset value | 替换指定位置开始的字符串 |
setex key seconds value | 设置过期时间 |
setnx key value | 只有在 key 不存在时设置 key 的值 |
msetnx [key value …] | 是原子性操作,同时设置一个或多个 key-value 只要命令中有一个key已经存在,那么操作就不会被执行 |
getset key value | 先get然后在set,将给定 key 的值设为 value ,并返回 key 的旧值 |
Set(集合)
Set中的值是不能重复的
Set使用场景:共同关注,共同爱好,二度好友,推荐好友
reids Set的操作命令:
命令 | 描述 |
---|---|
set key member1 [member2] | 在set集合中添加一个或多个元素 |
smembers key | 返回指定集合里面所有的值 |
sismember key member | 判断某一个值是不是在指定set集合中 |
scard key | 获取指定集合中的元素个数 |
srem key member1 [member2] | 移除集合中的指定一个或多个元素 |
srandmember key [count] | 随机抽选出指定个数的元素 |
spop key | 随机删除指定集合里面的元素 |
smove source destination member | 将 member 元素从 source 集合移动到 destination 集合 |
sdlff key1 key2 | 返回给定所有集合的差集 |
sinter key1 key2 | 返回给定所有集合的交集 |
sunion key1 key2 | 返回所有给定集合的并集 |
LIst(列表)
在redis里面,list使用场景 :
消息排队!消息队列 (Lpush Rpop), 栈( Lpush Lpop)!
所有的list命令都是用 l 开头的,Redis命令行是不区分大小命令
reids List 的操作命令:
命令 | 描述 |
---|---|
lpush key value1 [value2] | 将一个或多个值插入到列表头部 |
rpush key value1 [value2] | 在列表中添加一个或多个值到列表尾部 |
lpop key | 移除list的第一个元素 |
rpop key | 移除list的最后一个元素 |
lrange key start stop | 获取列表指定范围内的元素 |
llen key | 获取列表长度 |
lrem key count value | 移除列表指定个数的元素 |
ltrim key start stop | 通过下标截取指定的长度,只剩下截取的元素 |
rpoplpush source destination | 移除列表的最后一个元素,将他移动到新的列表中 |
lset key index value | 将列表中指定下标的值替换为另外一个值,如果不存在列表,去更新就会报错 |
linsert key befoer/after pivot value | 在列表的元素前或者后插入元素 |
hash(哈希)
Map集合,key-map! 时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的
key-vlaue!
hash可以处理经常变动的信息!== hash 更适合于对象的存储==,String更加适合字符串存储
reids hash 的操作命令:
命令 | 描述 |
---|---|
hset key field value | 设置一个字段值 |
hget key field | 获取一个字段值 |
hmset key field1 value1 [field2 value2 ] | 设置多个字段值 |
hmget key field1 value1 [field2 value2 ] | 获取多个字段值 |
hgetall key | 获取全部的数据 |
hdel key field2 [field2] | 删除一个或多个哈希表字段 |
hlen key | 获取hash表的字段数量 |
hexists key field | 判断指定字段是否存在 |
hkeys key | 获取所有哈希表中的字段 |
hvals key | 只获得所有value |
hsetnx key field value | 如果不存在则可以设置,如果存在则不能设置 |
zset (有序列表)
在set的基础上,增加了一个值 set key value zset key score value
使用场景:zset 排序 存储班级成绩表,工资表排序!带权重进行判断!排行榜应用实现
命令 | 描述 |
---|---|
zadd key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
zrangebyscore key min max | 通过分数返回有序集合指定区间内的成员 |
zrevrange key start stop | 返回有序集中指定区间内的成员 |
zrange key start stop | 通过索引区间返回有序集合成指定区间内的成员 |
zrem key member | 移除有序集合中的指定元素 |
zcard key | 获取有序集合中的个数 |
zcount key min max | 获取指定区间的成员数量 |
zincrby key increment member | 有序集合中对指定成员的分数加上增量 |
zscore key member | 返回有序集中,成员的分数值 |
三种特殊数据类型
Geospatial (地理位置)
Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
命令 | 描述 |
---|---|
geoadd key longitude latitude value | 添加地理位置 |
geopos key value | 获取指定的key的经度和纬度 |
geodlst key value1 value2 | 返回两个给定位置之间的距离 |
georadius key value1 value2 company | 以给定的经纬度为中心, 找出某一半径内的元素 |
georadiusbymember key value distance Company | 找出位于指定元素周围的其他元素 |
geohash key value1 value2 | 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近 |
Hyperloglog
Redis 2.8.9 版本就更新了 Hyperloglog 数据结构!
Redis Hyperloglog 基数统计的算法!
优点:占用的内存是固定,2^64 不同的元素的技术,只需要废 12KB内存!如果要从内存角度来比较的话 Hyperloglog 首选!
网页的 UV (一个人访问一个网站多次,但是还是算作一个人!)
传统的方式, set 保存用户的id,然后就可以统计 set 中的元素数量作为标准判断 !
这个方式如果保存大量的用户id,就会比较麻烦!
我们的目的是为了计数,而不是保存用户id;0.81% 错误率! 统计UV任务,可以忽略不计的!
命令 | 描述 |
---|---|
pfadd key element [element …] | 创建第一组元素 |
pfcount key | 统计 key里面的元素的基数数量 |
pfmerge destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并为一个 HyperLogLog |
Bitmap
位存储
使用场景:统计用户信息,活跃,不活跃! 登录 、 未登录! 打卡,365打卡! 两个状态的,都可以使用Bitmap
Bitmap 位图,数据结构! 都是操作二进制位来进行记录,就只有0 和 1 两个状态!
命令 | 描述 |
---|---|
setbit key offset value | 把当前key下的第offset位设置成value |
getbit key offset | 得到当前key下的第offset位value |
bitcount key | 统计key中为1的 |
以上是关于Redis的数据类型的主要内容,如果未能解决你的问题,请参考以下文章