redis分布式

分布式ID设计方案

喜夏-厌秋 提交于 2020-02-29 19:37:38
分布式ID的定义: 全局唯一 有序性 有意义 高可用 紧凑性 序列号的可预测性 方案1:使用数据库递增的顺序 最常见的方式。利用数据库,全数据库唯一。 优点: 1)简单,代码方便,性能可以接受。 2)数字ID天然排序,对分页或者需要排序的结果很有帮助。 缺点: 1)不同数据库语法和实现不同,数据库迁移的时候或多数据库版本支持的时候需要处理。 2)在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成。有单点故障的风险。 3)在性能达不到要求的情况下,比较难于扩展。 4)如果遇见多个系统需要合并或者涉及到数据迁移会相当痛苦。 5)分表分库的时候会有麻烦。 优化方案: 1)针对主库单点,如果有多个Master库,则每个Master库设置的起始数字不一样,步长一样,可以是Master的个数。比如:Master1 生成的是 1,4,7,10,Master2生成的是2,5,8,11 Master3生成的是 3,6,9,12。这样就可以有效生成集群中的唯一ID,也可以大大降低ID生成数据库操作的负载。 方案2:使用UUID( Universally Unique Identifier ) 常见的方式。可以利用数据库也可以利用程序生成,一般来说全球唯一。 优点: 1)简单,代码方便。 2)生成ID性能非常好,基本不会有性能问题。 3)全球唯一,在遇见数据迁移,系统数据合并

干货分享,值得收藏:搞懂这些redis知识点,还怕干不过面试官?

爷,独闯天下 提交于 2020-02-28 00:49:45
是数据结构而非类型 很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义。redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们按照合理的格式解码后,可以变成一个字符串,整数或对象,此时才具有数据类型。 这一点必须要记住。所以任何东西只要能转化成字节数组(byte[])的,都可以存到redis里。管你是字符串、数字、对象、图片、声音、视频、还是文件,只要变成byte数组。 因此redis里的String指的并不是字符串,它其实表示的是一种最简单的数据结构,即一个key只能对应一个value。这里的key和value都是byte数组,只不过key一般是由一个字符串转换成的byte数组,value则根据实际需要而定。 在特定情况下,对value也会有一些要求,比如要进行自增或自减操作,那value对应的byte数组必须要能被解码成一个数字才行,否则会报错。 那么List这种数据结构,其实表示一个key可以对应多个value,且value之间是有先后顺序的,value值可以重复。 Set这种数据结构,表示一个key可以对应多个value,且value之间是没有先后顺序的,value值也不可以重复。 Hash这种数据结构,表示一个key可以对应多个key-value对,此时这些key

NoSQL非关系型数据库Redis (键值对(key-value)数据库) 学习笔记

不问归期 提交于 2020-02-26 15:39:55
redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 1.1.1. NOSQL和关系型数据库比较 优点: 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。 2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。 3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。 4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。 缺点: 1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语

redis

删除回忆录丶 提交于 2020-02-26 07:45:52
1.简单描述一下什么是redis? redis简单说就是一个内存数据库,因为在内存中,所以读写速率快。 2.为什么要用缓存? 解决高性问题,用户第一次访问数据是从数据库中读取,若存在缓存,则直接从缓存中获取数据,提高了性能 解决高并发问题,缓存的并发量远远大于直接访问数据库的并发量,把一部分数据放到缓存中,有利于解决高并发问题 3.为什么要用redis而不用map/guava做缓存呢? 缓存分为本地缓存与分布式缓存,java自带的map/guava是本地缓存,具有轻量级,快速特点,生命周期随着jvm销毁而结束,并且在多实例情况下会保存多个缓存,不具有一致性; 使用redis或者memcached为分布式缓存,多实例情况下公用一个缓存,具有一致性,缺点是整个程序比较复杂。 来源: oschina 链接: https://my.oschina.net/u/4434424/blog/3163940

Redis详解

