当前位置: 首页 > news >正文

Redis基础入门

目录

目录

一、认识Redis

        Redis特征:

二、Redis数据结构介绍

三、Redis的命令

        1.Redis通用命令

        2.关于String类型的命令

        3.关于Hash类型的命令

        4.关于List类型的常用命令

        5.关于Set类型的常用命令

        6.关于SortSet类型的常用命令

四、Redis中的层级关系的key

五、Redis的使用场景


一、认识Redis

        Redis诞生于2009年,全称是Remote Dictonary Server,即远程词典服务器,是一个基于内存的键值型NoSQL数据库。

        Redis特征:

        ①.键值型,value支持多种不同数据结构,功能丰富。

        ②.单线程,每个命令具备原子性。

        ③.低延迟,速度快(基于内存、IO多路复用、良好的编码)

        ④.支持数据持久化。

        ⑤.支持主从集群、分片集群。

        ⑥.支持多语言客户端(Java、C++等)

        Redis是一个开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。

        内存的特点:易失性,断电就没了;速度快,内存的io读取速度比硬盘快;成本昂贵,因此,通常内存空间不大。

二、Redis数据结构介绍

        Redis是一种键值型数据库,key一般是字符串类型,而value可以是多种类型,类型多样。

        其中前五种是基本类型,后三种是特殊类型。

        Redis为了方便我们学习,将操作不同数据类型的命令进行了分组,在官网(https://redis.io/commands)中可以查看到不同的命令:

三、Redis的命令

        1.Redis通用命令

        通用命令是部分数据类型都可以使用的指令,常见的有:

  •  KEYS: 查看所有的key,不建议在生成环境中使用,因为效率低。
  •  DEL: 删除一个指定的key。
  •  EXISTS: 判断key是否存在。
  •  EXPIRE: 给一个key设置有效期,有效期到了,key就会被自动删除。
  •  TTL: 查看一个key的剩余有效期。

        通过help [command]可以查看一个命令的具体用法,例如:

        2.关于String类型的命令

        String类型,也就是字符串类型,是Redis中最简单的存储类型。

        其value是字符串,不过根据字符串的格式不同,又可以分为3类:

        关于String的常用命令如下:

        3.关于Hash类型的命令

        Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

        String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

KEYVALUE
project:user:pojo{name:"Jack",age:21}
project:project:pojo{name:"手机",age:1}

        Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

       Hash结构常用命令:

        4.关于List类型的常用命令

        Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
        特征也与LinkedList类似:
        ●有序
        ●元素可以重复
        ●插入和删除快
        ●查询速度一般
        常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

        List类型的常用命令:

        5.关于Set类型的常用命令

        Redis的Set结构与Java中的HashSet类似,可以看做是一个value为nul的HashMap。因为也是一个hash表,因此具备与Hashset类似的特征:
        无序
        元素不可重复
        查找快
        支持交集、并集、差集等功能

        set类型常用命令:

        6.关于SortSet类型的常用命令

        Redis的Sortedset是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。Sortedset具备下列特性:
        可排序
        元素不重复
        查询速度快
        因为Sortedset的可排序特性,经常被用来实现排行榜这样的功能,

        SortSet常用命令:

四、Redis中的层级关系的key

        Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
        例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,在Redis的同一个库下,如何区分这种不同类型的key呢?

        接下来,我们看一下key的结构。

        Redis的key允许有多个单词形成层级结构,多个单词之间用' : '隔开,格式如下:

                项目名:业务名:类型: id 

        这个格式并非固定,也可以根据自己的需求来删除或添加词条。
        例如我们的项目名称叫project,有user和product两种不同类型的数据,我们可以这样定义key: 
        ◆ user相关的key: project:user:1
        ◆product相关的key: project:product:1

        如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储。

        设置完以后,相当于目录结构一样:

五、Redis的使用场景

        1,在大型的秒杀库存扣减,app首页流量高峰,很容易将传统的关系型数据库(mysql,oracle等)给压垮

        2,还有很多没必要持久化的数据,比如说短信验证码,点赞数等

        3,分布式锁

        4,分布式缓存(session共享)

        5、当系统有性能瓶颈的时候,比如说表里面有2000万条数据,并且这个表访问量还非常大。增加redis缓存就是一个非常适合的场景。(redis的引入是为了减轻数据库的压力,防止大批量的大数据量查询将mysql压垮)

相关文章:

  • 【动态规划】45. 跳跃游戏 II
  • 数字创新的风口:创业者如何在Web3时代抢占先机
  • MySQL——事务
  • 铅酸蓄电池废水处理技术盘点
  • 重磅:2024广州国际酒店工程照明展览会
  • 鸿蒙 进程模型-公共事件
  • 设计模式——2_3 迭代器(Iterator)
  • 【JavaEE】_前端POST请求使用json向后端传参
  • 飞天使-学以致用-devops知识点3-安装jenkins
  • 中文版国产Figma简单好上手
  • 学术论文GPT的源码解读与二次开发:从ChatPaper到gpt_academic
  • CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)
  • FlyClient SPV client轻量化
  • 2403C++,C++20协程库
  • Vue router文件中本地路由配置使用i18n【解决tab名称出现undefined,导致i18n没有实现问题】
  • ----------
  • 《剑指offer》分解让复杂问题更简单
  • 「译」Node.js Streams 基础
  • 10个最佳ES6特性 ES7与ES8的特性
  • Golang-长连接-状态推送
  • javascript数组去重/查找/插入/删除
  • js中的正则表达式入门
  • Service Worker
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 将回调地狱按在地上摩擦的Promise
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 积累各种好的链接
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #Linux(权限管理)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (52)只出现一次的数字III
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Java数据结构)ArrayList
  • (TOJ2804)Even? Odd?
  • (八)Spring源码解析:Spring MVC
  • (分类)KNN算法- 参数调优
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)JPA - JQPL 实现增删改查
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)mysql使用Navicat 导出和导入数据库
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (状压dp)uva 10817 Headmaster's Headache
  • .net分布式压力测试工具(Beetle.DT)
  • .NET关于 跳过SSL中遇到的问题
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .Net中的集合
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [] 与 [[]], -gt 与 > 的比较
  • [<死锁专题>]
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [ActionScript][AS3]小小笔记
  • [AIGC] Spring Interceptor 拦截器详解
  • [Asp.net mvc]国际化
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)