1、五种常见的数据类型
String
String类型的三种格式
字符串
int
float
注意:字符串类型的最大空间不能超过512m
String类型常见的命令
SET:添加或者修改已经存在的一个String类型的键值对
语法格式:
set key value
例子: set name tian
GET:根据key获取String类型的value
语法格式
get key
例子 > get name
"tian"
MSET:批量添加多个String类型的键值对
语法格式
mset key value [key value ...]
例子>mset age 12 add 河南
MGET:根据多个key获取对应的String类型的value
语法格式
mget key [key ...]
例子>mget age add
1) "12"
2) "河南"
INCR:让一个整型的key自增1
语法格式
incr key
例子>incr age
13
INCRBY:让一个整形的key自增并指定步长
语法格式
incrby key increment
例子> incrby age 2
15
INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
语法格式
incrbyfloat key increment
例子>incrbyfloat money 1
11
SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行 【使用场景:分布式锁】
语法格式
setnx key value
例子> setnx a 123
1
SETEX:添加一个String类型的键值对,并且指定有效期
语法格式
setex key seconds value
例子> setex b 10 123
OK10秒之后会自动删除b
使用场景
计数功能,验证码存储,分布式锁等等
Hash
以键值对的方式设置数据,值的内容是hash数据。hash对应java中的map集合。
常用命令
hset: 设置单个键值对
语法格式
hset key field value key代表着对象 field代表属性 value代表属性值
例子> hset userInfo name tian
1
hget: 获取单个键对应的值
语法格式
hget key field
例子> hget userInfo name
tian
hmset: 批量设置键值对
语法格式
hmset key field value [field value ...]
例子>hmset userInfo age 23 address 河南
OK
hmget:批量获取键值对
语法格式
hmget key field [field ...]
例子> hmget userInfo name age address
tian
23
河南
hgetall: 获取某个键的所有键值对数据
语法格式
hgetall key
例子>hgetall userInfo
name
tian
age
23
address
河南
hdel: 删除某个键值对数据
语法格式
hdel key field [field ...]
例子> hdel userInfo address
1
hkeys: 获取所有的键
语法格式
hkeys key
例子> hkeys userInfo
name
age
hvals: 获取所有的值
语法格式
hvals key
例子> hvals userInfo
tian
23
hlen: 获取键值对的个数
语法格式
hlen key
例子> hlen userInfo
2
del键: 删除redis键数据
语法格式
del key [key ...]
例子> del userInfo
1
使用场景
用来存储各种资源信息。如:用户信息,部门信息,订单信息等等
List
以键值对方式存储数据,值的部分是一个list列表。值允许重复,数据可以通过索引来获取。
常见的命令
lpush:从左边添加数据
语法格式
lpush key value [value ...]
例子>lpush userInfo 1 2 3
3
rpush:从右边添加数据
语法格式
rpush key value [value ...]
例子>rpush userInfo 4 5 6
6
lpop:从左边弹出数据
语法格式
lpop key
例子> lpop userInfo
3
rpop:从右边弹出数据
语法格式
rpop key
例子> rpop userInfo
6
llen:返回列表长度
语法格式
llen key
例子> llen userInfo
4
lindex:返回列表中指定索引位置的数据【索引为-1,表示获取最后一个值】
语法格式
lindex key index
例子> lindex userInfo 2
4
使用场景
存储各种列表。如:粉丝列表,主播列表,消息列表等等
Set
以键值对方式存储。值的部分是一个set集合。值没有次序,不允许重复
常用命令
sadd:以特定键添加一组set数据
语法格式
sadd key member [member ...]
例子>sadd car 12
1
srem:删除特定数据
语法格式
srem key member [member ...]
例子>srem car 12
1
smembers:返回set中的所有元素
语法格式
smembers key
例子> smembers car
12
14
1518
sismember:测试set中是否存在某个值
语法格式
sismember key member
例子> sismember car 10
0 //不存在
> sismember car 12
1 //存在
scard:返回set中值的个数
语法格式
scard key
例子>scard car
4
spop:随机弹出(删除)一个或多个值
语法格式
spop key [count]
例子> spop car //count不写默认是1 随机弹出一个
18例子>spop car 2 //随机弹出两个值
15
12
srandmembeer:随机返回set中的值
语法格式
srandmember key [count]
例子> srandmember car //count不写默认是1 随机返回一个
14例子>srandmember car 2 随机返回两个值
14
4
sinter:求两个或多个set的交集
语法格式
sinter key [key ...]
例子>sinter car car2
2
3
4
sinterstore:将一个set的值或多个交集的结果,存储到另一个 set中
语法格式
sinterstore destination key [key ...]
例子>sinterstore car4 car //将car中所有的值存储导car4中
4例子> sinterstore car3 car car2 //将两个set交集的结果,存储到另一个 set中
3
使用场景
存储不重复元素,求多个集合交集。如:共同爱好,共同粉丝等等
SortedSet
以键值对方式添加数据,值的部分是set,但是每个set元素都要指定一个分数(权重\小数) 不允许重复,按照权重排序
常用命令
zadd:添加一组set数据
语法格式
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
例子> zadd score 12 tian 100 run
2
zrem:删除一个数据
语法格式
zrem key member [member ...]
例子> zrem score tian
1
zcard:统计元素个数
语法格式
zcard key
例子> zcard score
1
zcount:统计某个范围(分数)的元素个数
语法格式
zcount key min max
例子> zcount cat 1 3
2
zrangebyscore:返回指定分数范围的元素内容
语法格式
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
例子> zrangebyscore cat 1 3
1
zrange:返回有序集key中,在指定区间内的成员。其中成员的位置按score值从小到大来排序。具有相同score值的成员按字典序来排序。
语法格式
zrange key start stop [WITHSCORES]
例子> zrange cat 1 3
3
5
zscore:返回指定键的分数
语法格式
zscore key member
例子> zscore score run
100
使用场景
排行榜、弹幕消息、地理位置相关的等等
2、三种特殊的数据类型
GEO
基于sorted set数据结构实现的,利用geohash算法将经度和纬度编码为二进制字符串,并作为sorted set的score值
常用命令
geoadd:将一个或多个地理空间位置(经度、纬度、名称)添加到指定的key中
语法格式
geoadd key longitude latitude member [longitude latitude member ...]
例子> geoadd coordinate 112.42 34.16 "河南"
1longitude经度 【取值范围在-180~180】
latiude纬度 【取值范围-85.05112878~85.05112878】
geopos:返回一个或多个地理空间位置的经度和纬度
语法格式
geopos key member [member ...]
例子> geopos coordinate "河南"
112.41999775171279907
34.15999982501106302
geodist:返回两个地理空间位置之间的距离,可以指定单位(m,km,mi,ft)
语法格式
geodist key member1 member2 [unit] 【unit值有m、km、ft(英尺)、mi(英里) 】
例子> geodist coordinate "河南" "洛阳" 【默认是m】
206080.3684>geodist coordinate "河南" "洛阳" km
206.0804
georadius:返回指定圆心和半径内的地理空间位置,可以指定返回坐标、距离、哈希值、数量、排序方式等,也可以将结果存储到另一个key中
语法格式
georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
例子>georadius coordinate 115 34 400 km 【不带参数的只返回属性】
洛阳
河南例子> georadius coordinate 115 34 400 km withcoord 【withcoord参数表示查询的数据带有经度和纬度】
洛阳
112.1600005030632019
32.32000011046604726
河南
112.41999775171279907
34.15999982501106302例子>georadius coordinate 115 34 400 km withdist 【withdist参数表示到该坐标的距离】
洛阳
323.7739
河南
238.3386例子> georadius coordinate 115 34 400 km withhash 【withhash 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。】
洛阳
4040354143677915
河南
4040687585057773
- WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
- WITHCOORD: 将位置元素的经度和纬度也一并返回。
- WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
- COUNT 限定返回的记录数。
- ASC: 查找结果根据距离从近到远排序。
- DESC: 查找结果根据从远到近排序。
geohash:保存地理坐标
语法格式
geohash key member [member ...]
例子>geohash coordinate "洛阳"
wmxzb78mtk0
georadiusbymember:返回指定成员为圆心的指定半径内的地理空间位置,可以指定返回坐标、距离、哈希值、数量、排序方式等,也可以将结果存储到另一个key中
语法格式
georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
例子>georadiusbymember coordinate "洛阳" 300 km 【找出以洛阳 为中心半径300km范围的城市】
洛阳
河南
使用场景
地理位置搜索、分析和展示。如地图应用、导航应用、位置服务应用等
统计某个区域内的商家或用户数量
查询某个位置附近的餐馆或酒店
计算两个位置之间的距离或行驶时间
显示某个位置周围的景点或活动
BitMap
bitmap类型的底层实现是SDS(simple dynamic string)和String类型相同,只是在操作时会将每个字节拆分成8个二进制位,是一种独特的String类型,它可以将一个String类型的值看做是一个由二进制组成的数组。一个bitmap类型的键最多可以存储2^32-1
常用命令
setbit 设置或清除指定偏移量上的位(bit)
语法格式
setbit key offset value
例子> setbit activeCount 1 0
1
getbit 获取二进制串某一位上面的value
语法格式
getbit key offset
例子>getbit activeCount 1
0
bitop 主要对多个对应key的二进制串的值做and,or,xor, not操作
语法格式
bitop operation destkey key [key ...] 【operation :and、or、xor、not】
例子> bitop and sum activeCount activeCount1
1
bitcount 统计某一个二进制串里面1的个数
语法格式
bitcount key [start end]
例子> bitcount sum 0 3
0
bitpos 用来查询一个二进制串里第一个0或者1的位置。
语法格式
bitpos key bit [start] [end]
例子>bitpos sum 0 1 3
-1
应用场景
统计用户活跃度,利用setbit和bitcount命令实现每天或每个月用户登录次数的统计
实现布隆过滤器,利用setbit和getbit命令实现快速判断一个元素是否存在于一个集合中
实现位图索引,利用bitop和bitpos命令实现对多个条件进行位运算和定位
设置黑白名单
HyperLog
HyperLog是用来做基数统计的算法。优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的
常用命令
pfadd 添加指定元素到HyperLog
语法格式
pfadd key element [element ...]
例子> pfadd runoobkey redis
1例子>pfadd runoobkey mongodb mysql
1
pfcount 返回给定HyperLog的基数估算值
语法格式
pfcount key [key ...]
例子> pfcount runoobkey
3
pfmerge 将多个HyperLog合并为一个
语法格式
pfmerge destkey sourcekey [sourcekey ...]
例子> pfmerge runnoobkey2 runnoobkey runnoobkey1
OK
应用场景
基数统计