
redis
文章平均质量分 79
Happywuw
学习如逆水行舟,不近则退!
由于目前公司有很不错的学习平台,以及个人笔记平台,暂停博客更新。但也会定期把笔记批量更新到博客。
展开
-
深入理解tair
tair是什么?Tair是由淘宝网自主开发的Key/Value结构数据存储系统,在淘宝网有着大规模的应用。在登录淘宝、查看商品详情页面或者在淘江湖和好友“捣浆糊”的时候,都在直接或间接地和Tair交互。Tair于2010年6月30号在淘宝开源平台上正式对外开源。Tair有四种引擎:mdb, rdb, kdb和ldb。分别基于四种开源的key/value数据库:memcached, Re...转载 2019-02-13 17:54:05 · 921 阅读 · 0 评论 -
Redis的数据结构—1.简单介绍,序集合SortedSet的实现,跳表的实现
Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。有序集SortedSet算是redis中一个很有...原创 2018-04-09 14:44:47 · 2745 阅读 · 0 评论 -
实现redis的key失效所引发的一系列问题
如何实现redis的key失效, 主动失效的流程,如何保证下一轮可以继续上一轮的检测,默认的通过检验的比例是多少,让你来实现,你打算怎么做。1.通过设置过期时间使redis的key失效 EXPIRE key 30上面的命令即为key设置30秒的过期时间,超过这个时间,我们应该就访问不到这个值了,到此为止我们大概明白了什么是缓存失效机制以及缓存失效机制的一些应用场景,接下来我们继续深入探究这个问题...原创 2018-03-26 12:06:26 · 8692 阅读 · 0 评论 -
Redis知识点汇总----(面试准备)
(1)什么是redis?Redis 是一个基于内存的高性能key-value数据库。 (2)Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的原创 2018-01-25 10:45:39 · 617 阅读 · 0 评论 -
Redis 集群的分库和分片(扩展性方面的问题)
之前一篇写了关于 Redis 的性能,这篇就写写我认为比性能更重要的扩展性方面的主题。如果再给我一次回到好几年前的机会,对于使用 Redis 我一开始就要好好考虑将来的扩展问题。就像我们做数据库分库分表,一旦决策了分库分表,通常一次就会分到位,比如搞上 8 或 16 个库,每个库再分 256 或 1024 个表。不管将来业务再怎么发展,基本这个量级的分片都足够应对,而且底层库可以做成逻辑的转载 2018-01-04 17:26:02 · 6841 阅读 · 2 评论 -
Redis
收集网上的一些关于Redis的知识点,包括Redis的优势、和Memcached的区别、常见性能问题等知识。内容来自网络,具体出处不可考。使用Redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2) 支持丰富数据类型,支持string,list,set,sorted set,hash(3转载 2017-12-06 23:59:37 · 436 阅读 · 0 评论 -
Redis的并发竞争问题如何解决
Redis的并发竞争问题,主要是发生在并发写竞争。考虑到redis没有像db中的sql语句,update val = val + 10 where ...,无法使用这种方式进行对数据的更新。假如有某个key = "price", value值为10,现在想把value值进行+10操作。正常逻辑下,就是先把数据key为price的值读回来,加上10,再把值给设置回去。如果只有一个连原创 2017-12-06 23:51:17 · 13735 阅读 · 0 评论 -
Redis、Memcache和MongoDB的区别
>>MemcachedMemcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。支持直接配置为session handle。Memcached的局限性:只支持简单的key/value数据结构,不像Redis可以支持丰转载 2017-10-16 13:57:42 · 394 阅读 · 0 评论 -
Redis的缓存策略和主键失效机制
作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略。1.EXPIRE主键失效机制在Redis当中,有生存期的key被称为volatile,在创建缓存时,要为给定的key设置生存期,当key过期的时候(生存期为0),它可能会被删除。(1)影响生存时间的一些操作生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET转载 2017-10-16 14:06:19 · 427 阅读 · 0 评论 -
Redis的数据结构—2.List结构做异步队列(消息队列)
使用过Redis做异步队列么,你是怎么用的?一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。如果对方追问可不可以不用sleep呢?list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。 如果对方追问能不能生产一次消费多次呢?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。如果对方追问pub/s...原创 2018-04-23 11:17:17 · 1697 阅读 · 0 评论 -
Redis技能—1.Redis分布式锁(这里介绍的方法居然是错误的)
使用过Redis分布式锁么,它是什么回事?(这里介绍的这两种方式其实在原子性方面都存在这漏洞:正确解法)先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一...原创 2018-04-23 19:04:40 · 822 阅读 · 0 评论 -
Redis技能——Codis
其实codis原理和官方cluster基本一致,但是:codis是选用了一系列已证明靠谱的方案来构建(如zk选主/存放元数据;采用无状态proxy,而不是smart client等)为方便运维提供了一系列工具/接口再加上公司内部的一定规模应用所以大家用它更多。作者:CafeBabe链接:https://www.zhihu.com/question/30857837/answer/169207128...原创 2018-05-14 23:22:54 · 1415 阅读 · 0 评论 -
2018面试——1.Redis专题
问题是多变的,但是知识点是不变的,而且是相互连通的。所以掌握了知识点融会贯通才能以不变应万变。融合往往在脑子里进行,楼主尽量通过遇到的面试题来把他们串起来。1、Redis有那些数据结构?你用过哪些?(这算是很普通的一个问题切入方式了)Redis的数据结构(包含了跳表的实现)用过的数据结构:字符串String,SortedSet。String的应用场景:作为字典key-value的形式存储,业务场景...原创 2018-04-25 16:17:53 · 534 阅读 · 0 评论 -
Redis技能—1.Redis分布式锁(正确版注意)
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足...转载 2018-04-25 17:46:09 · 425 阅读 · 0 评论 -
Redis技能—Redis的集群:集群的分片
分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。分片能做什么Redis 的分片承担着两个主要目标:允许使用很多电脑的内存总和来支持更大的数据库。没有分片,你就被局限于单机能支持的内存容量。允许伸缩计算能力到多核或多服务器,伸缩网络带宽到多服务器或多网络适配器。分片方式(多种)有很多不同的分片标准(criteria)。我们能找到许多...原创 2018-04-23 18:07:31 · 3476 阅读 · 0 评论 -
Redis技能—Redis的持久化
Redis如何做持久化的?bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在redis实例重启时,会使用bgsave持久化文件重新构建内存,再使用aof重放近期的操作指令来实现完整恢复重启之前的状态。对方追问那如果突然机器掉电会怎样?取决于aof日志sync属性的配置,如果不要求性能,在每条写指令...原创 2018-04-23 17:44:43 · 996 阅读 · 0 评论 -
IO多路复用—由Redis的IO多路复用yinch
linux IO多路复用有epoll, poll, select,epoll性能比其他几者要好。名词比较绕口,理解涵义就好。一个epoll场景:一个酒吧服务员(一个线程),前面趴了一群醉汉,突然一个吼一声“倒酒”(事件),你小跑过去给他倒一杯,然后随他去吧,突然又一个要倒酒,你又过去倒上,就这样一个服务员服务好多人,有时没人喝酒,服务员处于空闲状态,可以干点别的玩玩手机。至于epoll与...转载 2018-04-23 16:56:40 · 18214 阅读 · 6 评论 -
Redis技能—底层IO多路复用
这是网上找到的比较全的Reids IO多路复用资料,此部分其实和Redis的键失效机制有一定的衔接。最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首...转载 2018-04-23 16:00:13 · 2731 阅读 · 0 评论 -
Redis技能—2.Redis分布式锁(redis的key过期的实现)
上一篇文章介绍了Redis的分布式锁,主要是运用Redis的key失效机制来避免死锁问题的出现。这篇文章就来介绍一下Redis的Key过期实现。参看另一篇文章:https://blog.youkuaiyun.com/Happy_wu/article/details/79695415...原创 2018-04-23 14:52:02 · 1425 阅读 · 0 评论 -
Redis不同数据类型的的数据结构实现
我们知道Redis支持五种数据类型,分别是字符串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的。1.Redis中的redisObject对象Redis是使用C编写的,内部实现了一个struct结构体redisObject对象,通过结构体来模仿面向对象编程的“多态”,作为一个底层的数据支持转载 2017-10-16 14:05:33 · 318 阅读 · 0 评论 -
Redis笔记(八)Redis的持久化
Redis相比Memcached的很大一个优势是支持数据的持久化,通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效。Redis的持久化主要有快照Snapshotting和AOF日志文件两种方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。 RDB方式Re转载 2017-10-16 14:04:47 · 348 阅读 · 0 评论 -
Redis笔记(七)Java实现Redis消息队列
这里我使用Redis的发布、订阅功能实现简单的消息队列,基本的命令有publish、subscribe等。在Jedis中,有对应的java方法,但是只能发布字符串消息。为了传输对象,需要将对象进行序列化,并封装成字符串进行处理。使用Redis实现消息队列 封装一个消息对象123456转载 2017-10-16 14:03:53 · 549 阅读 · 0 评论 -
Codis集群的搭建与使用
一、简介 Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Redis一样使用,Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面客户端来说是透明的,可以简单的认为后边连接是一个内存无限大的Redis服务。Cod转载 2017-07-01 13:13:08 · 907 阅读 · 0 评论 -
Spring整合Redis作为缓存
采用Redis作为Web系统的缓存。用Spring的Cache整合Redis。一、关于redis的相关xml文件的写法xml version="1.0" encoding="UTF-8"?>beans xmlns="http://www.springframework.org/schema/beans" xmlns:cache="http://www.springfram转载 2017-05-22 13:33:12 · 2105 阅读 · 0 评论 -
redis安装部署
一、Redis介绍Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。转载 2016-12-01 14:48:01 · 631 阅读 · 0 评论 -
Java开发框架--spring-mvc.xml 配置详解
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springf原创 2017-03-10 23:07:25 · 565 阅读 · 0 评论 -
Jedis使用示例
Jedis 是 Redis 官方首选的 Java 客户端开发包。工作过程总结的一个示例,贴出来,如下:Java代码 package com.wujintao.redis; import java.util.Date; import java.util.HashMap; import java.util.Iterator; i转载 2017-03-27 16:04:51 · 517 阅读 · 0 评论 -
redis范围查询应用
需求根据IP找到对应的城市原来的解决方案oracle表(ip_country):查询IP对应的城市:1.把a.b.c.d这样格式的IP转为一个数字,例如为把210.21.224.34转为35246489942. select city from ip_country where ipstartdigital redis解决方案我们转载 2017-02-09 18:05:25 · 2415 阅读 · 0 评论 -
redis--键命令
Redis的keys命令用于管理键。使用Redis的keys命令语法如下所示:语法redis 127.0.0.1:6379> COMMAND KEY_NAME例子redis 127.0.0.1:6379> SET yiibai redisOKredis 127.0.0.1:6379> DEL yiibai(integer) 1在上面的例子中DEL是命令,而原创 2017-02-09 16:08:35 · 387 阅读 · 0 评论 -
redis--数据类型存储
Strings - 字符串Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可以存储任何东西,最大长度可达512兆。例子redis 127.0.0.1:6379> SET name "yiibai"OKredis 127.0.0.1:6379> GET name"yii原创 2017-02-09 15:57:06 · 460 阅读 · 0 评论 -
redis多个数据源配置
转载自:http://blog.youkuaiyun.com/weinichendian/article/details/512535061、spring-context.xml文件[html] view plain copyxml version="1.0" encoding="UTF-8"?> beans xmlns="ht转载 2017-06-22 14:12:19 · 4661 阅读 · 0 评论 -
Redis 该选择哪种持久化配置
转载自(总结的言简意赅):http://zheng-ji.info/blog/2016/03/10/gai-xuan-ze-na-chong-redischi-jiu-hua-pei-zhi/?utm_source=tuicool&utm_medium=referral这个标题或许会让你想起《黑客帝国》里经典的台词,你要选择蓝色药丸,还是红色药丸?Redis 是我们重度使用的一转载 2017-06-13 11:26:38 · 1058 阅读 · 0 评论 -
Redis笔记(六)Redis的消息通知
Redis的消息通知可以使用List类型的LPUSH和RPOP(左进右出),当然更方便的是直接使用Redis的Pub/Sub(发布/订阅)模式。1.使用List实现队列使用列表类型的LPUSH和RPOP命令(或者RPUSH和LPOP命令,右进左出),可以很方便的实现一个任务队列,但是需要设置定时去查询队列,并且可以使用对应的阻塞命令,如LPUSH和BRPOP命令,可以实转载 2017-10-16 14:03:12 · 742 阅读 · 0 评论 -
Redis笔记(五)Redis的事务
1.关系型数据库的事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。Atomic(原子性): 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。Consistency(一致性):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。Isolat转载 2017-10-16 14:02:19 · 281 阅读 · 0 评论 -
Redis笔记(三)Redis的数据类型
前面说过,Redis的一大特性是支持丰富的数据类型,这为更多的应用场景提供了可能。Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数据类型不支持嵌套。下面学习一下这五种数据类型的特点和简单应用。1.String 字符串String 数据结构是简单的 key-value 类型,value 不仅可以转载 2017-10-16 14:01:35 · 359 阅读 · 0 评论 -
Redis笔记(一)Redis简介
关于RedisRedis是一款开源的高性能键值对数据库,最初的作者是意大利的Salvatore Sanfilippo,他的github是 antirez ,Redis的源码同样托管在Git上:https://github.com/antirez/redis。目前,Vmware在资助着redis项目的开发和维护。Redis的特性键值对如dict["key"]="value转载 2017-10-16 13:59:25 · 305 阅读 · 0 评论 -
缓存穿透和缓存失效的预防和解决
缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,如果有人恶意破坏,很可能直接对DB造成影响,这就失去了缓存的意义。解决办法:对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所转载 2017-10-16 13:56:45 · 385 阅读 · 0 评论 -
Spring-data-redis: serializer实例
spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储StringRe转载 2017-06-26 15:17:03 · 909 阅读 · 0 评论 -
redis学习教程之一基本命令
参阅redis中文的 互动教程(interactive tutorial)来学习的。目录:全局操作 get getincr 自增del 删除expire 定时list 队列set 无序集合 sorted set 有序集合hashes 对象存储sort 排序sort命令描述sort一般用法使用alpha修饰符对字符串进行排序使用limit修饰符限制返回结果使用外部ke转载 2017-06-26 14:17:58 · 423 阅读 · 0 评论 -
redis线程模型
Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler):文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(c转载 2017-06-26 10:20:51 · 4715 阅读 · 0 评论