redis
文章平均质量分 75
redis使用
INGNIGHT
这个作者很懒,什么都没留下…
展开
-
Redis 持久化
Redis 持久化Redis 提供了不同级别的持久化方式:RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大. 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式. 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候转载 2020-10-14 11:04:17 · 78 阅读 · 0 评论 -
Redis的AOF的配置
Redis的AOF持久化以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),Aof保存的是appendonly.aof文件,只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。Redis的AOF的配置1. 找到redis.conf 开启AOF# Please check http://redis.io/topics/persistence fo转载 2020-10-13 20:47:46 · 1850 阅读 · 0 评论 -
9-16 原生命令和redis-trib.rb对比
原创 2020-10-11 13:34:14 · 92 阅读 · 0 评论 -
10深入Redis Cluster2
原创 2020-10-11 13:42:45 · 91 阅读 · 0 评论 -
10深入Redis Cluster
客户端需要通知所有redis cluster节点,forget原创 2020-10-10 22:09:37 · 99 阅读 · 0 评论 -
高性能缓存架构
虽然我们可以通过各种手段来提升存储系统的性能,但在某些复杂的业务场景下,单纯依靠存储系统的性能提升不够的,典型的场景有:需要经过复杂运算后得出的数据,存储系统无能为力例如,一个论坛需要在首页展示当前有多少用户同时在线,如果使用 MySQL 来存储当前用户状态,则每次获取这个总数都要“count(*)”大量数据,这样的操作无论怎么优化 MySQL,性能都不会太高。如果要实时展示用户同时在线数,则 MySQL 性能无法支撑。读多写少的数据,存储系统有心无力绝大部分在线业务都是读多写少。例如,微博、淘转载 2020-05-21 11:42:06 · 155 阅读 · 0 评论 -
缓存更新的套路
转载:https://coolshell.cn/articles/17416.html#comments看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻辑,转载 2020-07-24 16:19:55 · 173 阅读 · 0 评论 -
基于redis的微博个人首页
基于redis的微博个人首页微博个人首页业务场景分析微博个人首页的redis技术方案用户发的文章是hash存储,key为postId用户的关注的人set存储,fowlee用户的被关注的人set存储,follower我的主页是一个list,userId 后面是postId关注的页面是一个list,userId后面是关注人之前发过的postId用户发了文章,首先将文章以hash方式存储在缓存存储被关注人的set存储到自己的个人主页,list postId找到自己被关注的人,将被关注人的li原创 2020-07-01 17:52:23 · 228 阅读 · 0 评论 -
基于Redis的微博计算好友关系
基于Redis的微博计算好友关系一、计算好友关系业务场景分析微博微关系:共同关注:是计算出阿甘和雷军共同关注的人有哪些?我关注的人也关注他:是计算出我阿甘关注的人群中,有哪些人同时和我一样关注了雷军二、计算好友关系的redis技术方案思考题:如果是采用数据库来实现用户的关系,一般SQL怎么写? 例如 阿甘关注10个人,雷军关注100个人,让你计算2人的共同关注那些人?SQL的写法,一般是采用in 或 not in 来实现。但是对于互联网高并发的系统来说,in not in 明显不适合。一般原创 2020-07-01 16:19:51 · 463 阅读 · 1 评论 -
基于Redis的微博关注与粉丝
基于Redis的微博关注与粉丝一、微博关注与粉丝的业务场景分析阿甘关注了雷军:阿甘就是雷军的粉丝follower雷军被阿甘关注:雷军就是阿甘的关注followee二、微博关注与粉丝的redis技术方案技术方案:每个用户都有2个集合:关注集合和粉丝集合例如 阿甘关注了雷军,做了2个动作1.把阿甘的userid加入雷军的粉丝follower集合set2.把雷军的userid加入阿甘的关注followee集合set集合key设计阿甘的关注集合 key=followee:阿甘userid雷军的原创 2020-07-01 16:08:44 · 849 阅读 · 3 评论 -
基于Redis的用户发微博
基于Redis的用户发微博一、用户发微博业务场景分析二、用户发微博的redis技术方案三、SpringBoot+Redis 实现用户发微博步骤1:创建content表CREATE TABLE `content` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) NOT NULL DEFAULT '0' COMMENT '用户id', `content` varchar(5000) NOT NULL DE原创 2020-06-29 11:56:36 · 146 阅读 · 0 评论 -
基于Redis的微博的注册
# 基于Redis的微博的注册Redis在互联网公司中是必选的技术,因为互联网公司的系统天生就是高并发特征。但是能把redis运用的最好的就属微博了。 Redis技术基本覆盖了微博的每个应用场景,比如像现在春晚必争的“红包飞”活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到 Redis。 正因为Redis的广泛应用,使得微博能够快速支撑日活跃用户超2亿,每日访问量百亿级,历史数据高达千亿级。 微博线上规模,100T+ 存储,1000+ 台物...原创 2020-06-29 11:33:54 · 191 阅读 · 0 评论 -
剖析SpringSession的redis原理
八、剖析SpringSession的redis原理步骤1:分析SpringSession的redis数据结构127.0.0.1:6379> keys *1) "spring:session:expirations:1578227700000"2) "spring:session:sessions:5eddb9a3-5b1e-4bdd-a289-394b6d42388e"3) "spring:session:sessions:expires:5eddb9a3-5b1e-4bdd-a289-39原创 2020-06-29 10:53:59 · 1027 阅读 · 0 评论 -
SpringSession+redis解决分布式session不一致性问题
七、案例实战:SpringSession+redis解决分布式session不一致性问题步骤1:加入SpringSession、redis的依赖包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE<原创 2020-06-25 19:07:38 · 1793 阅读 · 0 评论 -
采用docker安装部署Nginx
四、采用docker安装部署Nginx在主机192.168.1.138下,安装nginx,docker 的安装命令如下:docker run \-d \-p 8080:80 \--name session-nginx \nginx-d:在后台运行-p:容器的80端口映射到物理机的8080端口–name:容器的名字为session-nginx关于为什么要用docker安装?因为用docker安装非常方便,docker安装1分钟不到就安装完,如果用传统安装,会各自安装包原创 2020-06-25 17:42:13 · 394 阅读 · 0 评论 -
redis解决了分布式系统的session一致性问题
redis解决了分布式系统的session一致性问题一、Session有什么作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据,那么服务器会创建一个新的sessionid并且响应给客户端。二、分布式session有什么问题?原创 2020-06-25 17:14:04 · 635 阅读 · 1 评论 -
SpringBoot+Redis+Cookies实现高并发的购物车
案例实战:SpringBoot+Redis+Cookies实现高并发的购物车步骤1:代码逻辑 /** * 添加购物车 */ @PostMapping(value = "/addCart") public void addCart(CookieCart obj) { String cartId=this.getCookiesCartId(); String key=COOKIE_KEY+cartId; Boolean原创 2020-06-25 15:41:40 · 810 阅读 · 0 评论 -
京东双11购物车
京东双11购物车一、京东购物车多种场景分析步骤1:先登录你的京东账号,清空以前购物车,然后添加一件商品A,保证你的购物车只有一件商品A。步骤2:退出登录,购物车添加商品B,然后关闭浏览器再打开。(请问:购物车的商品B是否存在?)步骤3:再次登录你的京东账号。(请问:你的购物车有几件商品?)二、图解分析:双11高并发的京东购物车技术实现三、购物车的redis经典场景往购物车加入2件商品采用hash数据结果,key=cart:user:用户id127.0.0.1:6379> hset c原创 2020-06-24 22:54:29 · 246 阅读 · 0 评论 -
京东购物车双11实战
原创 2020-06-24 22:44:47 · 168 阅读 · 0 评论 -
tinyurl淘宝短链接业务
##淘宝短链接如何设计?体验淘宝短链接业务场景场景1:淘宝短信你们应该收到淘宝的短信【天猫】有优惠啦!黄皮金煌芒果(水仙芒)带箱10斤49.8元!核薄无丝很甜喔!购买: c.tb.cn/c.ZzhFZ0 急鲜丰 退订回TD打开IE,输入 c.tb.cn/c.ZzhFZ0 就转变为如下:https://h5.m.taobao.com/ecrm/jump-to-app.html?scm=20140608.2928562577.LT_ITEM.1699166744&target_url=原创 2020-06-24 20:37:29 · 27212 阅读 · 0 评论 -
geohash美团附近酒店搜索-技术方案
美团附近酒店搜索-技术方案自Redis 3.2开始,Redis基于geohash和zset提供了地理位置相关功能。什么是GeohashGeohash是一种地址编码,它能把二维的经纬度编码成一维的字符串。比如,世界之窗的编码是ws101xy1rp0。Redis Geo模块包含了以下6个命令:GEOADD将给定的位置对象(纬度、经度、名字)添加到指定的key;39.100.196.99:6379> geoadd hotel 113.9807127428 22.5428248089 "世界之窗原创 2020-06-24 15:26:11 · 5974 阅读 · 0 评论 -
springboot+redis实现微博热搜排行榜
springboot+redis实现微博热搜排行榜技术模拟思路:采用26个英文字母来实现排行,随机为每个字母生成一个随机数作为score为了更好的体验,先做几件事:先初始化1个月的历史数据定时5秒钟,模拟微博的热度刷新(例如模拟点赞 收藏 评论的热度值更新)定时1小时合并统计 天、周、月的排行榜。步骤1:先初始化1个月的历史数据@Service@Slf4jpublic class InitService { @Autowired private RedisTempl原创 2020-06-24 12:37:33 · 3383 阅读 · 2 评论 -
微博热榜排行榜zset
原创 2020-06-24 12:36:59 · 631 阅读 · 0 评论 -
redis的IM的聊天工具
redis的IM的聊天工具什么是redis的stream数据结构?Redis 5.0推出了一个新的数据结构:Stream。Stream就是一个流处理 的数据结构.基于流处理的数据结构,它的功能应用于类似IM的聊天工具和典型的消息队列。Redis 的Stream几乎满足了消息队列具备的全部内容,包括但不限于:1.消息ID的序列化生成2.消息遍历3.消息的阻塞和非阻塞读取4.消息的分组消费5.未完成消息的处理6.消息队列监控xadd:向Stream追加消息xdel:从Stream中删除消原创 2020-06-23 20:33:16 · 901 阅读 · 0 评论 -
分布式红锁的加锁失败的设计原理
分布式红锁的加锁失败的设计原理1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK都设置为30分钟超时 过期2.isLock = redLock.tryLock(10006030, 10006030, TimeUnit.MILLISECONDS);试验步骤:先启动3台redis实例,然后启动springbootspringboot启动成功后,停2台redis实例。(不能先停2台redis,不然springb原创 2020-06-23 19:39:29 · 237 阅读 · 0 评论 -
Redis分布式锁
Redis分布式锁转载:http://redis.cn/topics/distlock.html分布式锁在很多场景中是非常有用的原语, 不同的进程必须以独占资源的方式实现资源共享就是一个典型的例子。有很多分布式锁的库和描述怎么实现分布式锁管理器(DLM)的博客,但是每个库的实现方式都不太一样,很多库的实现方式为了简单降低了可靠性,而有的使用了稍微复杂的设计。这个页面试图提供一个使用Redis实现分布式锁的规范算法。我们提出一种算法,叫Redlock,我们认为这种实现比普通的单实例实现更安全,转载 2020-06-23 19:25:44 · 111 阅读 · 0 评论 -
分布式红锁的leaseTime的设计原理
3.分布式红锁的leaseTime的设计原理提前做2个动作:1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK都设置为30分钟超时 过期2.isLock = redLock.tryLock(10006030, 10006030, TimeUnit.MILLISECONDS);leaseTime就是租约时间,就是redis key的过期时间。long newLeaseTime = -1;if (leaseT原创 2020-06-23 11:11:03 · 3408 阅读 · 0 评论 -
分布式红锁的加锁的lua底层设计原理
分布式红锁的加锁的lua底层设计原理提前做2个动作:1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK2.isLock = redLock.tryLock(1000530, 1000605*30, TimeUnit.MILLISECONDS);debug的断点 断在 RedissonLock.tryLockInnerAsync(long leaseTime, TimeUnit unit, long thread原创 2020-06-23 11:09:52 · 328 阅读 · 0 评论 -
分布式红锁的waitTime的设计原理
分布式红锁的waitTime的设计原理提前做2个动作:1.先把3台 redis key全部清空127.0.0.1:6379> flushdbOK2.isLock = redLock.tryLock(1000520, 1000605*20, TimeUnit.MILLISECONDS); @Override public boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws Interrupte原创 2020-06-23 11:09:10 · 483 阅读 · 0 评论 -
采用docker部署3台Redis分布式红锁实例
采用docker部署3台Redis分布式红锁实例docker run -p 6381:6379 --name redis-master-1 -d redis:5.0.7docker run -p 6382:6379 --name redis-master-2 -d redis:5.0.7docker run -p 6383:6379 --name redis-master-3 -d redis:5.0.7[root@node2 ~]# docker psCONTAINER ID原创 2020-06-23 11:08:18 · 227 阅读 · 0 评论 -
图解分析:基于setnx的分布式锁有什么缺陷
spring boot 和redis集成图解分析:基于setnx的分布式锁有什么缺陷?基于setnx的分布式锁存在单点风险,如果存储的分布式锁key挂掉的话,就可能存在丢锁的风险。一旦丢锁,就会造成多个客户端同时握有锁,从而导致分布式锁失败。具体如下:客户端A 从master拿到锁lock01master正要把lock01同步(Redis的主从同步通常是异步的)给slave时,突然宕机了,导致lock01没同步给slave主从切换,slave节点被晋级为master节点客户端B到maste原创 2020-06-23 11:06:36 · 3477 阅读 · 0 评论 -
redis如何实现分布式重入锁
redis如何实现分布式重入锁?在上一节课中,我们已经知道SETNX是不支持重入锁的,但我们需要重入锁,怎么办呢?目前对于redis的重入锁业界还是有很多解决方案的,最流行的就是采用Redisson,关于什么是Redisson?下面详细介绍什么是 Redisson?Redisson是Redis官方推荐的Java版的Redis客户端。它基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。它在网络通信上是基于NIO的Netty框架,保证网络通信的高性能。在分布式锁的功原创 2020-06-21 19:16:30 · 379 阅读 · 0 评论 -
ReentrantLock可重入锁
案例实战:基于ReentrantLock的递归锁ReentrantLock,是一个可重入且独占式的锁,是一种递归无阻塞的同步锁。和synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等高级功能。步骤1:ReentrantLock的递归实现public class ReentrantLockDemo { private Lock lock = new ReentrantLock(); public void doSomething(int n){原创 2020-06-21 14:45:46 · 171 阅读 · 0 评论 -
synchronized可重入锁
什么是可重入锁?它有什么作用?可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。说白了就是同一个线程再次进入同样代码时,可以再次拿到该锁。它的作用是:防止在同一线程中多次获取锁而导致死锁发生。在java的编程中synchronized 和 ReentrantLock都是可重入锁。案例实战:基于synchronized下订单的可重入锁业务场景:模仿下订单操作,先减库存,再插入订单表。步骤1:库存加锁,订单也加锁public class Synchr原创 2020-06-21 14:42:36 · 369 阅读 · 0 评论 -
不可重入锁
什么是不可重入锁?所谓不可重入锁,即若当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。同一个人拿一个锁 ,只能拿一次不能同时拿2次。案例实战:设计一个不可重入锁public class Lock{ //锁的状态:true=锁住,false=解锁 private boolean isLocked = false; /** * 获取锁 */ public synchronized void lock() {原创 2020-06-21 14:32:11 · 313 阅读 · 0 评论 -
Redis普通分布式锁
1.为什么要使用分布式锁,它解决了什么问题?锁,顾名思义,就是一份数据在同一时间内只能被一个人使用,不能2个人同时使用。对于锁,一般有2种使用场景:单机系统:单机系统在多用户多线程并发操作同一份资源(数据)的时候,采用线程加锁的机制,即当某个线程获取到该资源(数据)后,立即加锁,当使用完后,再解锁,其它线程就可以接着使用了。例如,在JAVA的锁机制synchronize/Lock等。分布式系统:在分布式系统环境中,单机的线程锁机制是不起作用的,因为系统采用了集群部署在不同的机器上;如果原创 2020-06-21 13:58:18 · 153 阅读 · 0 评论 -
HyperLogLog 命令详解
HyperLogLog 命令详解HyperLogLog 目前只支持3个命令,PFADD、PFCOUNT、PFMERGEPFADD将元素加入到HyperLogLog数据结构中,如果 HyperLogLog 的基数估算值在命令执行之后出现了变化,那么命令返回1,否则返回0。PFCOUNT返回给定 HyperLogLog 的基数估算值。127.0.0.1:6379> pfadd uv 192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103原创 2020-06-21 11:41:59 · 442 阅读 · 0 评论 -
HyperLogLog设计和实战
参考资料:论文:http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdfhttps://www.jianshu.com/p/55defda6dcd2原创 2020-06-21 10:43:17 · 491 阅读 · 0 评论 -
案例实战:采用redis生成淘宝商品的全局id
案例实战:采用redis生成淘宝商品的全局id一、为什么分布式系统需要全局唯一id ?在互联网系统中,并发越大的系统,数据就越大,数据越大就越需要分布式,而大量的分布式数据就越需要唯一标识来识别它们。例如淘宝的商品系统有千亿级别商品,订单系统有万亿级别的订单数据,这些数据都是日渐增长,传统的单库单表是无法支撑这种级别的数据,必须对其进行分库分表;一但分库分表,表的自增id就失去了意义;故需要一个全局唯一的id来标识每一条数据(商品、订单)。例如 一张表1一亿条数据,被你分库分表10张表,原先的id原创 2020-06-20 19:02:31 · 550 阅读 · 0 评论 -
Replication Backlog
原创 2020-06-17 16:38:39 · 214 阅读 · 0 评论