1. String类型
String类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.
键 | 值 |
---|---|
msg | hello world |
num | 10 |
score | 92.5 |
String的常见命令有:
1、SET:添加或者修改已经存在的一个String类型的键值对
SET name 666
复制代码
2、GET:根据key获取String类型的value
GET name
复制代码
3、MSET:批量添加多个String类型的键值对
MSET name 111 age 18
复制代码
4、MGET:根据多个key获取多个String类型的value
MGET name age
复制代码
5、INCR:让一个整型的key自增1
INCR age
复制代码
6、INCRBY:让一个整型的key自增并指定步长,例如:incrby age 2 让age值自增2
INCRBY age 2
复制代码
7、INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
INCRBYFLOAT money 3.0
复制代码
8、SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
SETNX name 2222
复制代码
9、SETEX:添加一个String类型的键值对,并且指定有效期
SETEX name 5 clickonlike
复制代码
注:
Redis的key允许有多个单词形成层级结构,多个单词之间用’:’隔开,格式如下:
set Jie:user:1 '{"id":1, "name": "JIE", "age": 21}'
复制代码
2 Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
常见命令:
1、HSET key field value:添加或者修改hash类型key的field的值
HSET jie:user:1 name jie
HSET jie:user:1 age 22
复制代码
2、HGET key field:获取一个hash类型key的field的值
HGET jie:user:1 name
复制代码
3、HMSET:批量添加多个hash类型key的field的值,其实我发现HSET也可以办到
HMSET jie:user:1 name jie age 18 sex nan
复制代码
4、HMGET:批量获取多个hash类型key的field的值
HMGET jie:user:1 name age sex
复制代码
5、HGETALL:获取一个hash类型的key中的所有的field和value
HGETALL jie:user:1
复制代码
6、HKEYS:获取一个hash类型的key中的所有的field
HKEYS jie:user:1
复制代码
7、HVALS:获取一个hash类型的key中的所有的value
HVALS jie:user:1
复制代码
8、HINCRBY:让一个hash类型key的字段值自增并指定步长
HINCRBY jie:user:1 age 1
复制代码
9、HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
HSETNX jie:user:1 name jie
复制代码
3. List类型
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。
既可以支持正向检索和也可以支持反向检索。
特征也与LinkedList类似:
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
常见命令:
1、LPUSH key element … :向列表左侧插入一个或多个元素
LPUSH name a b c
复制代码
2、LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
LPOP name
复制代码
3、RPUSH key element … :向列表右侧插入一个或多个元素
RPUSH name j k l
复制代码
4、RPOP key:移除并返回列表右侧的第一个元素
RPOP name
复制代码
5、LRANGE key star end:返回一段角标范围内的所有元素
LRANGE name 1 3
复制代码
6、BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil,不到黄河不死心。单位秒
BLPOP name2 100
复制代码
4 Set类型
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。
因为也是一个hash表,因此具备与HashSet类似的特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
常见命令:
1、SADD key member … :向set中添加一个或多个元素。
sadd user name sex age
复制代码
2、SREM key member … : 移除set中的指定元素。
SREM user sex
复制代码
3、SCARD key: 返回set中元素的个数。
SCARD user
复制代码
4、SISMEMBER key member:判断一个元素是否存在于set中。
SISMEMBER user name
复制代码
5、SMEMBERS:获取set中的所有元素
5.1、SINTER key1 key2 … :求key1与key2的交集。
SINTER user user2
复制代码
5.2、SDIFF key1 key2 … :求key1与key2的差集
SDIFF user user2
复制代码
5.3、SUNION key1 key2 ..:求key1和key2的并集
SUNION user user2
复制代码
5 SortedSet类型
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:
- 可排序
- 元素不重复
- 查询速度快
因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。
常见命令:
1、ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
ZADD student 100 jie 90 hong 80 ming
复制代码
2、ZREM key member:删除sorted set中的一个指定元素
ZREM student ming
复制代码
3、ZSCORE key member : 获取sorted set中的指定元素的score值
ZSCORE student jie
复制代码
4、ZRANK key member:获取sorted set 中的指定元素的排名
ZRANK student jie
复制代码
5、ZCARD key:获取sorted set中的元素个数
ZCARD student
复制代码
6、ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
ZCOUNT student 1 100
复制代码
7、ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
ZINCRBY student 1 hong
复制代码
8、ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
ZRANGE student 0 100
复制代码
9、ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
ZRANGEBYSCORE student 0 100
复制代码
10、ZDIFF、ZINTER、ZUNION:求差集、交集、并集
ZDIFF 2 student students
ZINTER 2 student students
ZUNION 2 student students
最后 set的补充
1.元素操作
–添加元素
SADD key element [element . . .] e.g. SADD setA 1 2 3
–移除元素
SREM key element [element . . .] e.g. srem setA 1 2
–检查给定元素是否存在于集合
SISMEMBER key element 存在返回1,不存在返回0; e.g. SISMEMBER setA 2
–返回集合的大小
SCARD key e.g. scard setA
–返回集合包含的所有元素 (如果集合的基数较大,执行该命令可能造成服务器阻塞,有更好的迭代集合中元素的方法)
smembers key e.g. smembers setA
–从集合里面随机弹出一个元素 弹出后从集合中移除了该元素
spop key e.g. spop setA
–从集合里面随机地返回元素 与spop不同,srandmember不会移除被返回的元素
srandmember key [count] e.g. srandmember setA 5
如果没有给定可选的count,那么命令随机地返回集合中的一个元素。
如果给定了count参数,那么:
当count为正数,且少于集合基数时。返回一个包含count个元素的数组,若count大于集合基数,则返回整个集合。
当count为负数,返回一个数组,数组中元素可能重复出现,且数组的长度为count的绝对值。
————————————————
SDIFF:差集;SINTER:交集;SUNION:并集
SADD setA 1 2 3
SADD setB 2 3 4
SADD setC 3 4 5
求集合A-B的差集
SDIFF setA setB =1
也可以操作多个集合
SDIFF setA setB setC =1
求集合A n B的交集
SINTER setA setB = 2 3
求集合A n B的并集
SUNION setA setB = 1 2 3 4
组合命令:sdiffstore sinterstore sunionstore 将返回的集合存储到key中
例如:将setA和setB的差集,保存在setx中 :sdiffstore setx setA setB