目录
基本类型
String类型
String类型是Redis中的基本类型,一个key对应一个value、String类型的值可以是字符串,数字或者是二进制的数据,最大不超过512M。
set
添加数据 格式:set key value //成功则返回ok
get
获取值,通过key获取value 格式:get key
exists
判断key是否存在 格式:exists key
key存在则返回1,否则返回0
append
追加字符串,如果key存在,追加,key不存在,相当于set 格式:append key append_value
key存在,则直接进行添加数据并且返回当前数据的长度大小,否则就创建key和value返回0
strlen
获取字符串的长度 格式:strlen key
incr decr
对value进行自增1 格式:incr key
注意:value值只能是Integer类型,其他类型就会报错
对value进行自减1 格式:decr key
能够进行自增自减的字符串必须是数据字符串,否则抛出错误
如果对应key不存在,那么value的值会先被初始化为0,然后在执行incr操
incrby decrby
设置加的步长 格式:incrby key num
设置减的步长 格式:decrby key num
getrange
获取给定范围的字符串的值
格式:getrange key start stop
从0开始到指定长度n。如果是想获取全部内容则范围为:0 -1
hash类型
Redis中的哈希是一个String类型的filed和value的映射表,本身是一种键值对的结构,如下图所示
哈希类型很适合存储对象、哈希的命令都是以h开头,hset、hget...
hset
设置数据 格式:hset key filed1 value1 ...fieldn valuen
hget
获取数据 格式:hget key field
插入操作返回结果表示插入成功数据格式,也就是field的个数,filed属性是不能重复的
hmset
插入数据 格式:hmset key filed1 value1 ...fieldn valuen
hmget
批量获取数据 格式:hmget key field1...fieldn
hgetall
获取key中所有的value值
获取数据格式:hgetall key
hdel
删除指定field的hash键值对 格式:hdel key filed
hlen
获取哈希中键值对的个数 格式:hlen key filed
hexists
判断哈希中字段是否存在 格式:hexists key filed
hkeys hvals
获取哈希中key的所有filed 格式:hkeys key
获取哈希中key的所有value 格式:hvals key
hincrby
给定哈希中字段的值加上一定步长 格式:hincrby key filed num
hsexnx
如果 不存在,则添加成功,如果存在,则失败 格式:hsetnx key filed value
List类型
列表是简单的字符串列表,按照插入顺序排序,数据是可以重复的。可以在头部和尾部进行插入和删除,
类似于Java中的LinkedList集合
可以使用该类型实现栈、队列等数据结构
lpush rpush
从list的左边插入值 格式:lpush key value
从list的右边插入值 格式:rpush key value
Xpush操作返回的是list中数据的个数
lrange
从list中获取指定范围的数据 格式:lrange key start stop
lpop rpop
从列表的左侧删除数据 格式:lpop key
从列表的右侧删除数据 格式:rpop key
lindex
获取指定下标的值 格式:lindex key index
llen
获取list中元素的个数 格式:llen key
lrem
删除list中元素 格式:lrem key count value
ltrim
截取列表中的值 格式:ltrim key start stop
rpoplpush
移除列表中的最后一个元素,将他添加到另一个列表中
格式:rpoplpush key1 key2
lset
根据下标替换列表中的值 格式:lset key index value
linsert
在列表中插入值 格式:linsert key before|after value new_value
在指定元素前或者后插入数据,如果指定数据重复,只找到第一个出现的元素在其前后插入即可
使用列表完成数据结构:
实现栈:lpush+lpop
实现队列:lpush+rpop
有限集合:lpush+ltrim
Set集合
redis中的set是String类型的无序集合,数据是无序的,并且属性元素是唯一的,意味着不能出现重复元素
命令都是以s开头的
sadd
给set中添加元素 格式:sadd key value1 value2...valuen
smembers
获取set中所有的值 格式:smembers key
sismember
判断某个元素是否在set中 格式:sismember key value
scard
获取set中元素的个数 格式:scard key
srem
删除set中的元素 格式:srem key value1 value2...
srandmember
从set中随机获取值 格式:srandmember key count
spop
随机删除指定元素格式 格式:spop key count
smove
将指定元素从一个set中移动到另一个set中 格式:smove set1 set2 value
sinter sunion sdiff
求集合的交并补集
SortSet有序集合
sortset和set类似,存在特征:集合中数据元素不能重复。有序集合可以实现元素排序,给定每个元素设置一个分数,作为排序依据。
注意:有序集合中元素是不能重复的,但是分数可以重复,有序集合一般是以z开头的
zadd
添加元素 格式:zadd key socre value
zrange
获取zset中一个范围的值 格式:zrange key start stop
zrangebyscore
按照zset中的score从小到大排序 格式:zrangebyscore key min max
zrem
删除zset中的元素 格式:zrem key value
zcard
查看zset中元素个数 格式:zcard key
zcount
更具score的值统计在给定区间的元素个数 格式:zcount key min max
特殊类型
geospatial 地理空间
主要用于存储地理位置信息,并对存储的信息进行操作,适用场景如定位、附近的人等。
城市经纬度查询:城市经纬度查询-国内城市经度纬度在线查询工具
这里介绍6个命令
-
geoadd 添加位置
-
geodist 返回给定位置距离
-
geohash 返回一个11字符的geohash字符串
-
geopos 返回给定名称经纬度
-
georadius 找到某一给定位置的半径内元素
-
georadiusbymember 以一成员变量为中心,查找指定半径范围内元素
geoadd
添加地理位置 格式:geoadd key 纬度 经度 名称
geopos
返回给定名称的纬度和经度 格式:geopos key 名称
geodist
返回两个给定位置之间的距离 格式:geodist key 名称1 名称2 距离单
geohash
返回一个11个字符的geohash字符串
georadius
以给定的经纬度为中心,找到某一个半径内的元素
georadiusbymember
以一个成员为中心,查找指定范围内容的元素
geo的底层是一个zset集合
hyperloglog
HyperLogLog 是用来做基数统计的算法,其优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。典型的使用场景是统计独立访客。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
基数的概念
比如数据集 {1, 3, 5, 7, 5, 7, 8},
那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。
基数估计就是在误差可接受的范围内,可以接受一定的误差,快速计算基数。
常见命令:
使用:
bitmaps
位图,可以认为是一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在 Bitmap 中叫做偏移量。Bitmap的长度与集合中元素个数无关,而是与基数的上限有关。bitmap是位图存储的,都是二进制来进行记录,所有只要是两种状态值的场景,都可以使用bitmaps来存储,比如:登录,未登录;打卡,未打卡;活跃,不活跃等
setbit
在bitmaps中添加数据 格式:setbit key offset value
getbit
查看位图上某个位置的值 格式:getbit key offset
bitcount
统计位图上value等于1的个数 格式:bitcount key start end
以上就是Redis的几种类型