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的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Redis三种特殊数据类型(地理位置)

Redis三种特殊数据类型(地理位置)

Redis三种特殊数据类型

Redis数据类型(上)

Redis的6种数据类型

Redis实战 | 5种Redis数据类型详解