您的位置:首页 > 数据库 > Redis

redis个人总结--基本

2020-07-13 05:26 197 查看

1.redis 是一个使用C语言编写的存储键值对的非关系型数据库 因为数据保存在内存中 所以具有快速读写的特性 一般用于缓存每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

2.redis的优点
具有高速的读写 读最高可以达到的速度是110000次/s,写的速度是81000次/s。
redis的支持存储的类型有五种String hash set zset list
redis支持数据持久化 分别为rdb aof方式
Redis支持主从复制 可以吧主库数据复制到从库实现 读写分离
支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行

缺点
redis因为是在内存上面操作数据的所以 不能够支持较大的数据读写操作 一般应用于缓存上面
redis服务器如果宕机前 主机数据如果没有同步到从机上面的话就会照成数据不一致的问题
redis不支持容错性 如果主从宕机后 前端请求就会出现报错 直到服务重启

3.redis具有高性能高并发 因为传统的请求数据在硬盘上面大量的io 会导致性能降低 所以使用redis 把第一次请求的数据
存储在内存上面 下次请求的时候直接请求内存上面的缓存数据 更加的快速 在高并发场景时候 直接操作缓存能够承受的请求是远远大于直接访问数据库的

4.redis 之所以高效
redis是单线程的执行模式 这样的话就不会出现上下文的切换浪费资源和时间 不会出现请求锁 释放锁 死锁的情况
redis存储是基于内存的 所有操作都在内存上面 相当的快速 时间复杂度相当于O(1)
redis是专为数据结构设计的 数据结构简单 数据操作也简单

5.redis应用场景
作为计数器 可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。可以用于幂等常见的校验
会话缓存 可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。
string——适合最简单的k-v存储,短信验证码,配置信息等,就用这种类型来存储
后续场景待补充。。。。

6.redis的持久化
分为AOF和RDB(默认)两种模式 可在配置中设置
RDB redis database 缩写快照
作用是吧一定时间内存中的数据以快照的形式 保存到硬盘里面 形成一个dump.rdb文件 通过设置配置文件的save属性来设置那个一定时间
优点:
只会产生一个dunp.rdb文件 当文件数据量大的时候 在进行服务重启导入数据的效率更好 在进行数据存储的时候会fork一个子进程 那么主进程还是执行数据操作 不执行相关的IO操作不影响性能 子进程进行内存数据的保存
缺点:
RDB这种方式存在 在一段时间内 如果这个时间中redis如过出现宕机的情况那么这段时间的数据就会丢失

AOF Append only file 会把redis每次写操作保存 记录到单独的日志文件里面
优点:
数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次。
通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。
缺点:
AOF 文件比 RDB 文件大,且恢复速度慢。
数据集大的时候,比 rdb 启动效率低。

两种优缺点:
AOF比RDB更新数据频繁
AOF比RDB方式文件更大 也更安全
RDB比AOF性能更好
如果两种都使用时优先加载AOF

7.redis持久化数据以及扩容
后续。。。

8.对于redis过期key处理
三种方式
定时过期:每个设置过期时间的键都会 创建一个定时器 在一定时间后会清除这些过期的key 但是如果大量key过期就会照成 cpu消耗大量的资源去处理过期的key 但是对内存友好释放大量空间
惰性过期:当使用到这个key的时候才回去查看过期时间 那么如果大量的key没有被访问那么就不会去清除这些key 照成内存的消耗
定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)

9.redis内存使用完后出现什么
如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以配置内存淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容

10.redis怎么内存存储优化
可以好好利用Hash,list,sorted set,set等集合类型数据,因为通常情况下很多小的Key-Value可以用更紧凑的方式存放到一起。尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面

11.redis事物
事务开始 MULTI
命令入队
事务执行 EXEC

事务执行过程中,如果服务端收到有EXEC、DISCARD、WATCH、MULTI之外的请求,将会把请求放入队列中排队

redis 不支持回滚,“Redis 在事务失败时不进行回滚,而是继续执行余下的命令”, 所以 Redis 的内部可以保持简单且快速。
如果在一个事务中的命令出现错误,那么所有的命令都不会执行;
如果在一个事务中出现运行错误,那么正确的命令会被执行。

12.redis事务隔离性
Redis 是单进程程序,并且它保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令为止。因此,Redis 的事务是总是带有隔离性的。

13.Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: