Redis数据类型及命令
Redis数据类型
一、String
String是redis最基本的数据类型,也是最简单的key-value类型,value可以是字符串,也可以是数字等类型,一个键最大能存储512M。String类型是二进制安全的,可以包含任何数据,包括序列化的对象、图片的二进制数等
1、赋值命令:
SET KEY_NAME VALUE,设置给定key对应的值,若key已存在则覆盖旧值
SETNX KEY_NAME VALUE,若key不存在,则设置对应的键值,返回1,若key已存在则不设新值且返回0,使用来解决分布式锁的方案之一
2、取值命令
GET KEY_NAME ,若key不存在,则返回nil,若key对应的value不是字符串类型,返回一个错误
GETRANGE Key start end,用于获取存储指定key中字符串的子串,返回字符串截取由start到end之间的子串(包括start和end)
GETBIT KEY offset,对key所存储多的字符串,获取指定偏移量上的位
GETSET KEY_NAME VALUE,用于设置key的值,并返回key的旧值,当key不存在时返回nil
3、删除命令
DEL KEY_NAME,删除指定的key,若存在该key返回1,否则返回0
4、批量处理
MSET k1 v1 k2 v2 …,批量写入多个键值对
**MGET k1 k2 k3 …**批量读出多个键对应的值
5、自增\自减
INCR KEY_NAME,自增操作,将key中存储的数字值增加1,若key不存在则key会被初始化为0,然后执行INCR操作,若key所对应的值非整数则会返回异常
DECR KEY_NAME,自减操作,将key中存储的数字值减1,若key不存在则key会被初始化为0,然后执行INCR操作,若key所对应的值非整数则会返回异常
INCRBY KEY_NAME increment,将key中的数字增加指定的数值
DECRBY KEYNAME decrement,将key中的数字减少指定的 数值
6、其他操作
ADDPEND KEY_NAME VALUE,将指value追加到指定的key对应的值末尾,若该key不存在,则为其赋值
STRLEN KEY_NAME,返回指定key对应的value的长度
7、应用场景
- 用于保存单个字符串或JSON字符串数据
- 存储图片
- 计数器(粉丝数、点赞数等)
二、Hash
Hash即哈希表,是一个String类型额fiel和value的映射表,可以看成具有KEY和VALUE的MAP容器,Redis中每个Hash可以存储2^32-1个键值对。Hash很适合存储对象。
1、赋值命令
HSET KEY FIELD VALUE,为指定的key设定相应的field和value
HMSET KEY FIELD VALUE [FIELD1 VALUE1]…,将多个field-value对添加到哈希表key中
HSETNX KEY FIELD VALUE,只有当字段field不存在时才为field赋值
2、取值命令
HGET KEY FIELD,获取存储在hash中的FIELD对应的值
HMGET KEY FIELD [FIELD1]…,获取hash中给定的所有的field对应的值
HGETALL KEY,返回hash中所有的字段
3、删除命令
HDEL KEY FIELD1[FIELD2]…,删除hash中的一个或多个字段
4、自增
HINCRBY KEY FIELD increment,为哈希表key中的指定字段的整数值加上增量increment
HINCRBYFLOAT KEY FIELD increment,为哈希表key指定字段的浮点数值增加增量increment
5、其他命令
HEXISTS KEY FIELD,查看哈希表key中是否存在字段FIELD
HKEYS KEY,获取哈希表key中的所有FIELD
HLEN KEY,获取哈希表key中的
三、list
list类型是一个链表结构的集合,主要功能由push、pop、获取元素等。list是一个双向链表,既可以作为栈,也可以作为队列,有些类似于JAVA中的LinkedList。
1、赋值命令
LPUSH KEY VALUE1 [VALUE2]…,将一个或多个值插入到链表头部
RPUSH KEY VALUE1 [VALUE2]…,将一个或多个值插入到链表尾部
LPUSHX KEY VALUE,将一个值插入到已存在的链表头部,若链表不存在,则操作失败
RPUSHX KEY VALUE,将一个值插入到已存在的链表尾部,若链表不存在,则操作失败
这里要注意的是,LPUSH是从左边插入,当插入多个元素时,后一个元素总是被插在前一个元素的左边,因此命令执行完成后,链表中的顺序和原命令中的顺序是相反的;RPUSH则相反。
2、取值命令
LINDEX KEY INDEX,通过索引获取链表中的元素
LRANGE KEY START STOP,获取链表指定索引范围内的元素(闭区间)
要注意的是,LINDEX与LRANGE都可以用负数来表示索引,可以把它想象成一个环,那么-1 就表示链表最后一个元素,-2表示道数第二个元素以此类推。因此当元素数量较多时,我们可以用LRANGE 0 -1来遍历链表
3、删除命令
LPOP KEY,移除并返回链表第一个元素
RPOP KEY,移除并返回链表的最后一个元素
BLPOP KEY1 [KEY2]… timeout,移除并返回链表的第一个元素,若链表没有元素会阻塞链表直至等待超时或可弹出元素为止,例如下面l1并不存在,控制台会被阻塞10秒
在这个等待的过程中,如果我们在另一个控制台创建了一个链表l1,那么这时l1就可以执行pop操作,原先的控制台执行BLPOP退出,控制台只阻塞了28秒
BRPOP KEY1 [KEY2]… timeout,移除并返回链表的最后一个元素,若链表中没有元素则阻塞链表直到等待超时或发现可弹出元素为止
LTRIM KEY START STOP,对一个链表进行修剪,让链表只保留start到stop之间的元素,其余的元素会被删除
4、修改命令
LSET KEY INDEX VALUE,通过索引修改元素的值
LINSERT KEY BEFORE|AFTER WORLD VALUE,将值VALUE插入到值WORLD的前方或后方
5、其他命令
RPOPLPUSH SOURCE DESTINATION,移除链表的最后一个元素并将元素添加到另一个链表并返回该值
RPOPLPUSH SOURCE DESTINATION TIMEOUT,从一个链表中弹出一个值并添加到另一个链表中并返回该值,若链表中没有元素会阻塞链表直至等待超时或发现可弹出元素为止
四、set
set是String的无序集合,集合的成员是唯一的,不允许出现重复的数据。redis中的set是通过哈希表实现的。set的最大成员数是2^32-1
1、赋值命令
SADD KEY MEMBER1 [MEMBER2]…,向集合中添加多个元素
2、取值命令
SMEMBERS KEY,返回集合中的所有成员
SRANDMEMBER KEY [COUNT],随机返回集合中一个或多个成员
3、删除命令
SREM KEY MEMBER1 [MEMBER2]….,移除集合中的一个或多个成员
SPOP KEY [COUNT],移除并返回集合中的一个随机元素
SMOVE SOURCE DESTINATION MEMBER,将MEMBER元素元素从SOURCE集合移动到DESTINATION集合中
4、差集命令
SDIFF KEY1 [KEY2]…,返回所给定的所有集合的差集,若差集为空返回empty array
SDIFFSTORE DESTINATION KEY1 [KEY2]…,返回给定所有集合的差集并存储到集合DESTINATION中
5、交集命令
SINTER KEY1 [KEY2]…,返回给定所有集合的交集,若交集为空返回empty array
SINTERSTORE DESTINATION KEY1 [KEY2]…,返回给定所有集合的交集并存储到集合DESTINATION中
6、并集命令
SUNION KEY1 [KEY2]…,返回给定所有几何的并集
SUNIONSTORE DESTINATION KEY1 [KEY2]…,返回给定所有集合的并集并存储到集合DESTINATION中
7、其他命令
SCARD KEY,获取集合的成员数量
SISMEMBER KEY MEMBER,判断MEMBER是否是集合KEY的成员
五、ZSet
Zset是set集合的补充,是一种有序但不重复的集合。相比于Set,ZSet中每个元素会关联一个double类型的分数,redis会通过分数来为集合进行从小到大的排序。ZSet中的成员是唯一的,但分数是可以重复的。ZSet中最大成员数为2^32-1。ZSet常用于排行榜。
1、赋值命令
ZADD KEY SCORE2 MEMBER1 [SCORE2 MEMBER2]…,向有序集合添加一个或多个成员,或更新已存在的成员的分数
2、取值命令
ZRANGE KEY START STOP [WITHSCORES],通过索引区间返回有序集合指定区间内的成员(根据SCORE从低到高排序),和list类似我们可以用ZRANGE KEY 0 -1来遍历所有元素
ZRANGEBYSCORE KEY MIN MAX [WITHSCORES] [LIMIT],通过分数返回指定区间内的成员(根据SCORE从低到高排序)
ZREVRANGE KEY START STOP [WITHSCORES],通过索引区间返回集合中指定区间内的成员(根据SCORE从高到低排序)
ZREVRANGEBYSCORE KEY MAX MIN [WITHSCORES] [LIMIT],通过分数区间返回指定区间内的成员(根据SCORE从高到低排序)
3、删除命令
ZREM KEY MEMBER1 [MEMBER2]…,移除集合中的一个或多个成员
ZREMRANGEBYRANK KEY START STOP,移除集合中给定的区间中的所有成员(根据SCORE从低到高排序)
ZREMRANGEBYSCORE KEY MIN MAX,移除集合中给定的分数区间得到所有成员(根据SCORE从低到高排序)
4、其他命令
ZCARD KEY,获取集合的成员数
ZCOUNT KEY MIN MAX,计算在有序集合中指定区间分数的成员数
ZRANK KEY MEMBER,返回成员MEMBER在集合中的索引
ZINCRBY KEY INCREMENT MEMBER,将成员MEMBER的分数增加增量INCREMENT并返回修改后的分数