redis 用中文做key_【3y】从零单排学Redis【青铜】

本文介绍了Redis的基本概念,强调了使用Redis作为缓存的优势,并探讨了为什么要使用缓存。文章详细讲解了Redis的数据结构,包括SDS、链表、哈希表、跳跃表、整数集合和压缩列表,以及Redis对象系统的设计。通过对Redis数据结构的深入理解,读者可以更好地掌握如何选择合适的数据结构来存储数据。
摘要由CSDN通过智能技术生成

前言

只有光头才能变强

a3060b1d4a6b827266373331ba8a1fa6.png
redis

最近在学Redis,我相信只要是接触过Java开发的都会听过Redis这么一个技术。面试也是非常高频的一个知识点,之前一直都是处于了解阶段。秋招过后这段时间是没有什么压力的,所以打算系统学学Redis,这也算是我从零学习Redis的笔记吧。

本文力求讲清每个知识点,希望大家看完能有所收获。

一、介绍一下Redis

首先,肯定是去官网看看官方是怎么介绍Redis的啦。https://redis.io/topics/introduction

如果像我一样,英语可能不太好的,可能看不太懂。没事,咱们Chrome浏览器可以切换成中文的,中文是我们的母语,肯定没啥压力了。Eumm…

读完之后,发现中文也就那样了。

一大堆没见过的技术:lua(Lua脚本)、replication(复制)、Redis Sentinel(哨兵)、Redis Cluster(Redis 集群),当然我们也会有看得懂的技术:transactions(事务)、different levels of on-disk persistence(数据持久化)、LRU eviction(LRU淘汰机制)..

至少官方介绍Redis的第一句应该是可以很容易看懂:"Redis is an open source (BSD licensed),in-memory data structure store, used as a database,cache and message broker."

Redis是一个开源的,基于内存的数据结构存储,可用作于数据库、缓存、消息中间件。

  • 从官方的解释上,我们可以知道:Redis是基于内存,支持多种数据结构。

  • 从经验的角度上,我们可以知道:Redis常用作于缓存。

就我个人认为:学习一种新技术,先把握该技术整体的知识(思想),再扣细节,这样学习起来会比较轻松一些。所以我们先以“内存”、“数据结构”、“缓存”来对Redis入门。

1.1为什么要用Redis?

从上面可知:Redis是基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。

我们可以发现这不就是Java的Map容器所拥有的特性吗,那为什么还需要Redis呢?

  • Java实现的Map是本地缓存,如果有多台实例(机器)的话,每个实例都需要各自保存一份缓存,缓存不具有一致性

  • Redis实现的是分布式缓存,如果有多台实例(机器)的话,每个实例都共享一份缓存,缓存具有一致性

  • Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做于容器来存储临时数据,缓存的数据随着JVM销毁而结束。Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的。

  • Redis是专业做缓存的,可以用几十个G内存来做缓存。Redis一般用作于缓存,可以将缓存数据保存在硬盘中,Redis重启了后可以将其恢复。原生提供丰富的数据结构、缓存过期机制等等简单好用的功能。

参考资料:

  • 为什么要用redis而不用map做缓存?https://segmentfault.com/q/1010000009106416

1.2为什么要用缓存?

如果我们的网站出现了性能问题(访问时间慢),按经验来说,一般是由于数据库撑不住了。因为一般数据库的读写都是要经过磁盘的,而磁盘的速度可以说是相当慢的(相对内存来说)

  • 科普文:让 CPU 告诉你硬盘和网络到底有多慢https://zhuanlan.zhihu.com/p/24726196

0af34728523ab4706c18eab694d97d0c.png
数据库撑不住了

如果学过Mybaits、Hibernate的同学就可以知道,它们有一级缓存、二级缓存这样的功能(终究来说还是本地缓存)。目的就是为了:不用每次读取的时候,都要查一次数据库

有了缓存之后,我们的访问就变成这样了:

3a1d3f2a832b3dcfd025663ce3ae5e20.png
有了缓存提高了并发和性能

二、Redis的数据结构

本文不会讲述命令的使用方式,具体的如何使用可查询API。

  • Redis 命令参考:http://doc.redisfans.com/

  • try Redis(不用安装Redis即可体验Redis命令):http://try.redis.io/

Redis支持丰富的数据结构,常用的有string、list、hash、set、sortset这几种。学习这些数据结构是使用Redis的基础!

"Redis is written in ANSI C"-->Redis由C语言编写

首先还是得声明一下,Redis的存储是以key-value的形式的。Redis中的key一定是字符串,value可以是string、list、hash、set、sortset这几种常用的。

69e3ddda93877fd7abe7d89d8d060be8.png
redis数据结构

但要值得注意的是:Redis并没有直接使用这些数据结构来实现key-value数据库,而是基于这些数据结构创建了一个对象系统

  • 简单来说:Redis使用对象来表示数据库中的键和值。每次我们在Redis数据库中新创建一个键值对时,至少会创建出两个对象。一个是键对象,一个是值对象。

Redis中的每个对象都由一个redisObject结构来表示:

typedef struct redisObject{
    

    // 对象的类型
    unsigned type 4:;

    // 对象的编码格式
    unsigned encoding:4;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值