Redis的常用数据类型和基本命令
数据类型 | 数据类型存储的值 | 说明 |
STRING (字符串) | 可以是保存字符串、整数和浮点数 | 可以对字符串进行操作,比如增加字符或者求子串等;整数、浮点数等可以计算自增 |
LIST(列表) | 它是一个链表,它的每一个节点都包含一个字符串 | 支持从链表两端插入和弹出节点,可以通过偏移进行裁剪,可以读取一个或多个节点,可以根据条件删除或者查找节点等 |
SET(集合) | 它是一个无序集合,里面每一个元素都是一个字符串,而且是不重复的。 | 可以新增、读取、删除单个元素;检测元素是否在集合中;计算交并差集;可以随机从集合中读取元素 |
HASH(哈希散列表) | 类似于java中的 Map,是一个无序键值对列表 | 可以增删改查单个键值对,可以获取所有键值对 |
ZSET(有序集合)SortedSet | 一个有序集合,可以包含字符串、整数、浮点数、分值、元素的排序根据分值大小决定 | 可以增删改查元素,根据分值的范围或者成员来获取对应的元素 |
HyperLogLog(基数)(不常用) | 计算重复的值,以确定存储的数量 | 只提供基数的运算,不提供返回的功能 |
String的一些基本命令操作
命令 | 说明 | 备注 |
set key value | 设置键值对 | 比如:set k1 v1 表示设置一对键为k1值为v1的键值对 |
get key | 通过键获取值 | 比如:get k1 表示获取键为k1的值,若没有则显示(nil)表示为空 |
del key | 通过键删除键值对 | 比如:del k1表示删除键为k1的键值对;其他数据类型中也可使用,会返回删除的数量 |
strlen key | 返回key对应值的字符串长度 | 比如:对于k1:value 则返回5 |
getset key value | 修改原来key对应的值,并返回原来的值 | 如果原来的值为空,则返回空,并设置新的值 |
getrange key start end | 获取子串 | 字符串长度为len,从0开始,start和end的取值范围为0~len-1 |
append key value | 新的字符串value将加入到key对应的值的末尾 | 返回key对应值的新字符串长度 |
incr key | 在原来的值上加1 | 操作字段必须为整数 |
incrby key increment | 在原来的值上加上整数increment | 操作字段必须为整数 |
decr key | 在原来的值上减1 | 操作字段必须为整数 |
decrby key increment | 在原来的值上减去整数increment | 操作字段必须为整数 |
incrbyfloat key increment | 在原来的值上加上浮点数increment | 操作字段必须为整数或浮点数 |
List
命令 | 说明 | 备注 |
lpush key node1[node2...] | 把节点node1加入链表最左边 | 加入顺序若为1,2,...n则链表从左到右为n...2,1 |
rpush key node1[node2..] | 把节点node1加入链表最右边 | 加入顺序若为1,2,...n则链表从左到右为1,2,...n |
lindex key index | 读取下标为index的节点 | 返回节点字符串,下标从0开始 |
llen key | 求链表长度 | 返回链表节点数 |
lpop key | 从链表左边弹出节点 | 返回节点,并删除链表中的原节点 |
rpop key | 从链表右边弹出节点 | 返回节点,并删除链表中的原节点 |
linsert key befor|after pivot node | 在值为pivot的节点 前|后 插入节点node | 若key不存在则报错,没有对应的pivot则返回-1 |
lpushx key node | 若存在key链表,则在左边插入node | 如果key链表不存在,则失败 |
rpushx key node | 若存在key链表,则在右边插入node | 如果key链表不存在,则失败 |
lrang key start end | 获取链表从start到end的节点值 | 包含start和end下标的值 |
lrem key count value |
若count为0,则删除所有值等于value的节点; 如果count不为0,则先对count取绝对值再从左往右 删除不大于count个等于value的节点 |
count必须为整数,若为负数则会先取绝对值 |
lset key index node | 设置列表下标为index的节点值为node | |
ltrim key start stop | 只保留从start到stop的节点,其余删除 | 包含start和stop的下标节点 |
list的阻塞命令
命令 | 说明 | 备注 |
blpop key timeout |
移出并获取列表的最左边元素; 如果列表没有元素则会阻塞直到等待超时或发现可弹出元素为止 |
相对于lpop命令,它的操作是进程安全的 |
brpop key timeout |
移出并获取列表的最右元素; 如果列表没有元素则会阻塞直到等待超时或发现可弹出元素为止 |
相对于rpop命令,它的操作是进程安全的 |
rpoplpush key src dest | 将链表最右边的元素移除并插入到最左边 | 不能设置超时时间 |
brpoplpush key src timeout | 将链表最右边的元素移除并插入到最左边 |
可设置超时时间 |
Set
命令 | 说明 | 备注 |
sadd key member1[member2..] | 给键为key的集合添加成员 | 可以同时增加多个 |
scard key | 统计键为key的集合成员数 | 返回个数 |
sdiff key1[key2] | 找出两个集合的差集 | 若只有key1则返回整个key1 |
sdiffstore des key1[key2] | 找出两个集合的差集存入des中 | |
sinter key1[key2] | 找出两个集合的交集 | 若只有key1则返回整个key1 |
sinterstore des key1[key2] | 找出两个集合的交集存入des中 |
|
sismember key member | 判断member是否为key集合的成员 | 如果是返回1,否则返回0 |
smembers key | 返回集合的所有成员 | 若数据太大,需要考虑迭代遍历的问题 |
smove src des member | 将成员member从集合src迁移到集合des中 | |
spop key | 随机弹出集合中的一个成员 | 随机弹出 |
srandmember key [count] | 返回count个成员 | count为整数,若为负数则会先取绝对值 |
srem key member1[member2] | 移除集合中的成员,可以多个移除 | |
sunion key1[key2] | 求出两个集合的并集 | 若只有key1则返回整个key1 |
sunionstore des key1 key2 | 找出两个集合的并集并存入des中 |
ZSet是有序的,和无序集合的主要区别在于每一个元素除了值之外,还会多一个分数,对分数的大小进行排序
Hash中一个键对应的值为多个键值对,常用于表示一个对象
例如一个User类,则键为user,对应的键值对为{“id”:1,"username":张三}
命令 | 说明 | 备注 |
hdel key field1 [field2...] | 删除hash结构中的某个(些)字段 | 可删除多个字段 |
hexists key field | 判断hash结构中是否存在field字段 | 存在返回1,否则返回0 |
hgetall key | 获取所有键为key的对应的多个键值对 | 返回键和值 |
hincrby key field increment | 指定给hash结构中的某个字段加上一个整数increment | 要求字段为整数字符串 |
hincrbyfloat key field increment | 指定给hash结构中的某个字段加上一个浮点数increment | 要求字段为数字字符串 |
hkeys key | 返回hash中的所有键值对中的键 | 例子中的id,username |
hlen key | 返回hash中的键值对数量 | 例子中为2 |
hmget key field1[field2...] | 返回hash中指定的键的值,可以是多个 | 依次返回值 |
hmset key field1 value1[field2 value2...] | 对hash结构设置多个键值对 | 例子中 [id 1] 为一个键值对 |
hset key field value | 在hash结构中设置键值对 | 设置单个键值对 |
hsetnx key field value | 当hash结构中不存在对应键时,才设置值 | 存在时则不修改原值 |
hvals key | 获取hash结构中所有的值 | 例子中会返回“id” 1,"username" ”张三” |