一、排序redis 支持对 list,set 和 zset 元素的排序,排序的时间复杂度是 O(N+M*log(M))。(N 是集合大小,M 为返回元素的数量)sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination][BY pat
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
112阅读
介绍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
139阅读
什么时候需要进行需要原子操作?很常见的例子,就是利用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
146阅读
背景一直都知道redis里可以执行lua脚本,但是以前一直搞不懂redis为啥要这么搞,今天看了人家一篇博文,说秒杀场景出现商品超卖,解决方案是利用lua脚本来保证操作的原子性自己也小试了一把程序,确实通过lua能保证操作的原子性,直接上代码。 准备:    将num键的值设置为1测试,10个请求10个并发   ab.exe -c10 -n10 h
转载 2023-06-28 16:16:33
88阅读
在使用Redis缓存的业务场景的时候, 经常会有这样的需求, 需求要求递减一个变量, 如果递减后变量小于等于0, 然后返回一个标志, 如果成功, 则返回剩余值。实现中需要注意服务器端的多线程问题以及客户端的多线程问题。服务器端可以利用服务器单线程执行LUA脚本来保证,或者通过WATCH, EXEC, DISCARD, EXEC来保证。客户端我们我们保证一个jedis客户端同时之分配给一个线程,
转载 2023-07-21 17:41:32
0阅读
1 缘起做项目时用到Redis中的String类型, 东一下,西一下,虽然关于String类型数据的操作基本都涉及了, 但是不够系统,非常散, 为帮助开始学习Redis的开发者系统学习Redis String类型操作, 以及备忘,特汇总整理成文, 分享如下。 当然为了丰富文章内容,贴了一些源码的片段。为帮助读者更加系统地学习Redis基础数据操作, 注意:(1)文末附全部测试代码; (2)本篇文章
转载 2023-08-21 17:53:09
158阅读
redis是单线程的,所以在redis中所有命令都是原子操作。而当要多条redis命令同时执行而不被打断时,则需要使用redis的事务了。 redis中的事务是用以下4个命令来实现的:MULTIEXECDISCARDWATCHMULTI命令 用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行,而是被放到一个队列中,当 EXEC命令
转载 2023-09-02 10:07:50
26阅读
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点互斥性,同一时刻,只能有一个客户端持有锁。防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁
Pipeline1. Pipeline概念Redis客户端执行一条命令分为以下四个步骤:1.发送命令2.命令排队3.命令执行4.返回结果其中,第一步+第四步称为Round Trip Time(RTT,往返时间).    Redis提供了批量操作命令(例如mget,mset等),有效的节约RTT.但大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有mhgeta
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
185阅读
我们在使用 Redis 时,不可避免地会遇到并发访问的问题,比如说如果多个用户同时下单,就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作,数据就会被修改,如果我们没有对并发写请求做好控制,就可能导致数据被改错,影响到业务的正常使用(例如库存数据错误,导致下单异常)。为了保证并发访问的正确性,Redis 提供了两种方法,分别是加锁和原子操作。加锁是一种常用的方法,在读取数据前,客户
引言Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。简介Redis的优点性能极高 – Redis能支持超过 100K+ 每秒的读写频率。丰富的数据类型 – Redis支持二进制案例的
一、pipeline出现的背景:redis客户端执行一条命令分4个过程:发送命令-〉命令排队-〉命令执行-〉返回结果这个过程称为Round trip time(简称RTT, 往返时间),mget mset有效节约了RTT,但大部分命令(如hgetall,并没有mhgetall)不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个问题二、pepeline的性能1、未使用pip
转载 2023-07-13 10:24:26
170阅读
1. Redis 核心数据结构与高性能原理1.1 Redis 核心数据结构Redis 的核心数据结构主要由:string、list、hash、set、zset、bitmap1.1.1 string常用操作: set:存入字符串键值对 get:获取字符串键值对 del:删除字符串键值 mset:批量存储字符串键值对 mget:批量获取字符串键值对 expire:设置一个键的过期时间 incr:将 k
为什么Redis的操作是原子性的,怎么保证原子性的?对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。 Redis的操作之所以是原子性的,是因为Redis是单线程的。 Redis本身提供的所有API都是原子操作,Redis中的事务其实是要保证批量操作的原子性。Redis过期键删除策略被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过
转载 2023-08-09 21:44:01
95阅读
基于redis 实现的分布式锁
工作中我们经常利用redis来实现限速, 比如限制一个手机号60秒最多发送3条短信.如果不考虑原子性, 伪代码如下:long count = incr('手机号') ; if count==1  expire('手机号',60) ; if count>3   return "发送频率超限" ; 上面代码在执行时, 前后可能调用r
转载 2023-05-29 10:22:33
707阅读
Redis允许用户在服务器上上传并执行 Lua 脚本,也就是说Redis支持我们使用Lua编写一些简单的逻辑,当做一个自定义的命令,在单次操作中来执行,这在很多场景中都很有用,比如redisson分布式锁,滑动窗口限流等。现在就以简单例子上手来看看java编程怎么使用lua脚本实现redis原子操作。一个简单的lua脚本原生命令先来看一个使用redis-cli命令行执行的命令,这个lua脚本仅仅是
  • 1
  • 2
  • 3
  • 4
  • 5