基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,倚天版 1GB 1个月
简介: 基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令

知识点05: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常用的通用命令


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
1天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
1天前
|
NoSQL 安全 Java
nicelock--一个注解即可使用Redis分布式锁!
Nicelock的引入为分布式系统中的资源同步访问提供了一个简单高效和可靠的解决方案。通过注解的方式,简化了锁的实现和使用,使开发人员可以将更多精力专注于业务逻辑的实现,而不是锁的管理。此外,Nicelock在保持简单易用的同时,也提供了足够的灵活性和可靠性,满足了不同应用场景下对分布式锁的需求。
7 1
|
18天前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
73 10
|
20天前
|
NoSQL 算法 Java
(十三)全面理解并发编程之分布式架构下Redis、ZK分布式锁的前世今生
本文探讨了从单体架构下的锁机制到分布式架构下的线程安全问题,并详细分析了分布式锁的实现原理和过程。
|
4天前
|
NoSQL Java Redis
Redis字符串数据类型之INCR命令,通常用于统计网站访问量,文章访问量,实现分布式锁
这篇文章详细解释了Redis的INCR命令,它用于将键的值增加1,通常用于统计网站访问量、文章访问量,以及实现分布式锁,同时提供了Java代码示例和分布式锁的实现思路。
12 0
|
7天前
|
NoSQL Redis
Redis——设置最大内存 | key淘汰机制
Redis——设置最大内存 | key淘汰机制
19 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
20 0
|
1天前
|
SQL 存储 关系型数据库
数据库-MySQL-01(一)
数据库-MySQL-01(一)
12 4
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。