Redis
Redis
杨林伟
像火箭科学家一样思考!
展开
-
118 Storm实时交易金额计算案例分析
1.业务背景根据订单mq,快速计算双11当天的订单量、销售金额。2.架构设计及思路支付系统+kafka+storm/Jstorm集群+redis集群1、支付系统发送mq到kafka集群中,编写storm程序消费kafka的数据并计算实时的订单数量、订单数量2、将计算的实时结果保存在redis中3、外部程序访问redis进群中的数据实时展示结果3.数据准备订单编号、订单时间、支...原创 2019-08-13 09:27:55 · 620 阅读 · 0 评论 -
116分布式电商项目 - Redis集群(内存不足的问题)
如果redis服务器内存不够用,怎么办?Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?这个问题很显然的我就不回答了。假设我们有一个Redis服务器,服务器...原创 2019-07-22 17:55:14 · 1879 阅读 · 3 评论 -
115分布式电商项目 - Redis集群(故障转移)
1.故障机制1、集群中的每个节点都会定期的向其它节点发送PING命令,并且通过有没有收到回复判断目标节点是否下线;2、集群中每一秒就会随机选择5个节点,然后选择其中最久没有响应的节点放PING命令;3、如果一定时间内目标节点都没有响应,那么该节点就认为目标节点疑似下线;4、当集群中的节点超过半数认为该目标节点疑似下线,那么该节点就会被标记为下线;5、当集群中的任何一个节点下线,就会导致插...原创 2019-07-22 17:46:51 · 510 阅读 · 0 评论 -
114分布式电商项目 - Redis集群(节点增加删除)
新增集群节点再开启一个实例的端口为6382执行脚本:./redis-trib.rb add-node 192.168.56.102:6382 192.168.56.102:6379已经添加成功!查看集群信息:发现没有插槽数。接下来需要给6382这个服务分配插槽,将6379的一部分(1000个)插槽分配给6382:查看节点情况:删除集群节点想要删除集群节点中的某一个节...原创 2019-07-22 17:37:13 · 496 阅读 · 0 评论 -
113分布式电商项目 - Redis集群(插槽)
插槽的分配通过cluster nodes命令可以查看当前集群的信息:该信息反映出了集群中的每个节点的id、身份、连接数、插槽数等。当我们执行set abc 123命令时,redis是如何将数据保存到集群中的呢?执行步骤:接收命令set abc 123通过key(abc)计算出插槽值,然后根据插槽值找到对应的节点。(abc的插槽值为:7638)重定向到该节点执行命令整个Redis提...原创 2019-07-22 17:32:21 · 524 阅读 · 0 评论 -
112分布式电商项目 - Redis集群(创建)
即使有了主从复制,每个数据库都要保存整个集群中的所有数据,容易形成木桶效应。使用Jedis实现了分片集群,是由客户端控制哪些key数据保存到哪个数据库中,如果在水平扩容时就必须手动进行数据迁移,而且需要将整个集群停止服务,这样做非常不好的。Redis3.0版本的一大特性就是集群(Cluster),接下来将讲解Redis集群。1.架构(1)所有的redis节点彼此互联(PING-PONG机...原创 2019-07-22 17:23:38 · 609 阅读 · 0 评论 -
111分布式电商项目 - Redis集群(哨兵)
哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:1、监控主数据库和从数据库是否运行正常;2、主数据出现故障后自动将从数据库转化为主数据库;原理单个哨兵的架构:多个哨兵的架构:多个哨兵,不仅同时监控主从数据库,而且哨兵之间互为监控。环境当前处于一主多从的环境中:配置哨兵启动哨兵进程首先需要创建哨兵配置文件:vim sentinel.co...原创 2019-07-22 17:12:50 · 510 阅读 · 0 评论 -
110分布式电商项目 - Redis集群(主从复制)
先回顾Redis3.0安装过程(可直接绕过不看)yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tclmkdir -p /usr/local/src/rediscd /usr/local/src/rediswget h...原创 2019-07-22 17:01:46 · 553 阅读 · 0 评论 -
41分布式电商项目 - 关于Redis的几个问题
问题1:redis是内存版本的数据库,如果内存存储满了,怎么办?方案一:使用集群 – 增加服务器一定程度上可以解决内存不够用的情况但是随着网站用户的不断增多,用户所产生的的数据将会越来越多成本问题,服务器越多,并不意味着性能越高方案二:内存淘汰策略 – 最近不使用数据从内存中淘汰可以在redis.conf 配置内存淘汰策略:maxmemory 0 //表示使用所有内存maxm...原创 2019-07-09 16:59:47 · 624 阅读 · 0 评论 -
解决Redis编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
参考:https://www.cnblogs.com/richerdyoung/p/8066373.html原创 2019-07-09 11:39:40 · 5422 阅读 · 0 评论 -
34Redis - Redis常用工具下载
1、redis开发用到的jar包下载地址:https://pan.baidu.com/s/1OX3cK2JgpgCs_0ZIzfqqug提取码:1oq72、redis图形化工具下载地址:https://pan.baidu.com/s/1FK5bQLkffj3RUNMddJfivg提取码:4hy03、window版redis下载地址:https://pan.baidu.com/s/...原创 2019-05-09 14:34:58 · 462 阅读 · 0 评论 -
33Redis - RedisDesktopManager使用教程
1、右键管理员身份运行2、连接Redis 服务器2、连接成功可以对某一数据进行增删改查key的值原创 2019-05-09 14:27:21 · 2727 阅读 · 0 评论 -
32Redis - redis图形化工具安装教程
本文主要记录redis图形化工具的安装详细步骤。下载下载redis图形化工具【redis图形化工具下载地址】按下图安装步骤操作下一步同意协议选择安装目录正在安装下一步完成...原创 2019-05-09 14:16:31 · 880 阅读 · 0 评论 -
31Redis - 如何启动多个Redis
方法一:启动多个Redis进程启动时指定端口可在一台服务器启动多个Redis进程。(多个Redis实例)方法2:复制redis目录复制redis目录,然后编写redis.conf修改端口【推荐使用】步骤1: 拷贝redis目录步骤2: 修改redis.conf文件步骤3: 启动更多个redis关闭指定端口号的redis:...原创 2019-05-09 14:04:59 · 1556 阅读 · 0 评论 -
30Redis - redis.conf 配置详情
Redis支持很多的参数,但都有默认值原创 2019-05-09 13:58:07 · 260 阅读 · 0 评论 -
29Redis - redis使用场景
1、获取最新N个数据的操作比如典型的取你网站最新文章,通过下面的方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库中获取。(1)使用 LPUSH latest.comments <ID> 命令,向list集合中插入数据(2)插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存5000个ID(3)...原创 2019-05-09 12:01:09 · 263 阅读 · 0 评论 -
28Redis - AOF持久化配置
配置信息always #每次有数据修改发生时都会写入AOF文件everysec #每秒钟同步一次,改策略为AOF的缺省策略no # 从不同步,高效单是数据不会持久化重写AOF:若不满足重写条件时,可以手动重写,命令:bgrewriteaof 策略选择:数据恢复演示1、flushall操作 清空数据库2、及时关闭redis服务器(防止dump.rdb)。 shu...原创 2019-05-09 11:52:15 · 320 阅读 · 0 评论 -
27Redis - AOF持久化的优势与劣势
优势1、该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是,一旦系统出现了宕机现象,那么这一秒钟之内修改的数据会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确...原创 2019-05-09 11:43:32 · 517 阅读 · 0 评论 -
27Redis - RDB持久化配置说明Snapshotting
快照参数设置save 900 1 # 每900秒(15分钟)至少有1个key发生变化,则dump内存快照save 300 10# 每300秒(5分钟)至少有10个key发生变化,则dump内存快照save 60 10000# 每60秒(1分钟)至少有10000个key发生变化,则dump内存快照保存位置设置...原创 2019-05-09 11:30:57 · 445 阅读 · 0 评论 -
26Redis - RDB持久化的优势和劣势
优势1、一旦采用该方式,那么你的整个Redis数据库将包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性的故障,我们可以非常容易的进行修复。2、对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。3、性能最大化。对于Re...原创 2019-05-09 11:26:47 · 473 阅读 · 0 评论 -
25Redis - redis持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Rdis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将两者结合使用。1、RDB持久化(默认支持,无需配置)该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。2、AOF持久化该机制将以日志的形式记...原创 2019-05-09 11:01:12 · 240 阅读 · 0 评论 -
24Redis - 事务测试案例
正常执行事务步骤1: 在窗口1,设置num,并获得数据步骤2:在窗口2,num累加1,并获得数据步骤3:在窗口1,获得数据步骤4:在窗口1,开启事务,多次累加数据。步骤5:在窗口2,获得数据。步骤6:提交事务回滚失败命令...原创 2019-05-09 10:54:38 · 381 阅读 · 0 评论 -
23Redis - 事务
概念和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD 这三个命令是我们实现事务的基石。redis事务特征1、在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端请求提供任何服务,从而保证了事务中所有的命令被原子化执行。2、和关系型数据库中的事务相比,在Redis事务中如果有某一条...原创 2019-05-09 10:49:07 · 300 阅读 · 0 评论 -
22Redis - 消息订阅与发布
subscribe channel : 订阅频道,例如:subcribe mychat ,订阅mychat这个频道psubscribe channel : 批量订阅频道,例如:psubscribe s*,订阅以“s”开头的频道publish channel content: 在指定频道中发布消息,如 publish mychat ‘today is a new day’例子步骤一: ...原创 2019-05-09 10:20:38 · 678 阅读 · 0 评论 -
21Redis - 相关的redis命令
ping: 测试连接是否存活//执行下面命令时,我们停止redis服务器echo: 在命令行打印一些内容select: 选择数据库。Redis数据库编号从0~15,可以选择任意一个数据库来进行数据的存取。当选择16时报错,说明没有编号为16的这个数据库。quit: 退出连接dbsize: 返回当前数据库中key的数目**info:**获取服务器的信息和统计flushd...原创 2019-05-09 09:59:11 · 255 阅读 · 0 评论 -
21Redis - 多数据库特性
一个Redis实例可以包含多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库。一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库,如连接1号数据库:连接0号数据库:将newkey移植到1号库move newkey1 : 将当前库的ke...原创 2019-05-09 09:37:52 · 365 阅读 · 0 评论 -
20Redis - Java连接Redis
1.导入jar包2.单实例连接3.连接超时如果运行上面的代码,抛如下异常必须设置Linux防火墙vi /etc/sysconfig/iptablesservice iptables restart4.连接池连接原创 2019-05-09 09:31:43 · 276 阅读 · 0 评论 -
18Redis - Jedis介绍
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java、C、C#、C++、php、Node.js、Go等。在官方网站里列一些Java的客户端,有JRedis、Redisson、Jredis、JDBC-Reids等,其中官方推荐使用Jedis和Redisson。在企业中使用的最多的就是Jedis,下面我们重点学习下Jedis。Jedis同样也是托管在GitHub上,地址是...原创 2019-05-09 09:22:24 · 286 阅读 · 0 评论 -
17Redis - keys的通用操作
keys pattern : 获取所有与pattern 匹配的key,返回所有与该key匹配的keys。* 表示任意一个或多个字符,?表示任意一个字符。del key1 key2 …: 删除指定的key**exists key :**判断该key是否存在,1代表存在,0代表不存在。rename key newkey: 为当前的key重命名expire key: 设置过期时间,单位...原创 2019-05-08 20:07:32 · 300 阅读 · 0 评论 -
16Redis - 存储sortedset
概述Sorted-Set和Set类型极为相似,他们都是字符串的集合,都不允许重复的成员出现在一个Set中。他们之间的主要差别是Sorted-Set中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Set中的成员必须是唯一的,但是分数(score)确实可以重复的。在Sorted-Set中添加、删除...原创 2019-05-08 19:41:18 · 338 阅读 · 0 评论 -
15Redis - 存储set(使用场景)
1、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。2、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储...原创 2019-05-08 19:21:40 · 1360 阅读 · 0 评论 -
14Redis - 存储set(命令)
添加/删除元素sadd key values[value1、value2…]: 向set中添加数据,如果该key的值已有则不会重复添加。srem key members[member1、member2…]: 删除set中指定的成员获得集合中的元素smembers key: 获取set中所有的成员sismember key member: 判断参数中指定的成员是否在该set中,1表...原创 2019-05-08 19:16:25 · 1630 阅读 · 0 评论 -
13Redis - 存储set(概述)
在Redis中,我们可以将Set类型看作为没有排序的字符串集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或者判断某一元素是否存在等操作。需要说明的是,浙西操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。和List类型不同的是,Set集合中不允许出现重复元素,这一点和C++标准库中的Set容器是完全相同的。换句话说,如果多...原创 2019-05-08 19:01:35 · 357 阅读 · 0 评论 -
12Redis - 存储list(使用场景)
rpoplpush的使用场景:Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。假设一个应用程序正在执行LPUSH操作向链表中添加新的元素,我们通常将这样的程序称之为“生产者(Producer)”,而另外一个应用程序正在执行RPOP操作从链表中取出元素,我们称这样的程序为“消费者(Consumer)”。如果此时,消费者程序在取出消息元素后立刻崩溃,由于该消息已经被取出而且没有...原创 2019-05-08 17:58:06 · 1970 阅读 · 0 评论 -
11Redis - 存储list(命令)
两端添加lpush key values[value1 value2…]: 在指定的key所关联的list头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。rpush key values[value1、value2…]: 在该list的尾部添加元素查看列表lrange key st...原创 2019-05-08 17:49:38 · 1877 阅读 · 0 评论 -
10Redis - 存储list(原理)
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的醉倒元素数量是4294967295,从元素插入和删除的效率视角来看,如果我们是在链表的两头插...原创 2019-05-08 17:07:01 · 1266 阅读 · 1 评论 -
09Redis - 存储hash
概述Redis中的Hash类型可以看成具有String Key 和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。赋值**hset key field value:**为指定的key设定fiel...原创 2019-05-08 16:44:45 · 419 阅读 · 0 评论 -
08Redis - 存储String
概述字符串类型但是redis中最为基础的存储类型,它在Redis中式二进制安全的,这便意味着改类型 存入和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。常用命令赋值**set key value:**设定key持有指定的字符串value,如果该key存在则进行覆盖操作。总是返回“OK”取值get key: 获取key的value。如果与该key...原创 2019-05-08 16:23:00 · 481 阅读 · 0 评论 -
07Redis - 数据结构介绍
redis 是一种高级的key-value的存储系统,其中value支持五种数据类型字符串(String)哈希(hash)字符串列表(list)字符串集合(set)有序字符串集合(sorted set)关于key的定义,需要注意几点:key不要太长,最好不要操作1024字节,这不仅会消耗内存还会降低查找效率key不要太短,如果太短会降低key的可读性在项目中,key最好有一...原创 2019-05-08 16:01:58 · 260 阅读 · 0 评论 -
06Redis - Redis的使用
先开启Redis服务器./bin/redis-server ./redis.conf连接客户端在redis的安装目录中有redis的客户端,即redis-cli(redis Command Line Interface),它是Redis自带的基于命令行的Redis客户端。redis -cli -h ip地址 -p 端口向Redis服务器发送命令redis-cli 连上了redi...原创 2019-05-08 15:04:21 · 303 阅读 · 0 评论