白贺翔—互联网应用架构师公开课

第一次课

搭建redis

1、以源码包为例:将redis源码安装包上传至服务器

2、解压 tar –zxvf 源码包

3、进入解压后的文件进中,make进行编译,编译成可执行的程序(make需要安装gcc,不然编译会报错:缺少gcc

4、编译后,进入src文件夹中进行make install

白贺翔—互联网应用架构师公开课_第1张图片

5、建立两个文件夹存放redis命令和配置文件(etc和bin文件夹)

6、将解压包下的redis.conf文件移动到etc文件夹下

7、将src下的mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server文件移动到bin文件夹下

白贺翔—互联网应用架构师公开课_第2张图片

8、前台启动redis

白贺翔—互联网应用架构师公开课_第3张图片

9、设置后台启动

修改etc文件夹下的配置文件redis.conf,改成yes

小技巧:在vim编辑器模式下查找字符串

vim +/字符串 需要编辑的文件路径(这种方式被查找字符串会高亮显示)

或者

在vim模式下进行:/需要查找的字符串

白贺翔—互联网应用架构师公开课_第4张图片

10、后台启动(以配置文件的方式启动),查看进程

11、启动客户端进行数据操作

12、退出服务器端

 

String数据类型

redis一共分为五种基本数据类型:String、Hash、List、Set、Zset

String类型是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。

set和get方法

    设置值:set name bhz

    获取值:get name  (设置name 多次会覆盖)

    删除值:del name

使用setnxno exist

    name 如果不存在进行设置,存在就不需要进行设置了,返回0

使用setexexpired

    setex color 10 red 设置color的有效期为10秒,10秒后返回nil(在redis里nil表示空)

使用setrange替换字符串

    set email [email protected]

    setrange email 10 ww(10表示从第几位开始替换,后面跟上替换的字符串)

使用一次性设置多个和获取多个值得mset、mget方法:

    mset key1 bhz key2 bai key3 28;对应的mget key1 key2 key3方法对应的也有msetnx和mget方法。

一次性设置和取值的getset方法:

    set key4 cc

    getset key4 changchun 返回旧值并设置新值得方法。

incr和decr方法:对某一个值进行递增和递减

incrby和decrby方法:对某个值进行指定长度的递增和递减

append [name]方法:字符串追加方法

strlen [name]方法:获取字符串的长度

Redis是单线程的

Hash数据类型

Hash类型是String类型的field和value的映射表,或者说一个String集合。它的特点是适合存储对象,相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象。

形如:hset myhash field1 hello(含义是hset是hash集合,myhash是集合名字,field1是字段名 hello是其值)使用hget myhash field1 获取内容,也可以存储多个值,hmset可以进行批量存储多个键值对:hmset myhash sex nan addr beijing,可同样也有hsetnx,和setnx大同小异。

hincrby和hdecrby:集合递增和递减

hexists:是否存在key,如果存在返回,不存在返回0

hlen:返回hash集合里的所有的键值对

hdel:删除指定hash的field

hkeys:返回hash里所有的字段

hvals:返回hash的所有value

hgetall:返回hash里所有的key和value

List数据类型

List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。更详细的说,List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,list的设计非常简单精巧,即可以作为栈,又可以作为队列。满足绝大多数需求。

lpush方法:从头部加入元素(栈)先进先出

    形如:lpush list1 "hello" lpush list1 "world"

               lrange list1 0 -1(表示从头取到末尾)

rpush方法:从尾部加入元素(队列)先进先出

    形如:rpush list2 "beijing" rpush list2 "sxt"

               lrange list2 0 -1

linsert方法:插入元素

    形如:linsert list3 before [集合的元素] [插入的元素]

白贺翔—互联网应用架构师公开课_第5张图片

Set数据类型

set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集、并集、差集。

sadd方法:向名称为key的set中添加元素

  小结:set集合不允许重复元素,smembers查看set集合的元素

srem方法:删除set集合元素

spop方法:随机返回删除的key

sdiff方法:返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准)

sdiffstore方法:将返回不同元素存储到另外一个集合里

       小结:这里把set1和set2的不同元素(以set1为准)存储到set3集合里

白贺翔—互联网应用架构师公开课_第6张图片

白贺翔—互联网应用架构师公开课_第7张图片

Redis高级命令和特性

keys *:返回满足的所有键(可以模糊匹配)

exists:是否存在指定的key

expire:设置某个key的过期时间,使用ttl查看剩余时间

persist:取消过期时间

select [数据库下标]:数据库为0到15(一共16个数据库)默认进入的是0数据库

move [key] [数据库下标]:将当前数据库中的key,转移到其他数据库中

randomkey:随机返回数据库里的一个key

rename:重命名key

echo:打印命令

dbsize:查看数据库的key数量

info:获取数据库信息

config get:实时传储收到的请求(返回相关的配置信息)

flushdb:清空当前数据库

flushall:清空所有数据库

Redis的安全性

因为redis速度非常快,所以在一台比较好的服务器下,一个外部用户在一秒内可以进行15w次的密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解。

白贺翔—互联网应用架构师公开课_第8张图片

主从复制

主从复制:

  • Master可以拥有多个slave
  • 多个slave可以连接同一个master外,还可以连接到其他的slave
  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
  • 提供系统的伸缩性

主从复制的过程:

  • slave与master建立连接,发送sync同步命令
  • master会开启一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
  • 后台完成保存后,就将文件发送给slave
  • slave将此文件保存到磁盘上

主从复制配置:

       clone服务器之后修改slave的IP地址

       修改配置文件:/usr/local/redis/etc/redis.conf

       第一步:slaveof

       第二步:masterauth

使用info查看role角色即可知道是主服务或从服务。

小故事:

Disruptor说的是生产者和消费者的故事,有一个数组,生产者往里面扔芝麻,消费者从里面捡芝麻。但是扔芝麻和捡芝麻也要考虑速度的问题。1、消费者捡的比扔的快,那么消费者要停下来,生产者扔了新的芝麻,然后消费者继续。2、数组的长度是有限的,生产者到末尾的时候会再从数组的开始位置继续,这个时候可能会追上消费者,消费者还没从那个地方捡走芝麻,这个时候生产者要等待消费者捡走芝麻,然后继续。

有两台redis服务器,其中把125的机器配置成124的从节点,只需要修改125的redis.conf文件进行设置。(非常简单)

白贺翔—互联网应用架构师公开课_第9张图片

查看当前redis客户端的主从角色

白贺翔—互联网应用架构师公开课_第10张图片

白贺翔—互联网应用架构师公开课_第11张图片

当设置后进行info查看,如果角色没变,需要重启机器。

当125和124的机器实现了主从复制后,那么在124的主服务器中写入数据,那么125的从服务器中就会读到,但是无法在125的机器中写数据,因为是从服务器,只能读取。

===========================================================

问题:主从配置后,从服务器无法同步数据

解决方法:1.关闭主从两台服务器的防火墙

2.设置主服务器的redis.conf文件,将bind修改为 0.0.0.0,或者注释掉

3.如果主服务器设置了登录密码,那么从服务器就需要在redis.conf文件中,配置登录密码,否则无法同步数据。

4.一定要开启主服务器!!!

集群搭建

白贺翔—互联网应用架构师公开课_第12张图片

白贺翔—互联网应用架构师公开课_第13张图片

小技巧:全局替换字符串 %s/需要替换的字符串/替换成别的字符串/g

白贺翔—互联网应用架构师公开课_第14张图片

白贺翔—互联网应用架构师公开课_第15张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(读书,视频笔记,Redis)