redis 五种常用的数据类型 以及 三种特殊数据类型

1、String

字符串

结构:key: value

用途:

1、缓存用户数据:用户tocken

2、计数功能:使用 incr 等命令

3、共享session:适用于分布式系统,单点登录

4、限速:用户频繁发送请求,对该用户进行限速 (涉及命令 set  nx ex)

 

常用命令:

# 设置一个键的值 
SET k v

# 如果 k 存在,不操作,如果不存在,则存入 v2 -- 用于分布式锁
setnx k v2

set k v xx # 必须k存在,才能存放成功

# 获取一个建的值 
GET k

# 删除键对 
DEL k

# 将value解析为整形同时 + 1
incr value

# 将value解析为整形同时 + n
incrby key n

# 同时添加了多个
mset k1 v1 k2 v2

# 同时获取多个 
mget k1 k2

# 设置key的过期时间
set k v ex 5 # 秒
set k v px 5 # 毫秒

 

2、Hash

hash表

结构:key / key :value 、 key :value、key :value ...

用途:

存放结构化对象:存放用户数据信心,以 cookie 为key,用户信息作为value

时间复杂度:o(1)

 

常用命令:

# 添加数据
hset k k1 v1 

# 不存在的情况下设置 k 的 k1 设置为 v1
hsetnx k k1 v1

# 同时设置多个 k1 k2 
hmset k k1 v1 k2 v2

# 获取 k1 的value
hget k k1

# 获取 k1 k2 的value
hmget k k1 k2

# 给k1+1
hincrby k k1 5

# 测试 k1 是否存在
hexists k k1

# 返回 key 的数量
hlen k

# 删除指定 k1
hdel k k1

# 返回所有的 key
hkeys k 

# 返回所有val
hvals k 

# 返回所有的 ey 和 value
hgetall k

 

3、List

数组

结构:key :value、value、value ...

特点:一个 key 里边可以存多个 value 的数据类型,有序的

用途:

可以通过它实现多种数据结构:

1、lpush + lpop = stack (栈)

2、lpush + rpop = Queue (队列)

3、lpush + itrim = Capped Collection (有限集合)

4、lpush + brpop = Message Queue (消息队列)

 

常用命令:

# 左插入
lpush mylist a b c 

# 右插入
rpush mylist x y z  
    
# 弹出元素
lpop mylist  
    
# 弹出元素
rpop mylist 

# 显示数据集合
lrange mylist 0 -1 
   
# 显示长度  
llen mylist  

#删除
lrem mylist count value 

# 显示指定索引的值
lindex mylist 2          

# 索引设值,n为值
lset mylist 2 n         
    
# 剪切key对应的链接,切[start, stop]一段并把改制重新赋给key
ltrim mylist 0 4         
    
# 在a前边插入b
linsert mylist before a b 
   
# 在a后边插入b
linsert mylist after a   
    
# 转移列表的数据
rpoplpush list list2    

 

4、Set

集合

结构:key:value、value、value ...

特点:无序、确定、随机

用途:

给用户添加标签,涉及命令:sadd、sinter

 

常用命令:

# 添加元素
sadd k1 v1 v2

# 获取集合所有元素
smembers k1

# 删除某个元素
srem k1 v1

# 返回并删除集合中的随机一个元素
spop k1

# 随机抽一个元素
srandmember k1

# 判断是否包含这个元素
sismemeber k1 v1

# 返回集合元素的个数
scard k1

# 集合复制
smove source dest value

# 求 k1 k2 k3 的交集
sinter k1 k2 k3

# 求 k1 k2 的并集
sunion k1 k2

# 求 k1 k2 的差集
sdiff k1 k2

# 求 k1 k2 的交集并存到res中
sinterstore res k1 k2

 

5、ZSet

数据形式:key:value、value、value ...

有序集合,顾名思义,有顺序的集合,主要体现在它有一个特定的值来标识。

用途:

1、用户积分排行榜

2、记录用户获赞数,对用户根据赞数进行管理

 

常用命令:

# 添加成员
# score:分数(排分依据)
# value:内容
zadd key score value1 score value2 score value3

# 获取成员的个数
zcard key

# 获取成员的分数
zscore key value

# 获取成员的排名
# zrank:从低到高
# zrevank:从高到底
zrank key value
zrevrank key value

# 删除成员
zrem key value

# 获取指定排名范围的成员
zrange key start end [withscores]
zrange key start end [withscores]

# 返回指定分数范围成员
zrangebyscore key min max [withscores] [limit offset count]

 

6、BitMap

它是通过一个bit位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身,实际上底层也是通过对字符串的操作来实现

用途:记录用户的在线状态

# 设置在线状态
setBit online 0 1;

# 设置离线状态
setBit online 0 0;

# 获取状态
getBit online 0;

# 获取在线人数
bitCount online;
 

 

常用命令:

setbit key offset value
# offset必须是数字,value 是 0 或 1

# 例子

setbit k 0 1
setbit k 2 1
setbit k 5 1

# 此时 下表为0、2、5的值就是1,剩下全是零 (默认就是0),如下图

redis 五种常用的数据类型 以及 三种特殊数据类型_第1张图片

 

 

7、Geo

这个数据类型是3.2出的新类型,用于存储地址位置信息,并对这些信息进行操作

常用命令:

# 将给定的空间元素(纬度、经度、名字)添加到指定的键里面 
geoadd

# 从键里面返回所有给定位置元素的位置(经度和纬度)
geopos

# 返回两个给定位置之间的距离
geodist

# 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
georadius

georadiusbymember

geohash

 

8、HyperLogLog

基数统计

用途:

1、注册Ip数

2、每日访问IP数

3、页面实时UV

4、在线用户数

这个结构可以非常省内存的去统计各种计数,比如 :

局限性:只能统计数量,不能知道具体内容

 

命令实例:

PFADD databases "redis" "MongoDB" "MySQL"

PFADD databases "redis" # 不能重复添加

# 统计有多少个数
PFCOUNT databases



PFADD nosql "Redis" "MongoDB" "Memcached"

PFADD RDBMS "MySQL" "MSSQL" "PostgreSQL"
 
# 对nosql和rdbms进行并集,同时去重复
PFMERGE databases nosql RDBMS
 
PFCOUNT databases

 

简单总结,如有不足,欢迎指出!感觉不错的话,欢迎点赞或是评论!

 

你可能感兴趣的:(#,redis)