
redis
jy02268879
这个作者很懒,什么都没留下…
展开
-
【三十】Redis之跳跃表
转自:死磕Redis5.0之跳跃表为什么选择跳跃表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简...转载 2020-09-20 14:04:17 · 224 阅读 · 1 评论 -
【二十九】如何实现LRU,redis如何实现LRU
一、LRU原理当内存不够的时候,先淘汰掉最不常用的。自己实现LRU的方式考虑:双向链表+hashmap链表的实现:每次新插入数据的时候将新数据插到链表的头部。每次缓存命中(即数据被访问),则将数据移到链表头部。当链表满的时候,就将链表尾部的数据丢弃。hashmap的实现:使用 HashMap 存储 key,这样可以做到 save 和 get key的时间都是 O(1),而 HashMap 的 Value 指向双向链表实现的 LRU 的 Node 节点总结一下核心操原创 2020-09-20 14:03:54 · 1200 阅读 · 0 评论 -
【二十八】redis之Cluster集群间通信Gossip协议
一、Gossip 在Redis-Cluster中如何作用redis集群之间采用的Gossip协议进行通信。redis集群中每台机器上都保存了一份元数据,如果有节点出现了元数据变更会不断的新的元数据发给其他节点,让其他节点也进行元数据变更。这个跟zookeeper很不一样,ZK集群的元数据是集中式的,且是强一致性,主要由Leader外带提供写操作。在分布式系统中,需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据、主从属性、是否出现故障等状态信息。常见的元数据维护方式分为:集中原创 2020-08-01 15:53:17 · 1281 阅读 · 0 评论 -
【二十七】redis之结合Lua脚本
一、redis中使用lua脚本的优点1.减少网络开销,在 Lua 脚本中可以把多个命令放在同一个脚本中运行,只有一次网络开销。2.原子操作,Redis 会将整个脚本作为一个整体执行,中间不会被其他命令插入。3.复用性,客户端发送的脚本会存储在 Redis 中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑。二、redis执行的与lua相关的命令1.EVAL作用:...原创 2020-04-28 18:21:18 · 2801 阅读 · 0 评论 -
【二十六】redis之事务、事务特性、与pipeline比较,与Lua脚本比较
一、redis事务的特性1.原子性这里的原子性跟mysql的原子性不一样。redis事务的原子性是说的:一次事务提交的多个命令,要么都不执行(watch发现某个key的值变了则不开始执行),要么所有的命令都执行(一旦开始执行事务,事务中所有的命令都会执行,即使有命令报错了,后面的命令也会执行)报错不回滚!跟pipeline一样,一个事务中的多个命令可能会被岔开比如:事务T...原创 2020-04-28 16:08:45 · 4024 阅读 · 2 评论 -
【二十五】分布式锁(redlock、redis、zookeeper)
一、分布式锁必须保证的特性 互斥 无死锁 容错 阻塞与非阻塞 可重入二、如何使用redis实现分布式锁 获取锁 SET key random_val NX PX 30000 释放锁 if redis.call("get", KEYS[1]) == ARGV[1] then ...原创 2020-04-28 12:08:21 · 721 阅读 · 0 评论 -
【二十四】redis之缓存与数据的一致性(DTP)
分布式的数据库保证数据一致性,如果有分布式事务是最好,或者XA这种分布式事务也挺好。但是这里说的可以粗暴的理解成redis作为缓存使用的时候如何保证redis和mysql中数据的一致性。一、读操作读操作都没什么大的分歧,一般都是先读redis,redis没有就读mysql,然后把读出来的数据写到redis中。二、先删除redis,再更新mysql即使写mysql失败了,也没关系...原创 2020-04-26 14:57:21 · 322 阅读 · 0 评论 -
【二十三】redis之缓存穿透、缓存击穿、缓存雪崩及解决方案
一、缓存穿透概念:一次请求发现数据在缓存和DB中都没有。通常是恶意攻击比如:请求一个数据的ID为-1解决方案:1.拦截不合法请求可考虑使用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitMap中,一个一定不存在的数据会被这个bitMap拦截掉,从而避免底层存储系统的查询压力。2.设置短期空缓存比如:请求一个数据的ID为-1,读了缓存发现没有,读了数据库发...原创 2020-04-23 17:03:54 · 176 阅读 · 0 评论 -
【二十二】redis之内存淘汰策略和过期策略
一、内存淘汰策略1.场景redis的数据会在内存里面,并且有配置设置redis最多能占用多少内存,那就一定存在一个情况:当redis能占用的内存已满,但redis还需要再存新的数据在内存中,那怎么办?这个就是内存淘汰策略解决的问题2.配置redis最大占用内存1.通过配置文件设置redis.conf配置文件中添加以下配置,设置Redis最大占用内存大小为多少,比如ma...原创 2020-04-23 15:31:57 · 370 阅读 · 0 评论 -
【四】Spring Boot之 Spring Boot + Cache + RedisTemplate整合
项目目录pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="...原创 2018-10-16 18:41:21 · 2521 阅读 · 1 评论 -
【二十二】redis之jedisPool封装(注解实现)
换成使用spring boot后,没有了spring的xml配置文件,改用@注解以上一篇没有太大的区别,只是用配置文件还是用注解,用redis集群还是不用集群。RedisPool.javaimport org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.a...原创 2018-10-15 17:37:38 · 1939 阅读 · 0 评论 -
【二十一】redis之JedisCluster使用(单例,Spring Bean Factory)
保证jediscluster对象是单例,不然并发量大的时候会特别消耗内存、CPU。这里用spring BeanFactory来保证它的单例。项目目录pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs...原创 2018-08-08 14:37:51 · 2978 阅读 · 0 评论 -
【二十】redis之Cluster概述与安装
概述Cluster中每个节点都知道其他节点的信息,相互间可以通信(meet),知道每个节点负责哪些槽(slot)。16384是redisCluster指定的槽的数量。要为每个节点指派槽,才能正常读写。redisCluster有主从复制,每个主节点都有从节点,高可用,分片。从节点默认不支持读写,如果要对从节点做读写分离需要每个连接用readonly,自己维护从节点的资源池和故...原创 2018-08-08 00:10:39 · 224 阅读 · 0 评论 -
【十九】redis之Cluster数据分布概述(分布式存储系统中,数据分布算法简介.顺序分布、普通hash、一致性hash、虚拟槽)
redis cluste在3.0中有了。数据分布1.顺序分布对比分布方式 特点 典型产品 哈希分布 数据分散度高 键值分布业务无关 无法顺序访问 支持批量操作 一致性哈希Memcache Redis Cluster 其他缓存 顺序分布 数据分散度易倾斜 键值...原创 2018-08-07 21:06:29 · 2001 阅读 · 0 评论 -
【十八】redis之sentinel哨兵模式概述与安装配置,Java连接redis sentinel
概述redis2.8开始的sentinel哨兵模式建立在主从结构之上,多了几个sentinel节点。sentinel不会存储数据,它的作用是完成对redis的故障判断、故障转移、通知客户端。多个sentinel可达到对redis故障判断的公平性,还能保证高可用。即使一个sentinel节点挂了,也能保证sentinel机制的存在。客户端不会直接从redis中获取信息,而是从se...原创 2018-08-07 02:18:00 · 13136 阅读 · 0 评论 -
【十七】redis之主从复制概述及部署、同步策略
概述主从复制主要解决单机故障的问题。master同步自己数据到slave上。数据流向是单向的,master到slave。可以一个master有多个slave。一个slave只能有一个master。可以读写分离,master写,而读可以分流到各个slave上。不会故障自动转移。主要作用:1.为数据提供多个副本2.扩展了redis读的性能,可以做读写分离。实...原创 2018-08-07 00:26:13 · 916 阅读 · 0 评论 -
【十六】redis持久化RDB与AOF
Redis 中所有数据保存在内存中,对数据的更新将异步保存到磁盘上。主流数据库持久化方式:1.快照:某个时间点数据的完整备份。例如 MySQL Dump、Redis RDB2.写日志:数据库做了任何更新都写在日志中,当需要恢复数据的时候,只需要把日志拿过来重新走一遍这些操作。例如MySQL Binlog、Hbase HLog、Redis AOF。redis持久化的两种方式:1...原创 2018-08-07 00:26:04 · 269 阅读 · 1 评论 -
【十五】redis衍生数据结构之GEO
GEO是redis3.2添加的一个特性。用于计算地理位置信息相关的一些功能。GEO可以用于存储经纬度、计算两地之间的距离、范围计算等。GEO其实是使用zset来实现的。比如在删除的时候可以使用zset的相关命令zram key member命令geoadd key longitude latitude member 添加地理位置信息node1:0>geoad...原创 2018-08-07 00:25:56 · 2085 阅读 · 0 评论 -
【九】storm+redis集成
redis安装storm集成redismaven pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http...原创 2018-06-13 03:41:12 · 971 阅读 · 0 评论 -
【二】redis概述
redis是开源的,基于键值对的存储服务系统。特性1.高性能: 官方数据每秒可以实现10万次读写, 它将数据存在内存中。存储介质速度又快到慢:register寄存器、L1 cache一级缓存、L2cache 二级缓存、main memory内存、local disk本地磁盘、remote disk远程磁盘。 它由C语言来实现。2.单线程。一次只运行一条...原创 2018-08-06 01:03:06 · 299 阅读 · 0 评论 -
【三】redis通用命令及其时间复杂度
通用命令keys * 返回所有的key,keys命令最好不要在生产环境用,会全局遍历,会很慢,要堵塞其他命令。keys h* 对key进行模糊查询dbsize 显示一共有几个key,这个可以在生产用,不会全局遍历exists keyname 查看key是否存在,存在返回1,不存在返回0del kename 删除key 成功返回1,失败返回0。...原创 2018-08-06 02:05:04 · 4841 阅读 · 0 评论 -
【四】redis数据结构之字符串,命令及其时间复杂度
字符串字符串类型的value不能大于512MB。value可以存json。命令get keyname 通过Key获取字符串类型的值set key value 设置key-value 不管key是否存在都设置,即存在的时候就更新了value。 add or updatesetnx key value 只有当key不存在的时候才设置,即只新增,不修改 adds...原创 2018-08-06 02:06:26 · 768 阅读 · 0 评论 -
【五】redis数据结构之hash,命令及其时间复杂度,与string在存储结构化信息时的优缺点对比
hashhash键值结构,其中field不能相同,value可以相同。key field valueuser:1:info name sid age 27 email...原创 2018-08-06 02:08:58 · 4111 阅读 · 0 评论 -
【六】redis数据结构之list,命令及其时间复杂度
list结构key elementscolor red----black----bluelist是有序的,可重复的。可用于微博的TimeLine,根据时间轴显示微博。关注的人跟新了微博,就把该微博push到队列的头里。命令rpush key value1 value2 value3... ...原创 2018-08-06 02:51:21 · 9337 阅读 · 0 评论 -
【七】redis数据结构之set,命令及其时间复杂度
set集合是无序不重复的。支持集合间的操作,交集(这个特性可以用来做共同关注)、并集、差集。结构key valuetest1 a b c ...原创 2018-08-06 03:37:48 · 4183 阅读 · 0 评论 -
【八】redis数据结构之zset有序集合,命令及时间复杂度
zset有序集合,元素不重复。可用于排行榜(新旧程度排名,score可以用时间戳)。结构key score valuerank 15 a 35 b 28 c ...原创 2018-08-06 04:26:14 · 11575 阅读 · 5 评论 -
【九】redis的Java客户端:Jedis的使用及JedisPool的配置优化
Jedis的方法,方法命跟redis命令行客户端几乎一样,参数及参数顺序以跟redis命令行客户端几乎一样。这里不一一介绍,直接Jedis. 会有提示。pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xm...原创 2018-08-06 17:10:27 · 6814 阅读 · 0 评论 -
【十】redis慢查询
redis命令的生命周期1.客户端发送命令2.命令在redis中排队3.redis执行命令4.redis向客户端返回结果慢查询定义:1.慢查询是发生在第三阶段,在执行的时候消耗了很多时间。2.客户端超时不一定是慢查询,但慢查询可能导致客户端超时。慢查询的配置slowlog-log-slower-than = 10000(默认值) 命令执行超过多少时间(单位:微秒...原创 2018-08-06 17:45:50 · 286 阅读 · 0 评论 -
【十一】redis之pipeline批处理
概述1次pipeline可以执行n个命令,只消耗1次网络时间。1次pipeline(n个命令) = 1次网络时间+n个命令时间。命令 N个命令操作 1次pipeline(n个命令) 时间 n次网络+n次命令 1次网络+n次命令 返回数据量 1条数据 n条数据 redis的命令通常是微妙级别的。redis执行命令的速度本身是...原创 2018-08-06 18:05:39 · 1080 阅读 · 0 评论 -
【十二】redis之发布/订阅
官网介绍角色发布者publisher订阅者subscriber频道channel发送者发送消息到一个频道,每一个订阅该频道的订阅者都能收到这条消息,不是只有一个订阅者抢到,这一点跟消息队列不同。每一个订阅者是可以订阅多个频道的。新的订阅者,收不到该频道之前的消息。命令注意,发送者和订阅者要在不同的客户端publish channel message 发布命...原创 2018-08-06 18:34:53 · 239 阅读 · 0 评论 -
【十三】redis衍生数据结构之位图Bigmap
位图,redis可以操作二进制的位,可以取到每一个位对应的值。node1:0>set hello big"OK"node1:0>getbit hello 0"0"node1:0>getbit hello 1"1"node1:0>getbit hello 2"1"node1:0>getbit hello 3"0&qu原创 2018-08-06 18:58:16 · 2636 阅读 · 0 评论 -
【十四】redis衍生数据结构之HyperLogLog
HyperLogLog:用极小空间完成独立数量统计。本质数据结构是字符串。命令pfadd key element [element...] 向HyperLogLog添加元素pfcount key [key...] 计算HyperLogLog的独立总数pfmerge deskkey sourcekey [sourcekey...] 合并多个HyperLogLog...原创 2018-08-07 00:25:45 · 164 阅读 · 0 评论 -
【一】linux安装redis(单机版)、3种启动方式、及配置文件介绍。
环境ubuntu16.04解压tar -zxvf redis-3.2.6.tar.gz修改文件夹名称mv redis-3.2.6 redis编译cd /app/redismake编译好后会看到redis.conf和src文件安装cd /app/redis/srcmake install 修改配置文件cd /app/redisvi ...原创 2018-06-13 00:53:59 · 3523 阅读 · 0 评论