Redis笔记

本文探讨了Redis和MySQL在内存存储、查询性能、数据结构及应用场景方面的对比,强调了Redis作为内存数据库在高并发、快速读写和缓存增强等方面的优势,同时提到了它们各自的适用场景和数据结构特点。
摘要由CSDN通过智能技术生成

1 redis与mysql

1.1 使用场景

Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine.

这句话是我们从redis的官网找到的,翻译过来就是:

Redis是一个开源(BSD许可)的内存中数据结构存储,用作数据库、缓存、消息代理和流媒体引擎

redis是数据库,mysql也是数据库,什么时候该用redis,什么时候用mysql?

  1. 首先redis是存储在内存中的,学过计算机组成原理的我们都知道内存的读写性能是很快的,而mysql是存储在磁中的,磁盘的读写性能有很慢。所以当需要短时间内大量的读操作时,redis其读写速度非常快,可以用作缓存数据,提高系统的性能。例如不同网站的首页时访问次数一定最多的,所以首页的数据一般存储在redis中。
  2. 如果存在不需要持久化的数据时可以选择使用redis,比如点赞数、验证码。
  3. redis做缓存,Redis用来提高其他访问较慢的数据库(如MySQL)的读取速度。由于Redis数据存储在内存中,访问速度非常快,可以达到毫秒级的延迟。并且Redis的所有操作都是原子的,因此也可以用作分布式锁等需求。

也就是当存在数据量大、查询频繁时,数据库有压力的时候使用redis做缓存可以减轻数据库的压力。

1.1.1 内存与磁盘的区别

内存
磁盘
数据易失性易失性:断电后数据会丢失非易失性:断电后数据依然保存
读写速度非常快,远高于硬盘相对较慢
存储容量相对较小,价格较高大,价格对于其存储容量来说较便宜
存储形式临时存储数据,主要用于执行程序时长期存储数据,保存文件与程序

1.2 查询的底层逻辑

  1. MySQL使用B+树作为其主要的索引结构,MySQL接收到SQL查询请求时,会先对SQL语句进行词法和语法解析,检查语句的语法是否正确,生成一个解析树,通过查询优化选择成本最低的执行计划,然后按选定的路径访问表和索引,检索出结果集。
  2. redis是一个键值对数据库,查询操作主要通过key去查找value。由于所有数据都存储在内存中,因此Redis能够提供极快的查询速度。

2 redis的数据结构及其应用场景

redis的存储是以key-value的键值对的形式存储的,其中key都是String类型,value则是有很多种的,例如:String,Map,list,set等类型。

2.1 String

字符串类型,可以包含任何数据,最大能存储512MB

常见指令

set name zhansan   --存放字符串键值对
mset name lisi age 18 --批量存放键值对
get name   -- 获取key
mget name age  --批量获取key
DEL key -- 删除key
expire key 60 --设置过期时间,单位为秒
INCR key -- 将key中存储的数字加1
DECR key -- 将key中存储的数字减1

![[Pasted image 20240306101544.png]]

![[Pasted image 20240306101723.png]]

![[Pasted image 20240306101705.png]]

应用场景

  1. 将网页、图片、文档等内容作为字符串值缓存,以提高系统的响应速度。
  2. Redis提供了INCR, DECR等原子操作命令,所以String可以被用作计数器,如网站访问量等。

2.2 Hash

即是一个键值对集合,是一个string类型的field和value的映射表,其值的存储结构跟Java的HashMap类似。

常见指令

hset hash name zhencong --设置值,
hget hash name  -- 获取值
hmset hash name zhencong age 18 --批量设置
hmget hash name age --批量获取
hgetall hash 获取key的所有值
hkeys hash 获取hashmap中所有的key
hvals hash 获取hashmap中所有的value

应用场景

  1. 可以用于存储系统中对象的数据。
  2. 也可以用于做缓存,来解决数据一致性的问题(不推荐)。

2.3 List

即是简单的字符串列表,按插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

常见指令

rpush myList valu5e1 --向 list 的头部(右边)添加元素
rpush myList value2 value3 --向list的头部(最右边)添加多个元素
lpop myList # 将 list的尾部(最左边)元素取出
rpop myList2 value1 --尾插

实现栈(LIFO):
![[Pasted image 20240306102143.png]]

应用场景

  1. 可以实现栈和队列。
  2. 可以作为一个简单的消息队列来使用。

2.4 Set

是字符串的无序集合。添加、删除、查找的复杂度都是O(1)。

常见指令

sadd key n1 [n2] 向集合添加一个或多个成员。
scard key 获取集合的成员数
sunion key1 [key2] 返回所有给定集合的并集。
sdiff key1 [key2] 返回给定所有集合的差集。
sinter key1 [key2] 返回给定所有集合的交集。
sismember key n 判断n元素是否是集合key的成员
smembers key 返回集合中的所有成员

应用场景

  1. 可以用来计算多个数据源的交集,差集,并集等操作。比如两个用户的共同好友,某用户喜欢的图书类型,相同的地方等等。
  2. 可以实现统计网页访客数量,IP去重等功能。

2.5 Sorted Set

或者叫做有序集合,是通过哈希表实现的,但它增加了一个顺序属性,这使得我们可以实现一些有特殊排序需求的功
能。

应用场景

实时排行

2.6 其他结构

  1. 位图(Bitmaps),实际上就是特殊的字符串,主要是通过指定偏移量来对字符串的位进行操作。
  2. HyperLogLogs,它是用来做基数统计的,这个数据结构虽然功能强大,但是并不常用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值