Redis常见数据类型
Redis键(KEY)
keys *
:查看当前数据库中的所有key
eixsts key
:查看在redis中是否存在这个key
type key
:查看键的数据类型
del key
:删除掉对应的键值对
unlink key
:这个也是键值对的删除操作,但是真正的删除是延后进行的,在后续一部操作中完成
expire key 10
:时间以秒为单位,表示key键值对的过期时间
ttl key
:查看key的生存时间,-2表示已经过期,-1表示永久不过去
dbsize
:查看当前数据库中的key的数量
flushdb
:清空当前数据库
flushall
:清空所有的数据库
字符串
string是redis中最基本的数据类型。它是二进制安全的,这就表示string类型数据可以包含所有类型的数据,例如jpg图片或者序列化对象。一个字符串value值最多可以达到512M大小
常见命令
set key value
:为数据库添加对应的键值对,如果set已经存在的key,那么将会进行覆盖,之前存在的value将会被新的替换掉
get key
:查询对应key的value值
append key value
:在原来存在的键值对中,在旧value的后面添加新value
strlen key
:获得value的长度
setnx key value
:这个和set的功能相似,但是如果key-value已经存在,那么就不会成功
incr key (step)
:将这个key对应的value自增1;如果为空,那么就设置成1
devr key (step)
:和incr真好相反,是自减;这两个都是原子操作,不可打断
mset key1 value1 key2 value2 ...
:同时设置一个或者多个key-value
mget key1 key2
:同时设置一个或者多个value值
msetnx key1 value1 key2 value2
:和mset相类似,但是只要有一个key-value没有设置成功,所有的key-value都会被回滚
getrange key start end
:例:
getrange name 0 3
获取value一定范围内的内容
setrange name 3 abc
就是在name对应的value值,第三位的位置,添加abc字符串
setex ket 过期时间 value
:在设置key-value的同时设置过期时间
getset key value
:以新的value取代旧的value
Redis列表(list)
在Redis中的列表是单键多值,列表式简单的字符串列表,可以在列表的左右两侧进行操作。它的底层逻辑是一个双向列表,两段的操作性能很高,但是中间节点的操作性能会比较差。
常见命令
lpush/rpush key value1 value2...
:从左侧或者右侧插入一个或者多个数据。
lpop/rpop key
:从这个key-value对中,从左侧或者右侧输出一个值,其中值得注意的是,如果key对应的value值已经没有了,key就会消亡。
rpoplpush key1 key2
:表示从k1列表的右边pop出一个数据,从k2列表的左边push进去
lrange key start end
:从左边开始取值,取一定范围内的数据
lindex key <index>
:按照索引下标取元素(从左到右)
llen key
:获取列表长度
linsert key before oldvalue newvalue
:在oldvalue后面插入newvalue
lrem key n value
:从左边删除n个value值
lset key index value
:将列表key下标为index的值替换为value
数据结构
list的数据结构是quicklist快速链表。
在列表元素比较少的情况下会使用一块连续的内存存储,这是一个压缩列表。它吧所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候会改成quicklist。
Redis集合(set)
set和list功能上相类似,但是set相比于list具备自动排重的功能,也就是说一个key的value值不会出现重复
常见命令
sadd key value1 value2
:向集合中添加value值,也是创建key-value(set)的方式
smembers key
:取出这个集合的所有value
sismember ket value
:判断集合key是否含有value,如果有就返回1,如果没有就是0
scard key
:返回该集合的元素个数
srem key value1 value2
:删除集合中的某个元素
spop key
:随机从集合中pop出一个value
srandmember key n
:从集合中随机输出n个value值,但是不会将其删除
smove source destination value
:移动集合中的一个数据到另一个集合中
sinter key1 key2
:返回两个集合的交集value
sunion key1 key2
:返回两个集合的并集value
sdiff key1 key2
:返回两个集合的差集value
数据结构
redis中的set数据结构内部也使用hash结构,所有的value都指向同一个内部值
Redis 哈希(HASH)
redis hash是一个key-value集合,其中value又是一个string类型的field和value的映射表,特别适合存储对象。
常见命令
hset key field value
:给key集合中的field赋值为value
hmset ket filed1 value1 filed2 value2
:一次性设置多个
hget key field
:获取对应的value
hexists key filed
:查看是否存在
hkeys key
:查看所有的field
hvals key
:查看集合中的所有value
hincrby key field step
:自增
hsetnx key filed value
:如果field已经存在,就不可以添加,如果不存在就可以添加。
数据结构
有两种数据结构:ziplist压缩列表、hashtable哈希表,当数据少的时候使用ziplist如果数据比较多就使用hashtable
Reids有序集合(Zset)
zset和set非常现实,是一个没有重复元素的字符串集合。而zset会依据不同value的score值对数据进行排序
常见命令
zadd key score1 value1 score2 value2 ...
:添加value以及对应到score
zrange key start end
:查询输出一定范围内的数据,withscores可以将score和value一起返回
zrangebyscore key maxmin
:依据score的大小进行排列
zincrby key step value
:给key中的一个value的score增加一定的数值
zrem key value
:删除zset中的某个成员
zcount key start end
:统计score范围内有多少成员
zrank key value
:查看这个value成员的排名(依据score)
数据结构
zset有两种数据结构,一个是hash表,另一个是跳跃表
Redis新数据类型
Bitmaps
这个数据类型主要进行数据操作
命令行
setbit key offset value
:对每个bit为进行操作,offset表示操作的bit为,将其设置为value值。在默认情况下,每个bit都是0
getbit key offset
:获取对应是value对应的bit位
botcunt key start end
:统计这个范围内的bit,有多少位是1
bitop and(or/xor/not) key0 key1 key2
:进行交集,并集等操作,结果存储到key0中
HyperLogLog
HyperLogLog键只需要花费12kb内存,就可以直接计算接近2^64个不同元素的基数(不重复数据的个数 )。
命令
pfadd key element1 element2
:为key添加value,如果已经在原本的value集合中存在就不会被添加
pfcount key
:用于统计value的数量
pfmerge key1 key2 key3...
:合并功能,把key2及后面的value都合并进入到key1中
GeoSpatial
GEO是地理信息的缩写,该类型就是元素的2维坐标,就是地图上的经纬度
命令
geoadd key value1 value2 member
:参数是经度,维度,地点名,可以一次性添加多个
geopos key member
:获取指定key和地点的坐标
geodist key member1 member2 距离单位
:获取两个位置之间的直线距离
georadius key value1 value2 distance 距离单位
:查询key对应的地点中,以value1、value2为中心,以distance为半径查找范围内的地点