
Redis
三郎君
写文章勤分享:巩固自己,帮助他人,何乐而不为!
展开
-
Redis事务详细介绍
Redis事务详细介绍 Redis事务功能是通过MULTI、EXEC、DISCARD和WATCH 四个原语实现的 Redis会将一个事务中的所有命令序列化,然后按顺序执行。 1.redis 不支持回滚“Redis 在事务失败时不进行回滚,而是继续执行余下的命令”, 所以 Redis 的内部可以保持简单且快速。 2.如果在一个事务中的命令出现错误,那么所有的命令都不会执行 3.如果在一个事务中出现运行错误,那么正确的命令会被执行。 1)MULTI命令用于开启一个事务,它总是返回OK。 MULTI执行之后,客户原创 2020-12-14 11:03:30 · 143 阅读 · 0 评论 -
为什么Redis的操作是原子性的,怎么保证原子性的?
为什么Redis的操作是原子性的,怎么保证原子性的? 对于Redis而言,命令的原子性指的是: 一个操作的不可以再分,操作要么执行,要么不执行。 Redis的操作之所以是原子性的,是因为Redis是单线程的。 Redis本身提供的所有API都是原子操作, Redis中的事务其实是要保证批量操作的原子性。 多个命令在并发中也是原子性的吗? 不一定, 将get和set改成单命令操作,incr 。 使用Redis的事务,或者使用Redis+Lua==的方式实现 ...原创 2020-12-14 10:58:46 · 5503 阅读 · 0 评论 -
Redis 常见性能问题和解决方案?
Redis 常见性能问题和解决方案? (1) Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件 (2) 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次 (3) 为了主从复制的速度和连接的稳定性, Master 和 Slave 最好在同一个局域网内 (4) 尽量避免在压力很大的主库上增加从库 (5) 主从复制不要用图状结构,用单向链表结构更为稳定, 即: Master <- Slave1 <- Slave2 <-Slav原创 2020-12-14 10:55:46 · 365 阅读 · 0 评论 -
Redis 为什么是单线程的?
Redis 为什么是单线程的? 官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈, Redis的瓶颈最有可能是机器内存的大小或者网络带宽。 既然单线程容易实现,而且CPU不会成为瓶颈, 那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!) Redis利用队列技术将并发访问变为串行访问 1)绝大部分请求是纯粹的内存操作(非常快速) 2)采用单线程,避免了不必要的上下文切换和竞争条件 3)非阻塞IO优点: 速度快,因为数据存在内存中,类似于HashMap, HashMap的原创 2020-12-14 10:52:19 · 247 阅读 · 0 评论 -
redis的过期策略以及内存淘汰机制
redis的过期策略以及内存淘汰机制 redis采用的是定期删除+惰性删除策略。 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除。 虽然内存及时释放,但是十分消耗CPU资源。 在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略. 定期删除+惰性删除是如何工作的呢? 定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。 需要说明的是,redis不是每个100ms将所有的key检查一次, 而是随机抽取进行检查 (原创 2020-12-14 10:44:04 · 114 阅读 · 0 评论 -
Redis持久化机制
Redis持久化机制 Redis是一个支持持久化的内存数据库, 通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。 当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。 **实现:**单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中, 然后由子进程写入到临时文件中,持久化的过程结束了, 再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。 RDB是Redis默认的持久化方式。 按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制原创 2020-12-12 10:35:08 · 92 阅读 · 0 评论