【redis】8数据结构(5种基本+3种特殊)

五种基本数据类型:

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

案例:活跃程度(签到)、打卡

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值