五种基本数据类型:
1. String
SET key value # 给key设置value值 GET key # 获取key的值 APPEND key # 追加字符串,如果当前key不存在,就相当于set key STRLEN key # 获取字符串的长度 INCR key # 自增1 INCRBY key increment # 自增,指定增量(设置步长) GETRANGE key start end # 截取字符串start到end SETRANGE key offset value # 替换指定位置开始的字符串 (offset:位置、value:替换的值) SETEX key seconds value # (set with expire)设置过期时间 SETNX key value #(set if not exist)不存在就set,存在不覆盖(再分布式锁中会经常用,例如乐观锁) # 批量设置key和批量获取key MSET key value [key value ...] MGET key [key ...] #如果不存在批量添加(注意:原子性操作!要么都添加成功,有一个存在失败,就都失败) MSETNX key value [key value ...] # 对象: set user:1 {name:gaolei,age:36} #设置一个user:1对象 值为json字符串来保存一个对象 # key的巧妙设计:user:{id}:{filed} GETSET key value #先获取,再设值
使用场景:
value可以是字符串、数字
· 计数器
· 统计多单位的数量 uid:用户id:follow 0
· 粉丝数
· 对象缓存存储
2. List(有序集合)
LPUSH key value [value ...] #将一个或者多个值,插入到列表的左边(头部) RPUSH key value [value ...] #将一个或者多个值,插入到列表的右边(尾部) LPOP key #弹出列表左边的值(和队列的用法一样) RPOP key #弹出列表右边的值(和队列的用法一样) LINDEX key index # 通过index下标获得key集合中的值 LLEN key #列表的长度 LREM key count value #移除key集合中指定个数的value(左边开始移除) LTRIM key start stop #通过下标截取指定的长度(截取完list就只剩下截取的部分了) RPOPLPUSH source destination #source集合中右弹出的值,左加入到destination集合中 LSET key index value #将可以更新到指定index下标,当前角标没值会报错(ERR index out of range) LINSERT key BEFORE|AFTER pivot value #将value插入到key集合中的 pivot值的前面或者后面
总结:
实际上是一个双向链表,既可以做队列(先进先出FIFO)又可以做栈(先进后出FILO)
3. set (无序不能重复的集合)
SADD key member [member ...] #在set集合中添加一个或者多个值 SREM key member [member ...] #删除set集合中的一个或多个元素 SPOP key #随机从set中弹出值(弹出的就不在集合中了) SRANDMEMBER key [count] #查看set中的所有值 SISMEMBER key member #判断memeber是否在set集合中 SCARD key #set中元素的个数 SRANDMEMBER key [count] # 在set集合中抽取随机数count个(count不填就是一个) SDIFF set [set2 ...] #差集:set与set2中的不同的元素 SINTER set [set2 ...] #交集:set与set2中相同的元素(共同好友就可以这样实现) SUNION set [set2 ...] #并集:set与set2中所有存在的元素
应用场景:
·用户的关注的人、粉丝都放到set中(不重复)
·用户A与B之间的共同关注的人、共同爱好、推荐好友
4. hash(key-map)
HSET key filed value #hash中插入一个或者多个filed-value HDEL key filed [filed ...] #删除hash中的一个或者多个 filed-value HMSET key field value [field value ...] #和HSET没有区别(As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。) HMGET key filed [filed ...] #获取hash中的一个或者多个filed对应的value HGETALL key #获取hash中全部元素(filed-value) HLEN key #显示hash中的字段数量 HKEYS key #获取hash中的所有filed HVALS key #获取hash中的所有value HEXISTS hash key #hash中的指定key是否存在 HSETNX key field value #如果不存在就添加field-value(存在就不添加) HINCRBY key field increment #hash中的field的value自增increment个数(负数就只自减)
应用场景:
hash适合做对象的存储。
例如:储存用户信息(姓名、年龄、性别等),经常变动的信息。
5. Zset(有序不能重复的集合)
ZADD key score member [score] [member] #添加一个或者多个值(数-成员)注意score是数,不是数不行。 ZREM key member [member ...] #移除集合中的成员 ZREMRANGEBYSCORE key min max #通过得分范围移除key中的成员 ZREMRANGEBYRANK key start stop #移除key集合排序后,排名start到stop的成员 ZREMRANGEBYLEX key min max #注意:专门给分数相同的用。排序方式是根据名称按字典由低到高排序。必须以“[”开头,或者以“(”开头,可使用“-+”代替 ZPOPMIN key [count] #不填count就是从key集合弹出1个最小值,count是弹出几个成员 ZPOPMAX key [count] #不填count就是从key集合弹出1个最大值,count是弹出几个成员 ZRANGE key start stop [WITHSCORES] #查看key中的所有(0 -1)成员【带着得分】 ZCARD key #获取集合中成员的个数 ZCOUNT key min max #获取指定区间的成员数量 ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] #从src集合的min到max 存储到dst集合中 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] #从最小大最大【-inf +inf】排序,按分数排序 #【WITHSCORE:并显示得分】 #【LIMIT offset count:排序后offset角标开始的位置,count角标结束的位置】
案例:set排序(不容许key重复的排序,通过id):班级成绩、工资、排行榜
三种特殊数据类型
1. geospatial(地址位置)
·经度和纬度的取值范围为[-180,180]和[-90,90]
GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...] # key地理集合添加一个或多个 经度 维度 成员 GEOPOS key member [member ...] #从key集合中获取成员的经纬度 GEODIST key member1 member2 [unit] #两个成员之间的距离【unit:单位】 # m 表示单位为米。 # km 表示单位为千米。 # mi 表示单位为英里。 # ft 表示单位为英尺。 GEORADIUS key longitude latitude DIST[unit] [WITHDIST][WITHCOORD] # 显示key集合中 以经度、纬度为中心 DIST距离的范围内的成员 【WITHDIST:显示距离】【WITHCOORD,显示所在位置(经纬度)】 GEORADIUSBYMEMBER key member DIST[unit] #显示key集合中 以成员为中心 DIST距离内的成员 GEOHASH key member [member ...] #给成员用hash编码
注意:GEO底层使用的是Zset,所以可以用Zset命令操作GEO(查看,删除...)
例案:朋友定位,附近的人,打车距离计算
2. hyperloglog(基数)
·基数:通俗讲就是不重复的元素的集合的大小
例如:A{1,3,5,7}
B{1,2,5,7}
那么基数就是{1,2.3,5,7} =5
·优点:占用的内存是固定的,只需要16KB内存
·缺点:0.81%的错误率
PFADD key value [value ...] # 添加key集合一个或多个 value元素 PFCOUNT key # key集合的元素数量 PFMERGE key DISTKEY1 DISTKEY2 #通过基数合并 DISTKEY1和DISTKEY2 成新的key集合
案例:统计UV任务(一个人访问同网页多次,统计算一次)
3. bitmaps(位图)
SETBIT key offset value #key集合给offset设置value(只有0和1) GETBIT key offset #获取key集合中 offset 的value