redis分布式

Redis生成分布式自增ID

匿名 (未验证) 提交于 2019-12-03 00:44:02
使用redis的RedisAtomicLong可以生成分布式自增的ID值。 SequenceFactory是封装的一个工具类,利用redisTemplate生成自增ID,实现如下: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.support.atomic.RedisAtomicLong; import org.springframework.stereotype.Service; import java.util.Date; import java.util.concurrent.TimeUnit; @Service public class SequenceFactory { @Autowired RedisTemplate<String, String> redisTemplate; /** * @param key * @param value * @param expireTime * @Title : set * @Description : set cache. */ public void set

非关系型数据库(NoSQL)――Redis安装及部署详解

匿名 (未验证) 提交于 2019-12-03 00:44:02
在现在的互联网大潮中,NoSQL可谓是家喻户晓,Redis作为NoSQL中及其重要的一员,使我们走向架构道路的一条必经之路。作为运维工程师来说,是必须要掌握的! 既然提到了Redis数据库是非关系型数据,并且需要掌握Redis数据库。那么关于关系型数据库与非关系型数据库的基本概念是必须要了解的。 一、关系型数据库与非关系型数据库的基本概念: 数据库按照其结构可以分为关系型数据库与其他数据库,而这些其他数据库,我们统称为非关系型数据库。 1.关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织,现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL(结构化查询语言)语句就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。 2.非关系型数据库 NoSQL: 意思是“不仅仅是SQL”,是非关系型数据库的总称。主流的NoSQL数据库有Redis、MongDB、Hbase、CouhDB等。这些数据库,他们的存储方式,存储结构以及使用场景都是完全不同的

Redis入门及应用

匿名 (未验证) 提交于 2019-12-03 00:44:02
一、什么是Redis 1、Redis概述 在我们日常的Java Web开发中,都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题。可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。 2、NoSQL技术 为了克服上述的问题,Java Web项目通常会引入NoSQL技术,这是一种 基于内存的数据库 ,并且提供一定的持久化功能。Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。 3、Redis功能 缓存 ,毫无疑问这是Redis当今最为人熟知的使用场景,再提升服务器性能方面非常有效。 a) 排行榜 ,如果使用传统的关系型数据库来做,非常麻烦

redis 小弟入门

匿名 (未验证) 提交于 2019-12-03 00:44:02
概念背景: 传统数据酷MySQL,采用遵循 ACID规则 事务的原子性(Atomicity) :是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止。 事务的一致性(Consistency) :是指事务的运行并不改变数据库中数据的一致性。 独立性(Isolation) :事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。 持久性(Durability) :事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故回滚。 Redis 非关系型数据库,遵循的是 一致性(C):在 分布式系统 中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) 可用性(A):在 集群中 一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备 高可用性 ) 分区容错性(P):以 实际效果 而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。 Redis 类型不多,也很奇葩,也很好用 String set key value string类型是二进制安全的,意redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。 string类型是 Redis最基本 的数据类型,

关于redis主从架构重新选举master带来的问题

匿名 (未验证) 提交于 2019-12-03 00:44:02
redis嘛,主要问题就是关乎数据的问题;分布式嘛,主要问题就是C(一致性)A(可用性)P(分区容错性)。 在这里考虑两个问题: 数据不一致,数据丢失。 数据不一致:    有时候master会挂那么十几秒钟或者几秒钟然后又恢复正常,然后redis的调用者就觉得redis的master是没问题的,他就接着使用这玩意,但是哨兵在这段时间内已经把这个master淘汰出去,不但如此还选了一个新的master供redis集群内部共享数据。这样子就带来了一个问题,新的master会很自以为是的同步它的数据给他的slave,但是redis的调用者并不向这个新的master发送任何数据,也就是他的数据压根就不更新,导致他的slave数据也无法更新,最后实际对外提供服务的是那个被哨兵淘汰的master。   这就是传说中的 redis脑裂 倘若集群部署的相对完善的话,新选举的master还应向被哨兵淘汰的master同步数据,并且将被哨兵淘汰的master置为新master的一个slave,那就更有意思了,master在被淘汰之前还在工作,也就是还在接收数据并且试图将数据写入自己的缓存中,直到新的master开始向它同步数据,为了同步数据,旧的master会将自己的数据同步成新的master一样,带来的问题就是旧的master数据丢失

