分布式应用进行逻辑处理时经常会遇到并发问题。比如一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修 改,改完了再存回去。如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状 态这两个操作不是原子的。(Wiki 解释:所谓原子操作是指不会被线程调度机制打断的操 作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch 线程切换。)
转载
2023-09-17 18:22:58
78阅读
作者:杨一迪,腾讯云数据库后台开发工程师,主要负责云数据库postgresql、云数据库CynosDB等产品的后台开发工作。前言最开始了解mysql实现的时候,总听到redo log, WAL(write-ahead logging),undo log这些关键词,了解到redo log主要是用于实现事务的持久化的。为了进一步了解redo log,看了下相关代码(源码版本: mysql 8.0.12
转载
2024-01-22 11:13:13
80阅读
1. Redis 核心数据结构与高性能原理1.1 Redis 核心数据结构Redis 的核心数据结构主要由:string、list、hash、set、zset、bitmap1.1.1 string常用操作: set:存入字符串键值对 get:获取字符串键值对 del:删除字符串键值 mset:批量存储字符串键值对 mget:批量获取字符串键值对 expire:设置一个键的过期时间 incr:将 k
转载
2023-07-26 16:20:31
649阅读
文章目录Redis 的实现原则1、常用五大数据类型 - 底层结构解析1.1 String 类型1.1.1 原子性1.2 List 类型 - 单键多值1.3 Set 类型 - 集合1.4 Hash 类型 - 哈希1.5 Zset 类型1.5.1 跳跃表(跳表)2、Redis 的发布和订阅2.1.什么是发布和订阅2.2.Redis的发布和订阅2.3.发布订阅命令行实现 Redis 的实现原则单线程+
转载
2023-08-15 18:26:04
185阅读
我们在项目中经常会用到nosql来储存访问率高的数据,大多数就是用redis,凭借着比mysql高得多的qps支持数,这样做确实能提高处理速度。那么,redis就只能用来做数据存储查询吗?当然不是!redis还有很多功能等待使用。 一、原子性:&nbs
转载
2023-07-16 22:19:37
167阅读
Redis原子性原理摘要:1、Redis是单进程单线程的网络模型,用的是epoll网络模型,网络模型都是单线程异步非阻塞处理网络请求2、Redis的单线程处理所有的客户端连接请求,命令读写请求。(有些任务比如rdb和aof等操作是fork子进程处理的,不会影响redis主线程处理客户端的命令)3、Redis提供的所有API操作,相对于服务端方面都是one by one执行的,命令是一个接着一个执行
转载
2023-10-18 14:54:41
9阅读
1 Redis简介 Redis 是完全开源免费的、遵守BSD协议的高性能数据库。Redis支持String,list,set,zset,hash等数据结构的key-value存储。它支持数据的持久化,支持master-slave模式的数据备份,支持事务。 Redis 优势: (1)性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 (2)丰富的数据类型 – Re
转载
2023-08-01 17:27:31
128阅读
原子性原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis操作原子性的原因Redis的操作之所以是原子性的,是因为Redis是单线程的。由于对操作系统相关的知识不是很熟悉,从上面这句话并
转载
2023-07-16 22:17:07
179阅读
一、Redis 的 五大数据类型1、key指令描述keys *查看当前库的所有键exists<key>判断某个键是否存在type<key>查看键的类型del<key>删除某个键expire<key><seconds>为键设置过期的时间,单位秒ttl<key>查看还有多久过期,-1 表示永不过期,-2表示已过期dbsize查看当
转载
2023-07-26 16:15:49
544阅读
redis是单线程的,所以在redis中所有命令都是原子操作。而当要多条redis命令同时执行而不被打断时,则需要使用redis的事务了。 redis中的事务是用以下4个命令来实现的:MULTIEXECDISCARDWATCHMULTI命令 用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行,而是被放到一个队列中,当 EXEC命令
转载
2023-09-02 10:07:50
29阅读
文章有点长并且绕,先来个图片缓冲下!
前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。
说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢?
实现要点互斥性,同一时刻,只能有一个客户端持有锁。防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁
转载
2023-12-02 15:38:42
22阅读
在使用Redis缓存的业务场景的时候, 经常会有这样的需求, 需求要求递减一个变量, 如果递减后变量小于等于0, 然后返回一个标志, 如果成功, 则返回剩余值。实现中需要注意服务器端的多线程问题以及客户端的多线程问题。服务器端可以利用服务器单线程执行LUA脚本来保证,或者通过WATCH, EXEC, DISCARD, EXEC来保证。客户端我们我们保证一个jedis客户端同时之分配给一个线程,
转载
2023-07-21 17:41:32
0阅读
什么时候需要进行需要原子操作?很常见的例子,就是利用Redis实现分布式锁。实现锁需要哪些条件?我们知道要实现锁,就需要一个改变锁状态的方法。这个方法能原子地对锁的状态进行检查并修改。如果修改成功,则意味着获得了锁。对于硬件,它提供的就是test-and-set,compare-and-swap等原语。Redis有没有提供类似的原语呢?有的。Redis有提供setnx(),它会提供这样的原子操作:
转载
2023-06-14 22:08:55
199阅读
原子性原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis操作原子性的原因Redis的操作之所以是原子性的,是因为Redis是单线程的。由于对操作系统相关的知识不是很熟悉,从上面这句话并
转载
2023-07-08 23:49:05
153阅读
背景一直都知道redis里可以执行lua脚本,但是以前一直搞不懂redis为啥要这么搞,今天看了人家一篇博文,说秒杀场景出现商品超卖,解决方案是利用lua脚本来保证操作的原子性自己也小试了一把程序,确实通过lua能保证操作的原子性,直接上代码。 准备: 将num键的值设置为1测试,10个请求10个并发 ab.exe -c10 -n10 h
转载
2023-06-28 16:16:33
115阅读
1 缘起做项目时用到Redis中的String类型, 东一下,西一下,虽然关于String类型数据的操作基本都涉及了, 但是不够系统,非常散, 为帮助开始学习Redis的开发者系统学习Redis String类型操作, 以及备忘,特汇总整理成文, 分享如下。 当然为了丰富文章内容,贴了一些源码的片段。为帮助读者更加系统地学习Redis基础数据操作, 注意:(1)文末附全部测试代码; (2)本篇文章
转载
2023-08-21 17:53:09
158阅读
介绍Redis的全称是Remote Dictonary Server(远程字典服务器),一个高性能key-value存储系统,Redis有如下优点: 1. 高性能 - Redis能支持超过100K+每秒的读写频率 2. 丰富的数据类型 - Redis支持Strings、Lists、Hashes、Sets及Ordered Sets等数据类型 3. 原子性 - Redis的所有操作都是原子性的,同时R
转载
2023-08-06 16:55:59
142阅读
首先呢,先介绍一下“原子性”在数据库和并发编程中的概念。 在数据库中事务的ACID中原子性指的是“要么都成功要么都失败”,而在并发编程中的原子性指的是“操作不可拆分、不被中断“。 Redis既是一个数据库,又是一个支持并发编程的系统,所以
转载
2023-07-16 22:17:40
146阅读
Redis优势1.性能极高:由于数据是存储在内存中(Redis读的速度是110000次/s,写的速度是81000次/s) 2.丰富的数据类型:Redis支持的类型String、Hash、List、Set及Ordered Set等数据类型的操作 3.原子性:Redis所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXE
转载
2023-05-29 15:22:05
193阅读
引言Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。简介Redis的优点性能极高 – Redis能支持超过 100K+ 每秒的读写频率。丰富的数据类型 – Redis支持二进制案例的
转载
2023-11-03 11:02:48
62阅读