Redis的常用数据类型和基本命令

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是有序的,和无序集合的主要区别在于每一个元素除了值之外,还会多一个分数,对分数的大小进行排序

Redis的常用数据类型和基本命令

Redis的常用数据类型和基本命令

Redis的常用数据类型和基本命令



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" ”张三”