redis学习
文章平均质量分 62
努力的布布
好好运动、好好学习、好好玩、好好吃、好好休息
展开
-
redis-Java集成Redis
redis整合java,springboot原创 2022-06-04 20:52:23 · 1744 阅读 · 0 评论 -
redis-回收策略
redis当做LRU算法使用LRU即最近最少使用,是一种常用的缓存淘汰算法;最近一段时间最少使用的优先被淘汰掉,给新来的数据提供存储空间。内存大小的配置:在redis中可以redis.conf配置文件来指定限制内存大小,maxmemory分配最大可用内存,为0代表没有内存限制;或者之后用config set命令来限制。回收策略:noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)allkeys-lru: 尝试回收最少使用的原创 2022-05-26 15:14:33 · 180 阅读 · 0 评论 -
redis-事务
redis-事务Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。redis事务不支持回滚如果你有使用关系式数据库的经验, 那么 “redis 在事务失败时不进行回滚,而是继续执行余下的命令”这种做法可原创 2022-05-26 14:11:25 · 74 阅读 · 0 评论 -
redis 发布订阅以及使用场景
redis 发布订阅发布订阅模式:一个发布者多个订阅者只要选择订阅这个发布者,发布者发布的数据都可以被订阅到,只有订阅者开始订阅之后,发布的数据才可以接收,也就是说历史数据不能接收127.0.0.1:6379> PUBLISH 163 hello(integer) 0127.0.0.1:6379> PUBLISH 163 helloa(integer) 1127.0.0.1:6379> PUBLISH 163 helloa1(integer) 1127.0.0.1:6379原创 2022-05-26 14:10:22 · 2058 阅读 · 0 评论 -
redis-管道
redis-管道## redis-管道你客户端对着redis那台服务器里面的redis进程,如果想发很多的命令,然后其实每发一个命令都要走一次数据的传输,然后执行完返回;在计算机编程的时候,我们更多的会使用buff机制?就是为了减少这种没必要的调动来、调动去的一个过程,减少系统调用,减少网络IOnetcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。原创 2022-05-26 14:06:13 · 175 阅读 · 0 评论 -
redis_缓存击穿/缓存穿透/缓存雪崩的解决方案以及分布式锁的概念
缓存击穿缓存击穿:key对应的数据存在,但在redis中过期或者是被redis的淘汰策略LRU或者LFU给清除掉,此时若有大量并发请求过来,这些请求发现缓存没有数据一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。解决方案:多个线程请求访问redis服务,没有查询到数据,则用setnx不存在则新建,来创建锁,创建成功则去请求db然后反写到redis,其他请求下次就可以请求到数据从而不去请求db,减少服务器端压力;如果没有创建成功说明有请求创建锁了,正在请求db,则该线原创 2022-01-19 22:28:44 · 857 阅读 · 0 评论 -
redis_day_25_redis自身集群
redis自身集群redis实例本身也有集群,redis实例集群分槽位。[root@iZuf6ir4og87e245nh5ltuZ create-cluster]# lltotal 8-rwxrwxr-x 1 root root 2344 Jan 18 21:23 create-cluster 集群启动脚本-rw-rw-r-- 1 root root 1317 Jan 18 21:22 README[root@iZuf6ir4og87e245nh5ltuZ create-cluster]# p原创 2022-01-18 22:14:23 · 599 阅读 · 0 评论 -
redis_day_24_predixy集群代理
predixy代理集群centos6.x以下不支持c++11的编译,可以下载编译过的可执行程序;predixy支持redis哨兵和集群,哨兵可监控多套主从redis实例。wget github中predixy编译过的predixy可执行文件连接tar xf tar.gz 文件 解压bin 目录下是可执行程序conf下是配置文件predixy.conf:开启端口号 bind连接注释 导入哨兵配置文件 开启include标签sentinel.conf:设置集群:127.原创 2022-01-17 22:35:57 · 846 阅读 · 0 评论 -
redis_day_23_twitter/ twemproxy代理集群代理redis
Twemproxy做代理Twemproxy可以做redis集群的代理,作为代理层,客户端可以直接连接,不用管具体有多少redis实例客户端。yum update nss可以用来解决git下载项目报Http请求错误的问题。https://github.com/twitter/twemproxy 学习twemproxy,下载安装包,然后编译运行服务,在配置文件配置要代理的多个redis实例,以及权重的负载均衡。1.git clone https://github.com/joyieldInc/pre原创 2022-01-16 21:31:00 · 173 阅读 · 0 评论 -
redis_day_22_redis连接成本优化和分布式预分区
解决redis连接成本高多个redis客户端连接到redis服务端,会对server端造成很大的压力,每一个客户端都可能连接两个redis节点实例上面。为了解决这个问题可以用nginx做反向代理,客户端连接访问请求nginx服务器,nginx分发请求,可以实现负载均衡,为了提升性能可以使用nginx做集群,每一个集群中的nginx单机处理一部分请求。nginx前面可以加上一个LVS,所有的客户端访问VIP,只要数据中心能让连接过去,那么LVS就能处理请求。只要你这个数据中心能够让那么多流量进来,那么相对应原创 2022-01-12 22:37:21 · 937 阅读 · 0 评论 -
redis_day_21_redis单节点数据容量问题以及一致性哈希环
redis单节点:容量问题1.为了持久化的时候时间比较短,redis内存存的数据不要占用太大内存,可以通过一些方法将数据分散在几多个redis实例上面;(1.)数据交集不多的时候可以分类,分布在不同的redis实例,但是这样不方便聚合操作;redis客户端通过业务逻辑做数据的拆分,放在不同的redis节点上面(2-1.)数据不能划分拆解,一个业务模块放一起,通过hash取模的方式确定存储的位置,但是取模的数量必须固定,如果扩展实例就要重新对数据进行再hash确定新的模中的存储位置,可扩展性比较差。影原创 2022-01-11 22:28:39 · 804 阅读 · 2 评论 -
redis_sentinel哨兵
replica-read-only yes 开启从机的只读模式redis主从同步数据,可以通过网络直接传输rdb,也可以直接生成rdb到磁盘,然后磁盘读取到从机;repl-backlog-size 1mb主和从之间是会有一个增量复制,其实在redis,如果这是一个redis,然后它肯定是先通过rdb给过你一个全量的数据,然后且在他redis内部,它还维护一个小的消息队列,这个消息队列多大,你给出一个大小。然后第一次的时候,这个文件如果发给了一个redis,redis会 load这个rdb对发送原创 2022-01-10 22:38:21 · 377 阅读 · 0 评论 -
redis_主从复制搭建
单点弊端及解决方式redis可以单机单进程,做缓存数据库都可以,持久化的方式可以通过rdb和aof。单机部署会有三个弊端:单点故障;容量有限;访问量过多会有压力。为了解决单机部署的弊端可以通过主从,主备的方式。主备:主机可用,备机正常状态不用,等主机故障备机顶上;主从:从机复制主机数据,主机可读写,从机只负责读,分担读的压力;还可以按照业务模块拆分,不同业务模块的数据放在不同的机器节点上,最终还是要对主机做高可用,多台部署。做主从或者主备都要考虑多台机器数据一致性的问题,同步阻塞方式会破坏可用原创 2022-01-09 21:40:22 · 505 阅读 · 0 评论 -
redis_持久化RDB和AOF
RDBredis同步数据本地存储采用的是通过fork系统调用来创建父子进程,子进程来把数据从内存落到磁盘中子进程不是把所有数据从父进程在拷贝一份,使用的是指针引用,copy on write?什么意思?这句话叫做写时复制。事写的时候他就复制,换言之,创建子进程中并不发生复制,只有在父进程一方想修改数据的时候才会定向地去复制数据,这样会有一个优势,就是创建进程变快了。同时根据经验,不可能子进程或者是父进程,把所有数据都改一遍,也就是其实触发起复制的机会也不是很大,明白什么意思吧?就是整个Linux,为什原创 2022-01-04 22:04:45 · 756 阅读 · 0 评论 -
redis-缓存穿透布隆过滤器
缓存穿透缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的原创 2021-12-26 20:36:48 · 78 阅读 · 0 评论 -
redis-sorted set 实现方式-跳跃表
sorted set 实现方式-跳跃表底层数据结构是跳跃表skip list,跳跃表是牺牲存储空间来换取查询速度,即空间换时间的概念,跳跃表新元素插入的时候,是随机造层;跳跃表是随机造层的,每一层的末尾都指向的是一个空值,查询的时候先从最上层开始遍历,遍历到末尾再从下一层级开始遍历,下一层级开始遍历不是从头开始,而是从上一层级那个节点开始继续往后遍历,遍历到末尾还没有找到就继续遍历下一个层级,循环往复;越往上层级包含的数据越低,不可能每个层级都包含所有元素数据,否则就是三倍存储了,就不能提升性能了;是一原创 2021-12-25 17:21:42 · 728 阅读 · 0 评论 -
redis有序集合-sorted set
sorted setSet是去重的集合,但是无序;sorted set即有序去重,按照一定规则对sorted set进行排序,list也有序,是插入的顺序;排序可以分为字典序和数值顺序;所以sorted set有元素、分值、索引构成,索引也分为正向索引和逆向索引,sorted set是按照物理内存左小右大(分值左小右大)的顺序排序;127.0.0.1:6379> zadd k1 8 apple 2 banana 3 orange 向zset 的k 赋值和分数(integer) 3左小右大 根原创 2021-12-24 23:18:53 · 373 阅读 · 0 评论 -
redis数据类型-Set
list是可以有重复出现的,且list是有序的,list有序,这个序描述的是什么顺序,没错,是存入的插入的弹出的顺序对 他并不会去做排序的,注意list没有跟你去做排序,所以这时候把list弄清楚之后,然后再来看set,set是一种去重的一种集合,而且他里边不维护排序,也不维护插入和弹出元素的顺序,它完全是乱序的。set去重集合,不维护存入顺序,无序的常用命令如下:127.0.0.1:6379> help @set SADD key member [member ...] summ原创 2021-12-22 22:25:47 · 446 阅读 · 0 评论 -
redis数据类型-Hash
redis 的kv键值对,hash也是一种数据类型;help @hash HDEL key field [field ...] summary: Delete one or more hash fields since: 2.0.0 HEXISTS key field summary: Determine if a hash field exists since: 2.0.0 HGET key field summary: Get the value of a has原创 2021-12-22 21:48:05 · 303 阅读 · 0 评论 -
redis数据类型-List
Redis的value数据类型-Listk当中有两个东西在k身上,一个是head,一个是tail,有两个指针,head头指针,tail尾指针。那么在k当中有这两个头尾指针属性有什么好处?head的话可以指到你value的链表的第一个元素,tail的话可以指到他最后一个元素,那么这样一个好处就是,你访问一个key,然后它的类型是list的时候,你可以通过它的两个属性快速的访问 value链表当中的第一个元素和最后一个元素help @list BLPOP key [key ...] tim原创 2021-12-21 22:18:32 · 759 阅读 · 0 评论 -
redis-bitmap实际运用统计用户登录天数和每天活跃用户
redis bitmap实际运用一第一个听需求,如果你的公司有用户系统,有很多用户。然后这时候需求是什么?统计未来用户的登录天数,且窗口随机。什么意思?比如说在电商的公司当中,电商的网站,一般就是老板心血来潮说,今天是8月28 ,马上就9月了,那么9月1号往前推一周,9月1号往后推一周,这14天所有用户的登录的天数帮我统计一下,然后没过两天该是双11了,双11的前后帮我统计一下,然后哪天他老婆生日了,我老婆生日前后几天给我统计一下,你的老板会随机的让你统计,指不定哪天开始哪天结束,就在这个范围之原创 2021-12-20 22:51:28 · 1843 阅读 · 1 评论 -
redis数据类型-String&&bitmap
redis-stringredis的键值对k-v,有5中数据结构,先看string,上篇文章的help命令在客户端可以使用,help @String APPEND key value summary: Append a value to a key since: 2.0.0 BITCOUNT key [start end] summary: Count set bits in a string since: 2.6.0 BITFIELD key [GET type of原创 2021-12-19 15:18:42 · 489 阅读 · 0 评论 -
redis连接客户端的简单使用
redis运行原理当有多个redis客户端连接到redis所在服务器的时候就是多个socket连接到redis服务器的内核上了,redis就是一个线程,调用epoll系统调用来找到就绪的文件描述符fd,然后进行处理;reids是单线程单进程的一个实例,但是redis不是只有一个进程线程,而是只有一个进程线程来处理redis客户端请求的;单进程单线程的处理请求有一个好处就是保证了顺序的一致性,在分布式的系统中是很有好处的,保证的顺序性是每个连接内的顺序是有顺序的,一个连接请求内,即使是多线程的,只要这个请原创 2021-12-18 23:54:11 · 545 阅读 · 0 评论 -
redis安装实战
redis安装使用的操作系统是Linux_centos操作系统通过使用http://download.redis.io/releases/redis-5.0.5.tar.gz进行下载编译安装安装wget命令 :yum install wget创建文件夹:mkdir soft,进入文件夹 cd soft下载源程序:wget http://download.redis.io/releases/redis-5.0.5.tar.gz 下载到文件目录 ,然后解压: tar xf redis.tar.gz原创 2021-12-18 23:11:25 · 803 阅读 · 0 评论 -
redis介绍和多路复用的优点
redis介绍数据是存储在磁盘里的,磁盘有两个维度衡量1.寻址:寻址的速度是毫秒级的;2.带宽:单位时间可以有多少个字节流过去,然后基本上是G或者M这种级别;磁盘里的数据,需要先加载到内存,然后再从内存到CPU进行运算内存的话也有两个维度1.寻址:寻址的速度是纳秒级的;2.带宽:非常大磁盘比内存慢了10万倍,在寻址上慢了10万倍在 I/O 过程中,读取磁盘的速度相对内存读取速度要慢的多。因此为了能够加快处理数据的速度,需要将读取过的数据缓存在内存里。而这些缓存在内存里的数据就是高速缓冲区原创 2021-12-15 20:50:49 · 822 阅读 · 0 评论