知识点05:Redis的数据结构及数据类型
- 目标:掌握Redis的数据结构及数据类型
- 路径
- step1:数据结构
- step2:数据类型
- 实施
- 数据结构:整个Reids中**所有数据以KV结构形式**存在
- K:作为唯一标识符,唯一标识一条数据,固定为String类型,写入时指定KV,读取时,根据K读取V
- V:真正存储的数据,可以有多种类型
- String、Hash、List、Set、Zset、BitMap、HypeLogLog
- 理解Redis:类似于Java中的一个Map集合,可以存储多个KV,根据K获取V
- 每一种类型的应用场景和命令都是不一样的
Key:String | Value类型 | Value值 | 应用场景 |
pv_20200101 | String | 10000 | 一般用于存储单个数据指标的结果 |
person001 | Hash | name:laoer age : 20 sex female | 用于存储整个对象所有属性值 |
uv | List | {100,200,300,100,600} | 有序允许重复的集合,每天获取最后一个值 |
uv_20200101 | Set | {userid1,userid2,userid3,userid4……} | 无序且不重复的集合,直接通过长度得到UV |
top10_product | ZSet【score,element】 | {10000-牙膏,9999-玩具,9998-电视……} | 有序不可重复的集合,统计TopN |
user_filter | BitMap | {0101010101010000000011010} | 将一个字符串构建位,通过0和1来标记每一位 |
product_20200101 | HypeLogLog | {productid1,id2……} | 类似于Set集合,底层实现原理不一样,数据量大的情况下,性能会更好,结果可能存在一定的误差 |
- String类型
- KV:【String,String】,类似于Java中Map集合的一条KV
- Hash类型
- KV:【String,Map集合】:Map集合的嵌套,Map集合中的元素是无序的
- List类型
- KV:【String,List】:有序且可重复
- Set类型
- KV:【String,Set】:无序且不重复
- Zset类型
- KV:【String,TreeMap集合】:Value也类似于Map集合,有序的Map集合
- 类似于List和Set集合特点的合并:有序且不可重复
- 小结
- Redis中的数据是什么结构以及有哪些类型?
- 数据结构:KV
- K:String:唯一标识一条数据,用于获取Value
- V:多种类型:存储的数据
- Value的数据类型
- String:Java字符串
- 【String,String】:一般用于存储单个指标的结果
- Hash:Java Map集合 / Python 中Dic
- 【String,Map【k1v1,k2v2……】】
- List:Java List集合:有序且可重复
- 【String,List[1,2,3,4,5,6,6,7]】
- Set:Java Set集合:无序且不可重复
- 【String,Set[1,2,3,4,5]】
- Zset:有序且不可重复
- 【String,TreeMap【k1v1,k2v2 => 按照k排序】】
- k:score:评分,默认按照评分对元素进行排序
- v:元素,不能重复
知识点06:Redis的通用命令
- 目标:掌握Redis常用的通用命令
- 实施
- keys:列举当前数据库中所有Key
- 语法:keys 通配符
- del key:删除某个KV
- exists key :判断某个Key是否存在
- type key:判断这个K对应的V的类型的
- expire K 过期时间:设置某个K的过期时间,一旦到达过期时间,这个K会被自动删除
- ttl K:查看某个K剩余的存活时间
- select N:切换数据库的
- Redis默认由16个数据:db0 ~ db15,个数可以通过配置文件修改,名称不能改
- Redis是一层数据存储结构:所有KV直接存储在数据库中
- 默认进入db0
- move key N:将某个Key移动到某个数据库中
- flushdb:清空当前数据库的所有Key
- flushall:清空所有数据库的所有Key
node1:6379> keys * 1) "s1" node1:6379> get s1 "hadoop" node1:6379> set s2 hive OK node1:6379> get s2 "hive" node1:6379> node1:6379> keys * 1) "s1" 2) "s2" node1:6379> set a1 spark OK node1:6379> keys * 1) "a1" 2) "s1" 3) "s2" node1:6379> keys a* 1) "a1" node1:6379> keys s* 1) "s1" 2) "s2" node1:6379> del s1 (integer) 1 node1:6379> keys * 1) "a1" 2) "s2" node1:6379> exists s2 (integer) 1 node1:6379> exists s1 (integer) 0 node1:6379> node1:6379> hset m1 name zhangsan (integer) 1 node1:6379> hset m1 age 18 (integer) 1 node1:6379> keys * 1) "m1" 2) "a1" 3) "s2" node1:6379> type m1 hash node1:6379> type s2 string node1:6379> node1:6379> expire a1 20 (integer) 1 node1:6379> ttl a1 (integer) 17 node1:6379> ttl a1 (integer) 16 node1:6379> ttl a1 (integer) 15 node1:6379> ttl a1 (integer) 14 node1:6379> ttl a1 (integer) 13 node1:6379> ttl a1 (integer) 12 node1:6379> ttl a1 (integer) 11 node1:6379> ttl a1 (integer) 10 node1:6379> ttl a1 (integer) 9 node1:6379> keys * 1) "m1" 2) "s2" node1:6379> node1:6379> select 1 OK node1:6379[1]> select 10 OK node1:6379[10]> select 0 OK node1:6379> select 1 OK node1:6379[1]> keys * (empty list or set) node1:6379[1]> set s1 hue OK node1:6379[1]> keys * 1) "s1" node1:6379[1]> select 0 OK node1:6379> node1:6379> keys * 1) "m1" 2) "s2" node1:6379> move m1 1 (integer) 1 node1:6379> keys * 1) "s2" node1:6379> select 1 OK node1:6379[1]> keys * 1) "m1" 2) "s1" node1:6379[1]> flushdb OK node1:6379[1]> keys * (empty list or set) node1:6379[1]> select 0 OK node1:6379> keys * 1) "s2" node1:6379> flushall OK node1:6379> keys * (empty list or set) node1:6379>
- 小结
- 掌握Redis常用的通用命令