Syong : Redis(初识篇)

Redis

What
Redis:Remote Dictionary Service(远程字典服务)

Redis官网

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型,类似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构存储服务务器。

Redis的特点(个人总结):
a. 以key-value存储的数据库结构型服务器;
b. 存储的value支持多种类型,主要有string,list,set,hash等等;
c. 支持持久化;
d. 支持主从复制,读写分离;

Scene
注意到官网描述中的一句话:

used as a database, cache and message broker.

a. database:也就是说,Redis可以作为noSQL数据库去使用,区别于传统的RDMS;
b. cache:由于Redis高性能读写的特性,所以大部分应用场景是作为缓存去使用;
c. message broker:可以使用发布订阅者模式;

Next
需要了解的一个概念:

RESP:Redis Serialization Protocol(Redis通信协议:Redis序列化协议)

这个协议是Redis客户端与服务端通信的协议,个人理解,就是一套请求命令与响应数据的序列化规则详情

RESP传输的最小单元类型

  1. 单行字符串: 以 + 符号开头
  2. 多行字符串 以 $ 符号开头,后跟字符串长度
  3. 整数值 以 : 符号开头,后跟整数的字符串形式
  4. 错误消息 以 - 符号开头
  5. 数组 以 * 号开头,后跟数组的长度

AND
Redis持久化

持久化是指把内存中的数据存储到硬盘中,有效避免进程退除造成的数据丢失。

Redis持久化有两种方式:
1.RDB持久化:Redis DataBase:在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储 ,整个Redis数据库只包含一个文件;
2.AOF持久化:Append-only file:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集,但是实现比较复杂,容易出BUG;

两种方式的区别

IMPORTANCE
在缓存集群(cluster)中,两个重要的概念:一致性Hash算法 & 哈希槽,篇幅太长,自行百度。

Q & A
Question缓存穿透
Description:一般查询缓存都是用key去命中缓存,当命中不到的时候,就会去查数据库,那么就存在这么一种情况,有一些恶意查询专门大量查询一些不存在的key(数据库也不查询不到所以无法缓存),造成数据库压力过大。
Answer
1.对查询为空的数据进行缓存,设置比较合理的缓存时间;
2.对查询为空的数据进行缓存,当对应key insert数据之后,清理缓存;
3.对于一定不存在的key进行过滤,可以把这些key放到一个map里面,查询时过滤一遍。

Question缓存击穿
Description: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力;
Answer
1.热点key设置永不过期;
2.加互斥锁,限制同一个key的多条线程中的一个线程去访问数据库更新缓存,其他key走缓存;

Question缓存雪崩
Description:缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
Answer
1.不同的key设置不同的过期时间;
2.热点key设置永不过期;
3.做二级缓存
4.通过加锁的方式,控制访问数据库的流量

详情

END
结束语:优秀是一种习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值