Redis的基本数据类型
1.String字符串
String的数据结构为简单的动态字符串,是可以修改的字符串,内部结构实现类似于java的ArrayList
,采用预分配冗余空间的方式来减少内存的频繁分配
常用命令:
1) set <key><value> 添加键值对
*nx:当数据库中key不存在时,可以将key-value添加到数据库中
*xx:当数据中key存在时,可以将key-value添加到数据库中与nx相互排斥
*ex:keyd的超时秒数(设置时,key已存在,会覆盖该key,超过所设置的秒数后值会自动消失)
*px:key的超时毫秒数,与ex互斥
2)get <key> 查询对应键值
3)append<key><value> 将给定的<value>追加到原值的末尾
4)strlen<key> 获得值的长度
5)incr<key> 将key中存储的数字值增加1
6)decr<key> 将key中的存储数字值减1
7)incrby/decrby <key> <number> 将key中存储的数字值增减。number可自定义
8)mset<key1><value1><key2><value2>.... 同时设置多个key-value对
9)mget<key1><key2><key3>.... 同时获取一个或多个value
10)msetnx<key1><value1><key2><value2>.... 同时设置多个key-value对(注意!!当所有给定的key都不存在时才OK)---->书写例子可参考mset与mget命令
11)getset<key><value> 以新换旧,设置新值的同时获得就值,但key中的旧值会被新值取代
2.列表 List(单键多值)
Redis列表是简单的字符串列表,按照插入顺序。可添加一个元素到列表的头部或尾部(左边或右边)
底层为双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会比较差
常用命令:
1)lpush/rpush <key><value1><value2><value3>.... 从左边/右边插入一个或多个值
2)lpop/rpop <key> 从左边/右边吐出一个值。(如果值全部都被吐出了,键也就不存在了)
3)rpoplpush<key1><key2> 从<key1>列表右边(尾部)吐出一个值,查到<key2>列表左边(头部)
4)lrange <key><start><stop> 按照索引下标获得元素(从左到右)
⭐小提示:0到-1意为全部长度
5)lindex<key><index>按照索引下标获得元素(从左到右)
6)llen<key>获得列表长度
7)linsert<key> before/after<value><newvalue> 在<value>的前面/后面插入<newvalue>插入值
8)lrem<key><n><value> 从左边删除n个value(从左到右)
⭐若value值在表中唯一(例如a11只有一个),则只会按照从左到右的顺序删除一个值为a11的值
9)lset<key><index><value>将列表key下标为index的值替换成value | [0,1,2,3,4,......]
3.集合Set
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,如果你需要存储一个列表数据且不希望出现重复数据时,set是一个很好的选择
常用命令:
1)sadd<key><value1><value2>.... 将一个或多个元素加入到集合key中,已存在的元素将被忽略
2)smembers<key>取出该集合的所有值
3)sismember<key><value>判断集合<key>是否含有该<value>值,有则返回1,无则返回0
4)scard<key>返回该集合的元素个数
5)srem<key><value1><value2>....删除集合中的某个元素
6)spop<key>随机从该集合中吐出一个值,会从集合中删除
7)srandmember<key><n>随机从该集合中取出n个值,不会从集合中删除
8)smove<source><destination>value把集合中的一个值从一个集合移动到另一个集合
9)sinter<key1><key2>返回两个集合的交集元素
10)sunion<key1><key2>返回两个集合的并集元素
11)sdiff<key1><key2>返回两个集合的差集元素
⭐差集元素(A中有的且不包含B中的)
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
2)hget <key1><field>从<key1>集合<field>中取出value
3)hmset <key1><field1><value1><field2><value2>....批量设置hash的值
4)hexists <key1><field> 查看哈希表key中,给定域field的值是否存在(存在返回1,不存在返回0)
5)hkeys<key> 列出该hash集合的所有field
6)hvals<key> 列出该hash集合的所有value
7)hincrby<key><field><increment>为哈希表 key 中的域field的值加上增量(增量可自己定义)
8)hsetnx<key><field><value>将哈希表key中的域field的值设置为value,当且仅当域field不存在(不存在返回1,存在返回0)
5.有序集合 zset(sorted set)
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
但与set的不同之处是有序集合的每个成员都关联了一个评分<score>属性,这个属性被用来按照从最低分到最高分的方式排序集合中的成员。集合成员是唯一的,但是评分可以是重复的
常用命令:
1)zadd <key1><score1><value1><score2><value2>....将一个或多个member元素及其score值加入到有序集key当中
2)zrange <key><start><stop>[withscores] 返回有有序集key中,下标在<start><stop>之间的元素,若带上withscores,可以让分数一起和值返回到结果集中
3)zrangebyscore <key> <min> <max> [withscores] [limit offset count]
返回有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。有序集成员按score值递增(从小到大)次序排列
⭐若是从大到小排序:则使用zrevrangebyscore <key> <max> <min> [withscores] [limit offset count]
4)zincrby<key><increment><value> 为元素的score加上增量
5)zrem<key><value>删除该集合下,指定值的元素
6)zcount<key><min><max>统计该集合,分数区间内的元素个数
7)zrank<key><value>返回该值在集合中的排名,从0开始
⭐因为从0开始排名,java排名为1,说明java是排在第二位的,第一位的c则排名为0
Redis6中的新增的数据类型:
1.Bitmaps
Bitmaps本身不是一种数据类型,它是字符串(key-value)但是它可以对字符传的位进行操作,
常用命令:
1)setbit<key><offset><value>设置Bitmaps中某个偏移量的值(0或1)
⭐offset偏移量从0开始
例
2)getbit<key><offset>获取这个key中某个偏移量的值
⭐当然,偏移量设置为0也可以
3)bitcount<start end> 统计字符串被设置位1的bit数量(它计算的是byte的位置)
⭐其中位0的bit数量为1,位1的bit数量为4(可从上面例子中观察得来)
⭐<start end>表示下标位
例如
4)bitop and(or/not/xor)<destkey> [key...]
and:交集 or:并集 not:非 xor:异或
首先,设置两个key,以及相应的偏移量
其中,画红线的地方就是他们的交集,运用bitop算出他们都多少个交集👇
其他逻辑关系使用形式同上
2.HyperLogLog
HyperLogLog主要解决数据中的基数问题(不重复的数)
常用命令:
1)pfadd<key><element>[element...] 添加指定元素到HyperLogLog中(可以加一个或多个)
2)pfcount<key> 统计key中的基数数量
3)pfmerge<destkey><sourcekey>[sourcekey...] 将key中的内容做合并
3.Geospatial
地理信息的缩写,该类型就是元素的二维坐标,在地图上的经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作
常用命令:
1)geoadd<key><loginitude><latitude><member>[longitude latitude member...]
添加地理位置(经度、纬度、名称)
2)geopos<key><member>[member...]获得指定地区的坐标值
3)geodist<key><member1><member2>[m(米)|km(千米)|ft(英里)|mi(英尺)] 获取两个位置之间的直线距离
4)georaduis<key><longitude><latitude>radius m|km|ft|mi 以给定的经纬度为中心,找出某一半径内的元素
以上便是我能整理出来的全部内容了,希望能对使用、学习redis的人有一点点帮助,如有不足,请大佬们补充、交流哦~~