redis

匿名 (未验证) 提交于 2019-12-03 00:44:02
使用redis 我们介绍一下redis的使用吧经过按部就班的安装之后,服务端是默认开启的,可以查看本地服务,找到Redis 那我们也可以通过cmd终端开启客户端 ,需要先切盘,cd 是在本盘中更换目录 盘d:切到d盘,然后更换目录 cd e:/redis 这样就可以输入开启命令行了 Redis-cli,可以select 加上索引更换db,默认是db0。 也可以通过可视化软件,redis desktop manage来操作redis数据库,我们不妨对比navicat,更有助于我们掌握理解知识。 redis的数据类型 Redis支持五种数据类型: string (字符串), hash (哈希), list (列表), set (集合)及 zset Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。 Redis的Set是string类型的无序集合。值不重复。 sadd 如果 key 对应的 set 不存在则返回错误。 Redis zset 和 set 一样也是string类型元素的集合。且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。 python连接redis 方式一

redis 数据库

匿名 (未验证) 提交于 2019-12-03 00:44:02
一 简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步 支持的数据类型(5大数据类型) redis={ k1:'123', 字符串 k2:[1,2,3,4], 列表/数组 k3:{1,2,3,4} 集合 k4:{name:lqz,age:12} 字典/哈希表 k5:{('lqz',18),('egon',33)} 有序集合 } 特点: 可以持久化 单线程,单进程 安装和使用: 安装模块:pip3 intall redis from redis import Redis from redis import ConnectionPool Redis实例化产生对象,就是拿到一个redis的连接 conn=Redis() 操作redis

Nosql 数据库 MemCache、Redis、MongoDB 的区别

匿名 (未验证) 提交于 2019-12-03 00:43:02
1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存; 2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化; 3.mongodb 是 bson 结构、介于 rdb 和 nosql 之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储。 转载请标明出处: Nosql 数据库 MemCache、Redis、MongoDB 的区别 文章来源: https://blog.csdn.net/tlsxtk/article/details/92084613

《Redis高阶应用》讲座总结

匿名 (未验证) 提交于 2019-12-03 00:43:02
数据结构延展 常用数据结构:String,Hash,List,Set,Sorted Set(不聊这些) 高级数据结构:Bitmaps,hyperloglog,GEO 单机拓展到分布式 为什么要分区:性能瓶颈、资源瓶颈、横向扩展 分区方案 客户端自定义hash计算Redis的地址 一致性hash环 槽(sharding) 分布式管理 redis主从 redis哨兵 redis集群 创建集群: ./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 添加节点: ./redis-trib.rb add-node 127.0.0.1:7001 127.0.0.1:6380 ./redis-trib.rb reshard 127.0.0.1:7001 删除节点: ./redis-trib.rb reshard 127.0.0.1: 6383 ./redis-trib.rb del-node 127.0.0.1: 6383 node_id 切换为从节点: redis-cli -c -p 7001 cluster replicate node_id 高并发项目中的缓存策略 缓存淘汰 noeviction

高级开发不得不懂的Redis Cluster数据分片机制

匿名 (未验证) 提交于 2019-12-03 00:43:02
Redis 集群简介 Redis Cluster 是 Redis 的分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 分布式方面的需求。 Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。 如上图所示,该集群中包含 6 个 Redis 节点,3主3从,分别为M1,M2,M3,S1,S2,S3。除了主从 Redis 节点之间进行数据复制外,所有 Redis 节点之间采用 Gossip 协议进行通信,交换维护节点元数据信息。 一般来说,主 Redis 节点会处理 Clients 的读写操作,而从节点只处理读操作。 数据分片策略 分布式数据存储方案中最为重要的一点就是数据分片,也就是所谓的 Sharding。 为了使得集群能够水平扩展,首要解决的问题就是如何将整个数据集按照一定的规则分配到多个节点上,常用的数据分片的方法有:范围分片,哈希分片,一致性哈希算法和虚拟哈希槽等。 范围分片假设数据集是有序,将顺序相临近的数据放在一起,可以很好的支持遍历操作。范围分片的缺点是面对顺序写时,会存在热点。比如日志类型的写入,一般日志的顺序都是和时间相关的,时间是单调递增的,因此写入的热点永远在最后一个分片。