一.Redis安装(Linux)

  1.在官网上下载Linux版本的Redis(链接https://redis.io/download)

  

  2.在Linux的/usr/local中创建Redis文件夹mkdir redis(一般第三方软件放在/usr/local中),上传文件到该文件夹中(securityCRT中输入rz命令即可)

  3.解压文件,并进入解压后的文件夹中,执行make命令,完毕后可以查看该文件夹中的目录如下

      

  4.可以进入src文件夹中,执行./redis-server即可启动Redis,例如(注意这种方式启动Redis 使用的是默认配置)

      

  5.可以通过启动参数告诉Redis使用指定配置文件来启动

./redis-server ../redis.conf

  6.修改Redis.conf配置(先退出redis)

    找到Redis.conf文件:

      1.注释以下绑定的主机地址 # bind 127.0.0.1

      2. daemonize设置为yes

      3.设置密码requirepass 123456

  7.在src文件中,连接Redis,例如:(-h是主机地址,-p是端口号,-a是密码,--raw是防止存取中文出现编码格式问题)

./redis-cli -h 127.0.0.1 -p 6379 -a "123456" --raw

  如果能ping通,则说明启动成功(这里可能是密码太简单了,有一个警告)

    

  8.远程连接redis (这里使用的是RedisClient),如下所示

  

二.Redis基本数据类型

  Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及zset(sorted set:有序集合)。

  其相应的设置及获取操作如下:

    String:set和get

    Hash:hmset和hget

    List:lpush和lrange

    Set:sadd和smembers

    zset:zadd和zrangebyscore

三.Jedis操作Redis(Java操作Redis)(案例)

  <!--导入相应的依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
Jedis  jedis = new Jedis ("192.168.2.129",6379); //连接redis
jedis.auth("123456"); //redis的密码(如果没有,可以不填)
jedis.set("name","zs");//添加String类型数据,其他方法可以参考相关的api文档

四.SpringBoot整合Redis

  项目导入相关的依赖后,首先在配置文件中配置redis如下

spring.redis.host=192.168.2.129
spring.redis.port=6379
#使用第0个库
spring.redis.database=0
spring.redis.password=123456
#最大连接时间
spring.redis.timeout=5000
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0

  编写测试类:(使用模板)

    

  注意:当需要保存对象的时候,创建一个People类,并直接把这个对象放在redis中会报错

    

    

    如下图所示:

    

    解决办法:让这个对象实现序列化接口

    Redis存放对象:使用String类型,采用Json格式,将对象序列化后转成Json格式放在Redis中,如果需要获取对象,把Json的值取出,并反序列化成对象)

五.Redis高可用机制

  方法:Redis主从复制、Redis持久化机制、哨兵机制、keepalived等的支持。

  (1)Redis主从复制:(Redis支持一主多从)

    主从复制作用有:数据备份,读写分离,集群,容错机制,提高可用性等。(这些点与MySQL主从复制的目的类似)

    主服务器权限:读和写

    从服务器权限:读

    如何实现Redis主从复制:

      只需要在从服务器中修改配置文件redis.conf文件,添加(主服务器的IP地址)

      slaveof 192.168.2.129 6379

      如果主服务器有密码例如123456,则需要修改 masterauth 123456

  (2)Redis持久机制:

    由于Redis的数据都存放在内存中,如果没有配置持久化,Redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。比如说,服务器重启,session是会失效的,但是如果将session保存在redis中,就可以解决session失效的问题。

    Redis提供三种方式进行持久化:(Redis默认开启了RDB存储方式进行持久化,以一个dump.rdb文件存储)

      RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化):

        特征:非实时存储,二进制文件的方式进行存储,体积小,但每次备份会覆盖上一次备份。

        注意:它开启持久化条件是在一定时间内,key和value达到一定的存储次数。

      AOF持久化(原理是将Reids的操作日志以追加的方式写入文件):

        特征:实时存储,日志文件方式进行存储,体积大,安全,更适用于备份。

        开启:在redis.conf文件中,将appendonly设置为yes

      RDB-AOF混合模式

  (3)哨兵机制:   

    Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
      监控: 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

      提醒当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

      自动故障迁移:当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

    修改sentinel.conf配置文件:

sentinel monitor mymast  192.168.2.129 6379 1  #主机IP 端口号 选举次数
sentinel auth-pass mymaster 123456 #配置主服务器的密码(如没设置密码,可以省略)
sentinel down-after-milliseconds mymaster 500 #修改服务器挂掉后检测时间

    启动哨兵机制(以加载配置文件的方式):

