常用五大数据类型
- string、list、hash、set、sorted set
五大数据类型-String
- sting 是redis最基本的类型
- 是二进制安全的,即redis的string可以包含任何数据。如图片或者序列化的对象。
- 单个string类型的value大小限制为512M
- 常用操作
set key val
:redis的insert操作。key存在时,值会被覆盖get key
:redis的select操作del key
:redis的删除操作append key abc
:将abc追加到原字符串后面,形成新的字符串。key不存在时会执行insert操作strlen key
:查看当前key字符串长度。一个汉字占3个字符
incr key
:值加一。(要求字符串为数字)decr key
:值减一。(要求字符串为数字)incrby key 3
:值加3decrby key 3
:值减3getrange key 0 3
:得到字符串的前4
个字符。(注意redis中是前后都取)setrange key 0 abc
:字符串部分替换。本例:从下标0开始,使用abc替换原字符串中对应位置的字符串。如果原字符串为123456,执行后为,abc456setex key 10 val
:设置一个生命周期为10秒
的kv对setnx key val
:如果key不存在,执行insert操作。否则,不执行任何操作mset k1 v1 k2 v2 k3 v3
:同时设置多个kv对。 (key已存在,值会被覆盖)mget k1 k2 k3
:同时获取多个值msetnx k1 v1 k2 v2 k3 v3
:当k1,k2,k3都不存在时才执行insert操作。否则,不执行任何操作
五大数据类型-hash
- 是一个键值对集合,类似java里的Map
- 是一个string类型的key和value的映射表。即,value是一个键值对,其key为String类型
- 适合存储对象。类似java中Map<String, Object>
- 常用操作
hset user id 123 name ysl
:新建一个hash,key:user,value包含id、name,值分别为123、yslhget user id
:获取user中id的值hmset user id 123 name ysl age 23
:新建一个hash,key:user,value包含id、name、age,值分别为123、ysl、23hmget user id name age
:批量获取值hgetall user
:获取user中所有的k-v对hdel user age
:删除user中age键值对hlen user
:user中包含的k-v对的个数hexists user email
:user中是否包含email这个keyhkeys user
:user中所有的key。(id、name、age)hvals user
:user中所有的value。(123、ysl、23)hincrby user age 2
:user中age对应的值+2hincrbyfloat user score 1.5
:user中score对应的值+1.5hsetnx user age 3
:user中不存在age时,执行插入操作
五大数据类型-list
- 一个字符串列表,按照插入顺序排序,可以在列表首尾添加元素
- 底层是一个链表。(操作链表首位效率高,中间低)
- 值全部移除,对应的列表也就没有了
- 常用操作
lpush list01 1 2 3 4 5
:创建list01,并插入值。(正进反出)lrange list01 0 -1
:从0(起始)到-1(结束位置),查看列表中元素。结果为:5 4 3 2 1
rpush list02 1 2 3 4 5
:创建list01,并插入值。(正进正出)。此时lrange list02 0 -1, 结果为:1 2 3 4 5
lpop list01
:取列表顶部第一个元素。(list01得到5,list02得到1)rpop list01
:取列表底部第一个元素。(list01得到1,list02得到5)lindex list01 2
:取列表下标为2的元素llen list01
:列表长度lrem list01 N val
:删除N个Valueltrim list01 start end
:截取下标从start到end的值,重新赋值给list01rpoplpush list01 list02
:将list01的底部元素移动到list02的顶部。(只移动一个)lset list01 idx value
:修改列表指定下标的值为valuelinsert list01 before/after val1 val2
:在值为val1之前/之后插入val2
五大数据类型-set
- set是string类型的元素集合,无序无重复,通过HashTable实现
- 常用操作
sadd set01 1 1 2 2 3 3
:向集合set01(没有会创建)中添加1 2 3smembers set01
:查看集合中的元素sismember set01 1
:值1是否在集合set01中scard set01
:获取集合中元素个数srem set01 val1
:删除集合中指定元素srandmember key N
:从集合中,随机取N个元素spop set01
:随机取一个元素smove set01 set02 val1
:将set01中的val1移动到set02中sdiff set01 set02 set03
:求集合的差集。得到的数据是:在第一个set中,不在后面任何一个set中的元素项sinter set01 set02 set03
:求集合交集。得到的数据:所有集合中都有的元素项sunion set01 set02
:求集合并集。得到的数据:所有集中元素项去重后的结果
五大数据类型-sorted set (zset)
-
与set一样是string类型元素集合,有序无重复
-
每个元素都关联一个double类型的分数(score),redis正是通过分数来为集合中的成员进行从小到大的排序, set的 成员是唯一的,但分数却可以重复
可以理解为,key与set中一样,只不过 value 变成了 score与数据值
-
常用操作
zadd zset01 60 val1 70 val2 80 val3
:新建一个zset。key:zset01,value:60 val1、70 val2…zrange zset01 0 -1
:获取zset01中所有的值zrange zset01 0 -1 withscores
:获取zset01中所有值,及其对应的分数zrangebyscore zset01 60 (80
:获取score从60到80之间的数据(包含60不包含80),并按照score排序zrangebyscore zset01 60 80 limit 2 3
:获取score从60到80之间数据,并按照score排序。再取结果中下标为2到5(2+3)的数据项作为最终的结果zrem zset01 val1
:删除zset01下值为val1的项zcard zset01
:统计zset01中元素个数zcount zset01 60 80
:统计score从60到80之间的元素个数zrank zset01 val1
:获取val1对应的下标zscore zset01 val1
:获取val1对应的scorezrevrank key val1
:逆序获取val1的下标zrevrange zset01 0 -1
:逆序获取集合zrevrangebyscore zset01 80 60
:获取zset01中结束score到开始score的元素项
说明:redis5.x新增了Stream流数据类型