首页 > 数据库 >2. redis扩展知识

2. redis扩展知识

时间:2022-11-25 15:44:56浏览次数:42  
标签:元素 ooxx redis 知识 扩展 k1 消息 数据

管道(pipeline)

比如说客户端连接到redis服务端以后,要进行很多命令的操作,每次执行命令都会经过网络io然后调用到redis服务端,管道的技术可以把多个命令进行压缩,这样一次调用就可以了。

使用nc 命令和redis建立连接,然后手动输入命令
image
新开窗口,获取k1 的值
image

上面方式理解后,可以说说管道的事,可以把多个命令通过管道给到与redis的连接
image

消息订阅

比如往ooxx 这个通道里推送了一条消息
image

新开窗口,订阅ooxx 通道
image
发现没有hello 这条消息,因为是先往ooxx 通道推送的消息,所以后来订阅的ooxx 通道,收不到hello

如果再往ooxx 通道推送消息
image

可以看到是可以监听到消息的
image
所以是监听了通道后,只能看到监听了通道以后的实时性消息

消息是分实时性的和历史性的,实时性的就比如上面的例子
image
比如微信或者QQ,如果用户去查找之前的历史消息,有可能查找3天内的,甚至更早的,如果是更早的数据,那肯定是查数据库的全量数据。所以redis主要是拿来做缓存用的,目的就是快。
如果是查找实时性的数据,通过发布订阅可以实现,如果是查找历史数据,根据历史时间的顺序,使用有序集合sorted_set来实现。
如果用户发送消息的时候,要分别把消息发送到消息订阅的窗口,和标识有序的历史消息,还要通过中间件比如kafka,最终把数据存到数据库。

事务

image
因为redis服务是单线程的,所以如果客户端是多线程情况下使用的时候,主要看哪个线程的exec命令先执行,谁就先提交事务。
watch命令相当于cas操作,

测试一下:
使用watch命令对k1 进行操作,然后开启事务,执行命令
image

新开启窗口,开启事务,修改k1 的值,然后提交事务,这是可以发现k1 的值确实已经发生更改
image
这时候,回到第一个窗口,提交事务,因为k1的值发生了更改,所以对k1的值进行操作不成功,因为k1执行事务时候,k1的值和开启事务时候的值不一样了,发生了变化
image

布隆过滤器

比如客户端拿着很多不存在的key去请求redis,发现redis没有对应的key,就要去数据库查找,如果是大批量的情况下,然后造成了缓存穿透,布隆过滤器就是解决这个问题的。
主要是通过小的空间来解决大的请求查找数据是否存在,通过使用bitmap来实现的,使用的是二进制位里的值来表示对应的数据是否存在。
image
比如元素1和元素2是已有的商品元素,存在数据库里的,这两个元素可能有重复的映射函数表示同样的意思,元素3是客户端要查询的商品元素,如果元素3能通过布隆过滤器映射到对应的bitmap二进制位,说明有对应商品,就允许后面的查询操作。
如果在允许后面的查询操作时候,没有对应的商品数据,数据库添加对应的元素,然后元素对布隆过滤器的添加标识。

缓存LRU

redis作为缓存存放的数据是部分数据,全量数据是存在数据库里的,redis里的数据随着业务的变化而变化,redis要清理掉不常用的访问的数据,中间会考虑一些算法。
image
在给redis存放数据时候,如果设置了时间,在有效时间内,如果对这个数据进行修改,有效时间就会作废,修改后的数据变成永久数据。所以在编写业务代码时候如果修改了这种数据,要再对这个数据加上有效时间。

标签:元素,ooxx,redis,知识,扩展,k1,消息,数据
From: https://www.cnblogs.com/abiu/p/16173744.html

相关文章

  • 1. redis 及NIO原理介绍
    要了解redis之前,要先知道一些常识:基础知识磁盘:数据保存在磁盘的寻址:ms带宽:G/M内存:寻址:ns2纳秒级别带宽:很大结论:秒>毫秒>微秒>纳秒 所以磁盘比内存在寻......
  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
    摘要:一、问题:      数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:   1.通过高速服务器Cache......
  • docker,redis速拉
    记录docker快速拉取redis1.搜索dockersearchredis2.拉取dockerpullredis3.路径mkdir-p/home/redis/myredis/datacd/home/redis/myredis/4.配置vimmyredi......
  • 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明  最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是比较容易出错的问题或者比较受到关注的知识点,所以不少......
  • Redis的那些最常见面试问题
    1.什么是redis?Redis是一个基于内存的高性能key-value数据库。  2.Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存......
  • 令牌桶限流思路分享(PHP+Redis实现机制)
    一、场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源,通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个用户,他......
  • php与Redis实现一个100万用户的投票项目,实现实时查看投票情况?
    微信分享里总是有一些亲子活动,或者参加某些大赛需要进行投票,而面向的是所有人都可以参与,或者有限制一个人每天能投票同一个参与者3票之类的。。。这些应用场景有很多。假如......
  • PHP操作Redis
    redis的基本操作方法1.redis的连接://实例化redis$redis=newRedis();//连接$redis->connect('127.0.0.1',6379);//检测是否连接成功echo"Serverisrunning:".$r......
  • Redis安装
    Redis安装redis简介https://blog.csdn.net/qq_27870421/article/details/103292904下载地址Redis官方网站Redis中文官方网站安装版本6.2.6forLinux(redis-6.2.7.......
  • Redis分页
    <?phpclassRedisPage{protected$_redis;protected$_redis_ip;protected$_redis_port;protected$_redis_db;protected$_hash_prefix;/**......