在Redis中,有5种数据类型,分别是String、List、Hash、Set、Zset。
Redis在存储数据类型时是使用键值对的方式进行存储的,key就是对应的数据类型的对象的名字,就如java中的变量名,由用户(程序员)自己定义,value就是变量实际存储的内容,如String存储的就是字符串,List存储的就是一个列表,Hash存储的就是一个Hash表等。5种类型中最常见也最常用的是String类型,其次就是List类型,其他3种用到的不是太多,简单了解一下即可,当然某些项目中可能会用到。5种类型的存储方式通过命令去区分,默认就是String类型,L-前缀的一般是操作lsit列表的,S-前缀的一般是操作Set的,Z-前缀的一般是操作Zset的,H-前缀的一般是操作Hash的。
一、String类型的常用操作命令及作用
命令 | 作用 | |
增 | set [key] [value] | 新增一条 |
mset [key1] [value1] [key2] [value2] [key3] [value3] [key...] [value...] | 批量新增 | |
setrange [key] [startindex] [str] | 从起始下标开始替换为str | |
setex [key] [time] [value] | 设置过期时间(set with expire) | |
setnx [key] [value] | 没有再创建(set if not exist)在分布式锁中常使用 | |
msetnx | 原子化操作 | |
incr xx(字段)incrby xx(步长) | 自增 | |
decr xx(字段)decrby xx(步长) | 自减 | |
查 | get [key] | |
mget [key1] [key2] [key3] [key...] | 批量获取 | |
get * | 获取所有的key值 | |
keys * | 获取所有的key值 | |
getrange [key] [startindex] [endindex] | 按照下标(闭区间) | |
改 | set [key] [value] | |
getset [key] [value] | 先get,如果存在再set | |
删 |
二、List类型的常用操作命令及作用
命令 | 作用 | |
增 | lpush [key] [value1] | |
lrange [key] [startindex] [endindex] | ||
rpush [key] [value1] | ||
rinsert [key] [before,after] [value1] [value2] | 将value2插入到value1的前(后)面 | |
删 | lpop [key] [value1] | |
lrem [key] [value] | 移除 | |
查 | lrange | |
lindex [key] [mount] [startindex] | 返回列表中对应起始下标开始一定数量的值 | |
llen [key] | 返回列表的长度 | |
改 | rpoplpush [sourcelist] [destinationlist] | 移除source中最后一个元素放入另一个destination列表,没有就创建 |
lset [key] [index] [value] | 修改列表中下标为index的值为value,首先保证list以及index存在,不存在就报错 |
三、Hash类型的常用操作命令及作用:
Hash是一种Map集合,在存储Hash类型的时候,key值是Hash名,value中包含Hash的内容即Hash中的键值对。Hash更适合对象的存储。
命令 | 作用 | |
增/改 | hset [key] [value1-field] [value1-value] | 增加 |
hset [key] [value1-field] [value1-value] [value2-field] [value2-value] [value3-field] [value3-value] [value...-field] [value...-value] ... | 批量增加 | |
hincrby [key] [value-field] [1,-1] | 自增或自减 | |
查 | hget [key] [value-field] | 按照hash名和key值查找 |
hmget [key] [value-field1] [value-field2] [value-field3] ... | ||
hgetall [key] | 获取所有 | |
hkeys [key] | 获取所有key值 | |
hvalues [key] | 获取所有value值 | |
hlen [key] | 获取当前Hash中键值对的长度(数量) | |
hexists [key] [value-filed1] | 判断Hash中制定字段是否存在 | |
删 | hdel [key] [value-filed] |
四、Set类型的常用操作命令及作用:
Set是无序的无重复集合。
命令 | 作用 | |
增 | sadd [key] [value1] | |
查 | smembers [key] | |
sismember [key] [value] | 查看value是否存在于名为[key]的set中 | |
srandmember [key] [amount] | 随机取出[amount]个元素 | |
scard [key] | 获取名为[key]的元素的个数 | |
删 | srem [key] [value1] | 删除 |
spop [key] | 随机删除 | |
smove [key1] [key2] [value1] | 移动[value1]元素从[key1]到[key2] | |
集 | sdiff [key1] [key2] | 查找key1和key2的差集 |
sinter [key1] [key2] | 查找key1和key2的交集 | |
sunion [key1] [key2] | 查找key1和key2的并集 |
set中交集的应用场景举例:社交平台的共同关注,共同喜欢,就可以通过这样的交集求出。
五、Zset类型的常用操作命令及作用:
Zset是有序的无重复集合。它相比Set来说增加了一个参数score,用来进行排序比较。
命令 | 作用 | |
增 | zadd [key] [score] [value1] | |
查 | zrange [key] [min] [max] | 区间内升序排列(min必须比max小) |
zrevrange [key] [score1] [score2] | 倒序排列 | |
acard [key] | 获取有序集合中的个数 | |
删 | zram [key] [value1] | 删除名为[key]的value1 |