
Redis
文章平均质量分 91
介绍了内存及数据库redis常见的数据类型,以及使用C++编写redis以及redis的各种策略。
猫头鹰~
这个用户很懒
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis主从复制
主从复制解决的问题:单点问题1.单个redis节点,可用性不高。2.单个redis节点,性能有限。1.复制分为全量复制、部分复制、实时复制。2.redis通过复制功能实现主节点的多个副本。3.复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。4.主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。5.主从节点之间通过心跳机制保证主从节点通信正常和数据一致性。1.主节点配置不需要改动2.从节点在配置文件中加入slaveof主节点ip主节点端口的形式即可。原创 2025-03-07 23:01:08 · 1075 阅读 · 0 评论 -
Redis事务
1.原子性redis的事务到底有没有原子性,存在争议。原子性最原本的含义是把多个操作打包成一起,要么全都执行,要么全都不执行,原子这个词表示的意思就是不可拆分的最小单元,redis做到了这个含义。但是相比之下MySQL这里的原子性走的更远一些,也是把多个操作打包到一起,要么全都执行成功,要么全都不执行。对于redis来说,如果事务中有若干操作,存在有失败的,那就失败吧,不会有回滚操作。对于MySQL来说,如果事务中有操作执行失败,要进行回滚,把中间执行的操作全都回退了。原创 2025-03-06 07:09:39 · 4802 阅读 · 0 评论 -
Redis持久化
重启进程或者重启主机之后,数据是否存在,存在就是持久,不存在就是不持久。redis是一个内存数据库,把数据存储在内存中,因此只要关机或者重启进程,数据就没了,因此redis要想做到持久就需要把数据存硬盘上,但是如果存储在硬盘上那它就失去了它快的优势。为了保证速度快,数据肯定还得在内存中,但是为了持久,数据还要想办法存储在硬盘上,小孩子才做选择,我全都要,redis决定,内存和硬盘上都存数据,这两份数据理论上是完全相同的,但实际上小概率会存在差异。原创 2025-03-06 06:53:24 · 1736 阅读 · 0 评论 -
C++编写Redis客户端
打开github后往下面翻,可以看到下载,要下载redis-plus-plus要先安装hiredis。C++操作redis的库有很多,这里使用redis-plus-plus,我们需要在githb上下载。当一个函数,返回值需要表示多个数据的时候,往往也会借助插入迭代器,来实现往一个容器中添加元素的效果。那有没有合法的方式打开呢?当一个函数,参数需要传递多个值的时候,往往都是支持初始化列表或者是一对迭代器的方式来进行实现。安装完毕后,头文件会装到 /usr/local/include/sw/的redis++。原创 2025-03-07 23:07:30 · 917 阅读 · 0 评论 -
Redis渐进式遍历&数据库
keys*可以一次性的把整个redis中所有key都获取到,这个操作是非常危险的,因为可能一下获取到太多的key,阻塞redis服务器。要想很好的获取到所有的key,又不想出现卡死的情况,就可以使用渐进式遍历。渐进式遍历:不是一个命令把所有的key全都拿到,而是每执行一次命令,只获取到其中一小部分,这样的话保证当前的这一次操作不会太卡,要想得到所有的key就需要多次遍历了。渐进式遍历其实是一组命令,但是这一组命令的使用方法是一样的,其中代码性命令是。原创 2025-03-06 05:59:07 · 660 阅读 · 0 评论 -
Redis数据结构——zset
命令作用给集合添加元素zcard key获取元素的长度获取到member的分数获取元素下标删除集合中元素修改元素分数查看一段区间元素返回在一个分数区间里的元素个数。根据分数划分区间获取指定元素删除start到end之间的元素。根据下标删除指定一个删除的区间,这个区间是通过分数来描述的区间。对多个集合求交集对多个集合求并集。原创 2025-03-06 05:50:01 · 1335 阅读 · 0 评论 -
Redis数据结构——set
命令功能添加元素随机删除元素判断元素是否在集合中随机返回一个元素scard key返回集合长度随机删除key获取集合所有元素求交集求并集求差集。原创 2025-03-05 18:56:36 · 701 阅读 · 0 评论 -
Redis数据结构——list
操作类型命令时间复杂度添加O(k),k是元素个数O(k),k是元素个数O(n), n是pivot距离头尾的距离查找O(s + n),s是start偏移量 n是start到endO(n), n是索引的偏移量len keyO(1)删除lpop keyO(1)rpop keyO(1)O(k),k是元素个数O(k),k是元素个数修改O(n), n是索引的偏移量阻塞操作O(1)原创 2025-03-05 19:14:39 · 895 阅读 · 0 评论 -
Redis数据结构——hash
命令执行效果时间复杂度设置值O(1)获取值O(1)删除fieldO(1)hlen key计算field个数O(1)获取所有的field-valueO(K)批量获取field-valueO(K)判断field是否存在O(1)hkeys key获取所有的fieldO(K)hvals key获取所有的valueO(K)设置值,但必须field不存在时才可以设置成功O(1)对应field的value + nO(1)对应field的value + nO(1)原创 2025-03-03 18:34:01 · 980 阅读 · 0 评论 -
Redis数据类型——string
命令执行效果时间复杂度设置key的值是valueO(1)get key获取key的值O(1)删除指定的keyO(k)批量设置指定的key和valueO(k)批量获取key的值O(k)incr key指定的key值+1O(1)decr key指定的key值-1O(1)incrby key n(可以为负数)指定的key值+nO(1)decrby key n(可以为负数)指定的key值-nO(1)incrbyfloat key n(可以为负数)原创 2025-03-03 08:59:48 · 790 阅读 · 0 评论 -
Redis数据类型
显然不是吧,很多情况下每个客户端和服务器之间的通信也没那么频繁,当然也看具体场景,下载文件啥的就需要不断通信,但如果你看web网站就可能不是那么频繁,此时这么多socket大部分时间都是静默的,上面是没有数据需要传输的,也就意味着同一时刻只有少数socket是活跃的,这是使用IO多路复用的前提,此时通过IO多路复用就可以用一个线程处理多个socket,这是操作系统给程序员提供的机制,提供了一套API,内部的功能都是操作系统内核实现的。redis就不一样了,就是简单的插入删除,当然就快呀。原创 2025-03-02 10:00:00 · 562 阅读 · 0 评论 -
Redis通用命令
Redis客户端可以和服务器在同一台主机上,也可以在不同主机上,目前我们一般只有一台机器,此时客户端和服务器就是在同一个机器上的。客户端服务器模式是客户端通过网络给服务器发送一条请求,服务器收到请求后通过网络响应给客户端,一个服务器是可以接受多个客户端的请求的。Redis也是一个基于客户端-服务器结构的程序,为什么说也呢?因为MySQL也是一个基于客户端服务器的结构。1.自带的名命令行客户端: redis-cli。Redis的客户端有很多种形态。原创 2025-03-01 16:17:14 · 210 阅读 · 0 评论 -
Ubuntu20.04安装Redis
6379是Redis的默认端口,但IP是127.0.0.1本地回环IP,我们需要修改配置文件把ip改了,改成让其它主机也能访问到的IP,当前127.0.0.1这个IP只能由主机上的客户端访问,跨主机就访问不了了。很多软件都是有配置文件的,一个大的软件里面包含很多的功能,而且有很多可以定制化的操作,我们可以通过配置文件选择开启/关闭/设定某些功能。我们可以使用ping命令来测试连通性,如同显示PONG说明是没事问题的。如果没有切换到root用户的,切换到root用户。修改了配置之后需要重新启动服务器。原创 2025-02-27 22:58:01 · 527 阅读 · 0 评论 -
Redis初识
我们使用MySQL存数据大,但是慢,我们有没有办法让它又大又快,很多场景都是遵循二八原则的,我们可以把热点数据拎出来存储在Redis中,20%的热点数据可以满足80%的请求,我们只用在Redis上存储这20%的数据,让大部分的请求直接读取Redis,避免直接访问数据库,这样速度就上去了,如果请求的数据Redis上不存在,再去访问数据库,这样整体的返回时间会更快。它的工作机制是这样的。Redis也提供了消息队列的功能,Redis的初衷是作为消息队列的,但是它的消息队列功能用到的是很少的,反而是它的存储功能。原创 2025-02-27 22:27:31 · 805 阅读 · 0 评论