Redis的基本数据类型

1.String字符串

String的数据结构为简单的动态字符串,是可以修改的字符串,内部结构实现类似于java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配

常用命令: 

1) set <key><value> 添加键值对

 

增加Redis内存 redis增加数据_字符串

*nx:当数据库中key不存在时,可以将key-value添加到数据库中

*xx:当数据中key存在时,可以将key-value添加到数据库中与nx相互排斥

*ex:keyd的超时秒数(设置时,key已存在,会覆盖该key,超过所设置的秒数后值会自动消失)

增加Redis内存 redis增加数据_redis_02

*px:key的超时毫秒数,与ex互斥

2)get <key> 查询对应键值

增加Redis内存 redis增加数据_字符串_03

 

3)append<key><value> 将给定的<value>追加到原值的末尾 

 

增加Redis内存 redis增加数据_常用命令_04

 4)strlen<key> 获得值的长度  

 

增加Redis内存 redis增加数据_redis_05

5)incr<key> 将key中存储的数字值增加1

增加Redis内存 redis增加数据_字符串_06

6)decr<key> 将key中的存储数字值减1

增加Redis内存 redis增加数据_字符串_07

7)incrby/decrby <key> <number> 将key中存储的数字值增减。number可自定义

增加Redis内存 redis增加数据_增加Redis内存_08

8)mset<key1><value1><key2><value2>.... 同时设置多个key-value对

增加Redis内存 redis增加数据_增加Redis内存_09

9)mget<key1><key2><key3>.... 同时获取一个或多个value

增加Redis内存 redis增加数据_增加Redis内存_10

10)msetnx<key1><value1><key2><value2>.... 同时设置多个key-value对(注意!!当所有给定的key都不存在时才OK)---->书写例子可参考mset与mget命令

 

11)getset<key><value> 以新换旧,设置新值的同时获得就值,但key中的旧值会被新值取代

增加Redis内存 redis增加数据_常用命令_11

2.列表 List(单键多值)

Redis列表是简单的字符串列表,按照插入顺序。可添加一个元素到列表的头部或尾部(左边或右边)

底层为双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会比较差

常用命令:

1)lpush/rpush <key><value1><value2><value3>.... 从左边/右边插入一个或多个值

增加Redis内存 redis增加数据_java_12

 

2)lpop/rpop <key> 从左边/右边吐出一个值。(如果值全部都被吐出了,键也就不存在了)

增加Redis内存 redis增加数据_java_13

3)rpoplpush<key1><key2> 从<key1>列表右边(尾部)吐出一个值,查到<key2>列表左边(头部)

增加Redis内存 redis增加数据_增加Redis内存_14

 

4)lrange <key><start><stop> 按照索引下标获得元素(从左到右)

⭐小提示:0到-1意为全部长度

增加Redis内存 redis增加数据_字符串_15

 

5)lindex<key><index>按照索引下标获得元素(从左到右)

增加Redis内存 redis增加数据_redis_16

6)llen<key>获得列表长度

增加Redis内存 redis增加数据_增加Redis内存_17

7)linsert<key> before/after<value><newvalue> 在<value>的前面/后面插入<newvalue>插入值

增加Redis内存 redis增加数据_java_18

 

 

8)lrem<key><n><value> 从左边删除n个value(从左到右)

⭐若value值在表中唯一(例如a11只有一个),则只会按照从左到右的顺序删除一个值为a11的值

增加Redis内存 redis增加数据_增加Redis内存_19

 

9)lset<key><index><value>将列表key下标为index的值替换成value | [0,1,2,3,4,......]

增加Redis内存 redis增加数据_redis_20

 

3.集合Set

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,如果你需要存储一个列表数据且不希望出现重复数据时,set是一个很好的选择

常用命令:

1)sadd<key><value1><value2>.... 将一个或多个元素加入到集合key中,已存在的元素将被忽略

增加Redis内存 redis增加数据_字符串_21

 

2)smembers<key>取出该集合的所有值

增加Redis内存 redis增加数据_常用命令_22

 

3)sismember<key><value>判断集合<key>是否含有该<value>值,有则返回1,无则返回0

增加Redis内存 redis增加数据_字符串_23

 

4)scard<key>返回该集合的元素个数

增加Redis内存 redis增加数据_常用命令_24

 

5)srem<key><value1><value2>....删除集合中的某个元素

增加Redis内存 redis增加数据_java_25

 

6)spop<key>随机从该集合中吐出一个值,会从集合中删除

增加Redis内存 redis增加数据_java_26

 

7)srandmember<key><n>随机从该集合中取出n个值,不会从集合中删除

增加Redis内存 redis增加数据_字符串_27

 

 

8)smove<source><destination>value把集合中的一个值从一个集合移动到另一个集合

增加Redis内存 redis增加数据_字符串_28

 

 

9)sinter<key1><key2>返回两个集合的交集元素

增加Redis内存 redis增加数据_常用命令_29

 

10)sunion<key1><key2>返回两个集合的并集元素

增加Redis内存 redis增加数据_字符串_30

 

11)sdiff<key1><key2>返回两个集合的差集元素

⭐差集元素(A中有的且不包含B中的)

增加Redis内存 redis增加数据_字符串_31

 

4.哈希Hash

Redis hash是一个键值对集合,是一个String类型的field和value的映射表。类似于java里面的Map<String Object>

常用命令:

1)hset <key><field><value>给<key>集合中的<field>键赋值<value>

⭐其中,user:1001为key,id为field,value为001

增加Redis内存 redis增加数据_常用命令_32

 