牧云@^-^@ 提交于 2020-02-25 01:57:19
1. Redis 概述 Redis远程字典服务器; Redis 是一个高性能(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库; Redis 三个特点: Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候,可以再次加载进行使用; Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储; Redis 支持数据的备份,即master-slave模式的数据备份; 2. Redis 数据类型 String(字符串) Hash(哈希) List(列表) Set(集合) Zset(sorted set: 有序集合) 2.2 Redis 键(key) set 键名 键值: 向数据库中存储键值对;例: 127.0.0.1:6379> set name king OK 127.0.0.1:6379> get name "king"type key: 查看key的类型;例: 127.0.0.1:6379> type name stringexists 键名: 判断某个key是否存在,存在,返回"1";不存在,返回"0";例: 127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> exists user (integer) 0

Redis 之持久化

♀尐吖头ヾ 提交于 2020-02-24 14:27:29
目录 一.前言 二.持久化类型之 RDB 三.持节化类型之AOF 四.Redis 持久化类型的抉择 五.持久化的恢复 六.持久化问题的分析定位与优化 七.回顾总结 一.前言 首先,来回顾下前面文章的知识.Redis的特性之一就是读取速度快,因为它的数据是存储在内存中的,但是这样还有它的不足之处,那就是当你服务器断电时或者进程产生进退后,那么你所存储在内存中的数据也就荡然无存了,可是这样会给我们带来丢失数据的危险.而Redis正是考虑到了这一点,所以便有了持久化的功能.而持久化的作用正像它的名称一样,便是为了保持数据的持久. Redis的持久化类型有两种,一种是全量(RDB),一种是增量(AOF),今天这篇文章中便来聊聊这两种类型的特性和他们的优缺点,以及我们在这两种类型中如何做选择. 二.持久化类型之 RDB 1.什么事RDB? RDB是把Redis中的完整的数据生成一个快照,然后保存到硬盘当中,那么这就是一个RDB文件了,不过这个RDB文件是一个二进制的文件.当你的Redis服务重启时,它会去载入这样的RDB文件.其作用便是为了备份数据和恢复数据,当然它也是一个复制的媒介,对于Redis的主从复制正式利用这个文件来完成的. 2.触发机制 RDB的触发方式有两种,分别是:save(同步)和bgsave(异步).因为save的触发方式是同步的,那么它会阻塞当前的Redis服务器

redis学习笔记

僤鯓⒐⒋嵵緔 提交于 2020-02-24 02:52:19
问题一:项目中缓存是如何使用的?缓存如果使用不当会造成什么结果? 1.用缓存,主要有俩用途, 高性能 和 高并发 ,一般的中小型项目考虑 高并发 2.常见的缓存问题有以下三个: 缓存与数据库数据不一致 缓存雪崩 缓存穿透 缓存并发竞争 问题二:redis和memacached 有什么区别?Redis的线程模型是什么,为什么单线程的Redis比多线程的memacached效率要高得多? redis 和 memacached的区别? Redis支持的服务端的数据操作:Redis相比memacached来说,拥有更多的数据结构并支持更丰富的操作,通常在memacached中,你需要将数据拿到客户端来进行类似的修改在set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的get/set 一样高效。所以如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。 内存使用对比:使用简单的key -value 存储的话,memacached的内存利用率高;而Redis采用哈希结构来做key -value 存储,由于其组合式的压缩,其内村利用率要更高; 性能对比:由于redis是单核的,而memacached可以使用多核,所以平均每一个核上Redis在存储大量小数据时比memcached性能更高。而在100K以上数据

redis集群的搭建详细教程

我们两清 提交于 2020-02-23 11:10:25
1 Redis-cluster架构图 redis-cluster投票: 容错 ( 至少要三个才可以,才能超过半数 ) 架构细节 : (1) 所有的 redis 节点彼此互联 (PING-PONG 机制 ), 内部使用二进制协议优化传输速度和带宽 . (2) 节点的 fail 是通过集群中超过半数的节点检测失效时才生效 . (3) 客户端与 redis 节点直连 , 不需要 中间 proxy 层 . 客户端不需要连接集群所有节点 , 连接集群中任何一个可用节点即可 。 (4) redis-cluster 把所有的物理节点映射到 [0-16383]slot 上 ,cluster 负责维护 node<->slot<->value Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时, redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数, 这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽, redis 会根据节点数量大致 均等的将哈希槽映射到不同的节点 搭建集群,极限情况也就最多 16384 个节点 。 2 Redis集群的搭建 Redis集群中至少应该有 3 个节点。要保证集群得 高可用 ,需要每个节点有 1 个备份机。 Redis集群需要6台服务器。 搭建伪分布式

redis集群搭建

泄露秘密 提交于 2020-02-23 10:57:00
redis集群原理: redis-cluster(集群)架构图 redis-cluster投票: 容错 架构细节 : (1) 所有的 redis 节点彼此互联 (PING-PONG 机制 ), 内部使用二进制协议优化传输速度和带宽 . (2) 节点的 fail 是通过集群中超过半数的节点检测失效时才生效 . (3) 客户端与 redis 节点直连 , 不需要中间 proxy 层 . 客户端不需要连接集群所有节点 , 连接集群中任何一个可用节点即可 (4)redis-cluster 把所有的物理节点映射到 [0-16383]slot 上 ,cluster 负责维护 node<->slot<->value Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时, redis 先对 key 使用 crc16 算法算出一个结果,然后把结 果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽, redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 Redis 集群的搭建: redis 集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。 redis 集群至少需要 6 台服务器。 搭建伪分布式。可以使用一台虚拟机运行 6 个 redis 实例。需要修改 redis

redis集群搭建-3.0/4.0版本

喜夏-厌秋 提交于 2020-02-23 10:55:22
1. Redis的安装 1.1. Redis的安装 Redis是c语言开发的。 安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到linux系统。 第二步:解压缩redis。 第三步:编译。进入redis源码目录。make 第四步:安装。make install PREFIX=/usr/local/redis PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下 1.2. 连接redis 1.2.1. redis的启动: 前端启动:在redis的安装目录下直接启动redis-server [root@localhost bin]# ./redis-server 后台启动: 把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下 [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/ 修改配置文件: [root@localhost bin]# ./redis-server redis.conf 查看redis进程: [root@localhost bin]# ps aux|grep redis root 5190 0.1 0.3 33936