./redis-sentinel ../sentinel.conf

  (4)keepalived:

    使用keepalived监听,如果服务器全部宕机或其他问题,可以设置自动重启服务器,如果还未解决问题,可以设置发送邮件提示开发人员。

六.Redis事务

  Redis支持事务,连接进入redis后,可以通过multi命令开启事务。Redis 事务的执行并不是原子性的,它会批量执行,中间出错也不影响其他事务(不会回滚)。案例:

    

    exec是提交事务,若未提交,则数据不会保存在Redis中,使用get自然也就获取不到。执行完毕后自动退出事务。

七.Redis和数据库数据一致性

  三种更新策略:

    先更新数据库,再更新缓存(基本不考虑)

    先删除缓存,再更新数据库

    先更新数据库,再删除缓存(重点,一般使用该方式)

  因为写和读是并发的,没法保证顺序,如果删了缓存,还没有来得及写库,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。如果先写了库,再删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。 如果是redis集群,或者主从模式,写主读从,由于redis复制存在一定的时间延迟,也有可能导致数据不一致。

  优化方案:

    双删加超时:在写库前后都进行redis.del(key)操作,并且设定合理的超时时间。

  注意:如果项目对缓存的要求是强一致性的,那么建议不要使用缓存。

八.Redis通讯协议(RESP )

  RESP 是redis客户端和服务端之前使用的一种通讯协议;

  RESP 的特点:实现简单、快速解析、可读性好

  客户端发送命令的格式:

    简单字符串:以 + 开头,例如  eg: "+ok"

    错误信息:以 - 开头

    整数类型:以 : 开头

    大字符串类型:以 $ 开头

    数组类型:以 * 开头

Redis总结1的更多相关文章

  1. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  2. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  3. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  4. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  5. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  6. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

  7. redis 学习笔记(1)

    redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...

  8. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  9. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  10. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

随机推荐

  1. is幻梦 Linux命令之文件和目录操作命令(二)——查看文件内容cat、more、less、tail、head

    一.cat命令 用法:cat [选项][文件] 1.主要用来查看文件内容 2.-n 在文件内容的每一行上加上行号 3.再不加任何选项和文件名的时候,将标准输入的内容复制到标准输出 这个时候一般用于重定 ...

  2. SVN+MAVEN项目打包

    题记:项目打包bash脚本 环境准备 maven版本:3.5.2 mvn -v #查看maven的版本信息 svn版本:1.4.0 svn --version #查看svn版本信息 1.update_ ...

  3. 使用Navicat为Oracle新增用户

    步骤请参考帖子https://www.cnblogs.com/franson-2016/p/5925593.html 需要注意的是新增用户时不能使用小写,否则不能登录,之前新增一个小写的用户名,授予c ...

  4. ios8唤不起APP的问题

    https://stackoverflow.com/questions/27526966/ios-8-window-location-href-doesnt-work-with-url-scheme ...

  5. Python flask 与 GO WEB服务器性能对比

    测试环境: 系统: CentOS 7.1 Mem: 8G CPU: 虚拟机16核 Python版本: python3.6 Flask版本: 0.12.2 Golang版本: 1.6.3 1.首先写一个 ...

  6. 利用js代码自动删除稿件的普通弹幕

    事情的起因是在b站投稿了一个高级弹幕测试的视频(av9940487),但是由于b站的弹幕池机制是新的弹幕顶掉旧的弹幕,所以导致一些人发的高级弹幕很快就被顶掉了. 所以就想着写个脚本来自动删除属性为普通 ...

  7. PJzhang:我发现一个有两个答案的数独题

    猫宁!!! 最近做数独题,发现了一个答案不唯一的数独,之前对此类数独有所耳闻,但是没有亲手发现,碰巧发现一个,很是欣喜.   下面展示了两个答案   第一个 ​​   第二个 ​​   绿色标签是答案 ...

  8. 云计算共享组件--消息队列rabbitmq(3)

    一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...

  9. Python报错module 'scipy.misc' has no attribute 'xxx'

    Python报错module 'scipy.misc' has no attribute 'imresize' 解决办法: 安装Pillow包,命令如下: pip install Pillow 然后重 ...

  10. 使用PowerShell 在域内远程安装DFS

    # 安装DFS 命名空间.DFS 管理工具.DFS 复制# author:lttr <www.cnblogs.com/GoCircle> # date:2019-08-09 # eg. # ...