2)hget <key1><field>从<key1>集合<field>中取出value 

 

增加Redis内存 redis增加数据_redis_33

3)hmset <key1><field1><value1><field2><value2>....批量设置hash的值

增加Redis内存 redis增加数据_常用命令_34

4)hexists <key1><field> 查看哈希表key中,给定域field的值是否存在(存在返回1,不存在返回0)

增加Redis内存 redis增加数据_字符串_35

 

 

5)hkeys<key> 列出该hash集合的所有field

增加Redis内存 redis增加数据_redis_36

 

6)hvals<key> 列出该hash集合的所有value

增加Redis内存 redis增加数据_字符串_37

 

7)hincrby<key><field><increment>为哈希表 key 中的域field的值加上增量(增量可自己定义)

增加Redis内存 redis增加数据_redis_38

 

8)hsetnx<key><field><value>将哈希表key中的域field的值设置为value,当且仅当域field不存在(不存在返回1,存在返回0)

增加Redis内存 redis增加数据_常用命令_39

 

5.有序集合 zset(sorted set)

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

但与set的不同之处是有序集合的每个成员都关联了一个评分<score>属性,这个属性被用来按照从最低分到最高分的方式排序集合中的成员。集合成员是唯一的,但是评分可以是重复的

常用命令:

1)zadd <key1><score1><value1><score2><value2>....将一个或多个member元素及其score值加入到有序集key当中

增加Redis内存 redis增加数据_常用命令_40

 

2)zrange <key><start><stop>[withscores] 返回有有序集key中,下标在<start><stop>之间的元素,若带上withscores,可以让分数一起和值返回到结果集中

增加Redis内存 redis增加数据_增加Redis内存_41

 

3)zrangebyscore <key> <min> <max> [withscores] [limit offset count]

返回有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。有序集成员按score值递增(从小到大)次序排列

增加Redis内存 redis增加数据_常用命令_42

⭐若是从大到小排序:则使用zrevrangebyscore <key> <max> <min> [withscores] [limit offset count]

增加Redis内存 redis增加数据_字符串_43

 

4)zincrby<key><increment><value> 为元素的score加上增量

增加Redis内存 redis增加数据_常用命令_44

 

 

 

5)zrem<key><value>删除该集合下,指定值的元素

增加Redis内存 redis增加数据_增加Redis内存_45

 

6)zcount<key><min><max>统计该集合,分数区间内的元素个数

增加Redis内存 redis增加数据_常用命令_46

 

7)zrank<key><value>返回该值在集合中的排名,从0开始

⭐因为从0开始排名,java排名为1,说明java是排在第二位的,第一位的c则排名为0

增加Redis内存 redis增加数据_字符串_47

 

Redis6中的新增的数据类型:

1.Bitmaps

Bitmaps本身不是一种数据类型,它是字符串(key-value)但是它可以对字符传的位进行操作,

常用命令:

1)setbit<key><offset><value>设置Bitmaps中某个偏移量的值(0或1)

⭐offset偏移量从0开始

 

增加Redis内存 redis增加数据_增加Redis内存_48

增加Redis内存 redis增加数据_java_49

 

2)getbit<key><offset>获取这个key中某个偏移量的值

⭐当然,偏移量设置为0也可以

增加Redis内存 redis增加数据_增加Redis内存_50

 

 3)bitcount<start end> 统计字符串被设置位1的bit数量(它计算的是byte的位置)

⭐其中位0的bit数量为1,位1的bit数量为4(可从上面例子中观察得来)

增加Redis内存 redis增加数据_redis_51

 

⭐<start end>表示下标位

例如

增加Redis内存 redis增加数据_redis_52

 

4)bitop and(or/not/xor)<destkey> [key...]

and:交集 or:并集 not:非 xor:异或

首先,设置两个key,以及相应的偏移量

增加Redis内存 redis增加数据_redis_53

其中,画红线的地方就是他们的交集,运用bitop算出他们都多少个交集👇

增加Redis内存 redis增加数据_增加Redis内存_54

其他逻辑关系使用形式同上

2.HyperLogLog

HyperLogLog主要解决数据中的基数问题(不重复的数)

常用命令:

1)pfadd<key><element>[element...] 添加指定元素到HyperLogLog中(可以加一个或多个)

增加Redis内存 redis增加数据_java_55

 

2)pfcount<key> 统计key中的基数数量

增加Redis内存 redis增加数据_字符串_56

 

3)pfmerge<destkey><sourcekey>[sourcekey...] 将key中的内容做合并

增加Redis内存 redis增加数据_增加Redis内存_57

 

3.Geospatial

地理信息的缩写,该类型就是元素的二维坐标,在地图上的经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作

常用命令:

1)geoadd<key><loginitude><latitude><member>[longitude latitude member...]

添加地理位置(经度、纬度、名称)

增加Redis内存 redis增加数据_字符串_58

 

2)geopos<key><member>[member...]获得指定地区的坐标值

增加Redis内存 redis增加数据_字符串_59

 

3)geodist<key><member1><member2>[m(米)|km(千米)|ft(英里)|mi(英尺)] 获取两个位置之间的直线距离

增加Redis内存 redis增加数据_常用命令_60

 

4)georaduis<key><longitude><latitude>radius m|km|ft|mi 以给定的经纬度为中心,找出某一半径内的元素

增加Redis内存 redis增加数据_java_61

以上便是我能整理出来的全部内容了,希望能对使用、学习redis的人有一点点帮助,如有不足,请大佬们补充、交流哦~~