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),如下图
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
简单总结,如有不足,欢迎指出!感觉不错的话,欢迎点赞或是评论!