redis课件DIY

 

 

 

Redis课件DIY

 

 

 

 

 

 

                     

 

 

 

 

        

 

 

                          

                           2017.8.31

 

 

 

 

 

一. redis简介................................................................................................................. 4

1.redis介绍................................................................................................................ 4

2.redis支持的数据类型.............................................................................................. 4

二. Redis 安装与启动.................................................................................................... 4

2.1 redis下载与安装.................................................................................................. 4

2.2 redis服务、客户端启动........................................................................................ 5

2.3 redis服务关闭...................................................................................................... 5

三.五种基本类型操作................................................................................................... 5

3.1 string 操作........................................................................................................... 5

3.2 hash 操作............................................................................................................ 6

3.3 list操作............................................................................................................... 7

3.4 set操作................................................................................................................ 8

3.5 sorted set操作...................................................................................................... 8

3.6 有序集合与列表(EXT):................................................................................. 9

四.Redis HyperLogLog 命令............................................................................................ 9

4.1 HypeLogLog概念................................................................................................. 9

4.2 HypeLogLog指令示例.......................................................................................... 9

五.发布与订阅............................................................................................................ 10

5.1 发布与订阅概念................................................................................................ 10

5.2 发布订阅模型.................................................................................................... 10

5.3 发布订阅指令示例............................................................................................. 11

六. redis管道技术(pipeline)-了解即可...................................................................... 11

七. Redis事务.............................................................................................................. 12

7.1 redis事务........................................................................................................... 12

7.2 redis事务示例.................................................................................................... 12

八. Redis安全.............................................................................................................. 13

8.1 redis安全常识.................................................................................................... 13

8.2 redis基于配置安全验证............................................................................................. 14

8.3 redis设置临时验证............................................................................................. 14

九. Redis持久化.......................................................................................................... 15

9.1 redis持久化之RDB............................................................................................ 15

9.2 redis持久化之AOF............................................................................................ 15

十.虚拟内存(了解即可)............................................................................................ 16

十一. Redis主从复制................................................................................................... 16

11.1 redis主从复制概念........................................................................................... 16

11.2 redis主从复制过程........................................................................................... 16

11.3 redis主从复制结构........................................................................................... 17

11.4 redis主从复制配置........................................................................................... 17

11.5 主从示例......................................................................................................... 18

十二. Java连接redis.................................................................................................... 18

十三. Springdata+redis+springtest之demo测试.............................................................. 18

十四.微博项目.............................................................................................................. 18

 

 

一.redis简介

 

1.redis介绍

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。为了实现其卓越的性能,Redis 采用运行在内存中的数据集工作方式. 根据您的使用情况, 您可以每隔一定时间将数据集导出到磁盘, 或者追加到命令日志中。您也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用。

2.redis支持的数据类型

Redis支持多种类型的数据结构,有 :

字符串(strings:简单的key-value键值对,value仅仅是String,也可以是int类型)

散列(hashes:可看做StringKeyStringValuemap容器)

列表(lists:栈、队列)

集合(sets:集合)

有序集合(sorted sets:有序集合)

 

3.Redis 产品有以下三个特点

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

二.Redis 安装与启动

2.1 redis下载与安装

下载:https://redis.io/download

Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)开发和维护着这个 Win64 的版本,可在https://github.com/MicrosoftArchive/redis/releases下载或redis解压即用

可以查看一下安装说明:README.md  和 INSTALL

 

 

2.2 redis服务、客户端启动

DOS命令进入安装主目录,启动redis服务:

redis-server.exe  #使用默认配置启动redis服务

redis-server.ext   redis.conf #或者指定配置文件启动redis服务

启动客户端连接:

redis-cli    #使用默认配置连接服务器

redis-cli-h 127.0.0.1 -p 6379   #或者指定服务器IP连接redis服务

查看客户端是否连接成功:

>ping

PONG

注:出现PONG,则连接成功!

2.3 redis服务关闭

关闭服务:

①客户端命令窗口关闭:redis-cli-h 127.0.0.1 -p 6379 shutdown

注:若配置安全认证需添加密码,如:

edis-cli -h 127.0.0.1 -p6379  -a pwd shutdown

②服务端口窗口:CTRL+C

③强制杀死进程

三.五种基本类型操作

3.1 string 操作

String举例:

添加/修改一个 string:

127.0.0.1:6379> set test 123

重新赋值:

127.0.0.1:6379>set test 456

查询一个string:

127.0.0.1:6379>get test

append追加一个string:

127.0.0.1:6379> append test 456

注:(integer) 6(返回字符串的长度)

删除一个key:

127.0.0.1:6379>del test

返回字符串长度

127.0.0.1:6379>strlen test

3.2 hash 操作

   hash是一个string类型的field和value的映射表,可以看做是一个Map表结构容器。

添加一个 hash:可添加多个字段

127.0.0.1:6379>HMSET hashtest  name xiaoming age 12

返回整个 hash

127.0.0.1:6379>HGETALL hashtest

1)"name"

2)"xiaoming"

3)"age"

4)"12"

返回hash中的一个字段:

127.0.0.1:6379>hget hashtest name

"xiaoming"

返回hash中的多个个字段:

127.0.0.1:6379>HMGET hashtest name age

1)"xiaoming"

2)"12"

删除一个hash中的字段:

127.0.0.1:6379>HDEL hashtest age

获取所有hash中所有数据

127.0.0.1:6379>HGETALL hashtest

1)"name"

2)"xiaoming"

添加/修改hash中的字段:

127.0.0.1:6379> HSET hashtest  name xiaoxin

(integer) 0

127.0.0.1:6379> HGETALL hashtest

1) "name"

2) "xiaoxin"

查看指定键是否存在:

127.0.0.1:6379> HEXISTS hashtest age

(integer) 0

注:返回整数10

    1表示哈希包含该字段。

    0 表示哈希不包含该字段,或key不存在。

 

补:

查看所有存在的键:

127.0.0.1:6379> KEYS * 

清空所有数据库数据: 

127.0.0.1:6379> FLUSHALL 

清空当前数据库数据: 

127.0.0.1:6379> FLUSHDB

3.3 list操作

添加元素到列表头:

127.0.0.1:6379>LPUSH listtest a b c

(integer)4 

获取列表指定范围内的元素,LRANGElist_name index_start  index_end 如:

 127.0.0.1:6379> LRANGE listtest 0 2

1)"c"

2)"b"

3)"a"

添加元素到列表尾:

127.0.0.1:6379>RPUSH listtest 1 2 3

(integer)6

查看key对应的value类型:

127.0.0.1:6379>TYPE listtest

list

通过索引获取列表中的值:

127.0.0.1:6379>LINDEX listtest 3

"1"

获取列表长度:

127.0.0.1:6379>LLEN listtest

(integer)6

移除元素:

lremlisttest count  value

count > 0 : 从表头开始向表尾搜索,移除与value 相等的元素,数量为 count

count < 0 : 从表尾开始向表头搜索,移除与value 相等的元素,数量为 count 的绝对值。

count = 0 : 移除表中所有与 value 相等的值。

例子:

127.0.0.1:6379>LRANGE list 0  2

1)"3"

2)"3"

3)"1"

127.0.0.1:6379>LREM list 1 3

(integer)1

127.0.0.1:6379>LRANGE list 0 2

1)"3"

2)"1"

3.4 set操作

set是string类型的无序集合。集合成员是唯一的,不允许重复

添加数据到集合:

127.0.0.1:6379> SADD settest 1 2 3 4 5

(integer) 5

返回集合数据:

127.0.0.1:6379> SMEMBERS settest

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

获取集合数量:

127.0.0.1:6379> SCARD settest

(integer) 5

移除集合中的值:

127.0.0.1:6379> SREM settest 5

(integer) 1

3.5 sorted set操作

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

有序集合特点:

1.有序集合中每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

2.有序集合的成员是唯一的,但分数(score)却可以重复。

3.有序集合和集合一样也是string类型元素的集合,且不允许重复的成员

添加元素到集合:

127.0.0.1:6379> ZADD sortset 1 a

(integer) 1

注:如果value(a)存在,更新分数,否则添加新value,分数可以相同。

返回指定元素的分数:

127.0.0.1:6379> ZSCORE sortset a

"1"

查询元素,ZRANGE sortset start_index  end_index

127.0.0.1:6379> ZRANGE sortset 0 1

1) "a"

移除集合中的元素:

127.0.0.1:6379> ZREM sortset a

(integer) 1

3.6 有序集合与列表(EXT):

有序集合类型在某些方面和列表类型有些相似:

(1)二者都是有序的。

(2)二者都可以获得某一范围的元素。

但是二者有着很大的区别,这使得它们的应用场景也是不同的:

(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。

(2)有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快。

(3)列表中不能简单地调整某个元素的位置,但是有序集合可以。

(4)有序集合要比列表类型更耗费内存。有序集合类型算得上是 Redis的5种数据类型中最高级的类型。

四.Redis HyperLogLog 命令

4.1HypeLogLog概念

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是:

1.在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

2. Redis 里面,每个 HyperLogLog 键只需要花费12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

HyperLogLog 不足之处:

1.因为HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

 

HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值:

•基数:集合中不同元素的数量。比如 {'apple', 'banana', 'cherry', 'banana', 'apple'}的基数就是 3

•估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。

4.2HypeLogLog指令示例

下表列出了 redis HyperLogLog 的基本命令:

序号              命令及描述

  1    PFADD key element [element ...]

               添加指定元素到HyperLogLog 中。

  2    PFCOUNT key [key ...]

               返回给定 HyperLogLog 的基数估算值。

  3    PFMERGE destkey sourcekey [sourcekey ...]

               将多个 HyperLogLog 合并为一个 HyperLogLog

以下实例演示了HyperLogLog 的工作过程:

添加统计元素:

redis 127.0.0.1:6379> PFADD pf0  redis mongodb  mysql

1) (integer) 1

redis 127.0.0.1:6379> PFADD pf0  js java jsp

1) (integer) 0

基数统计指令:

redis127.0.0.1:6379> PFCOUNT pf0

(integer)3

redis127.0.0.1:6379> PFADD pf1 js java jsp

(integer)1

合并HyperLogLog

redis127.0.0.1:6379> PFMERGE pf pf0 pf1

ok

redis127.0.0.1:6379> PFCOUNT pf

(integer)6

五.发布与订阅

5.1 发布与订阅概念

发布订阅(pub/sub)是一种消息通知模式,主要的目的是消除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。

订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。

当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。

5.2 发布订阅模型

 

 

 

5.3 发布订阅指令示例

注意顺序:先pubsub

六.redis管道技术(pipeline)-了解即可

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

    1.客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

    2.服务端处理命令,并将结果返回给客户端。

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

查看 redis 管道,只需要启动 redis 实例并输入以下命令:

$(echo-en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCRvisitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379

以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们们设置了 runoobkey 的值为 redis,然后我们获取runoobkey 的值并使得 visitor 自增 3 次。

在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应

管道技术最显著的优势是提高了 redis 服务的性能。

七.Redis事务

7.1 redis事务

事务可以一次执行多个命令,并且带有以下两个重要的保证:

1.事务是一个单独的隔离操作:事务中的所有命令都会按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

2.事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

multi 命令用于开启一个事务,它总是返回 OK 。 multi 执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中,当 exec命令被调用时,所有队列中的命令才会被执行。

 

7.2 redis事务示例

举例:

127.0.0.1:6379>SET name fangjicai

127.0.0.1:6379>LPUSH list 1 2 3 4

127.0.0.1:6379>WATCH name

OK

127.0.0.1:6379>MULTI

OK

127.0.0.1:6379>SET name test

QUEUED

127.0.0.1:6379>LPUSH list 4 5

QUEUED

127.0.0.1:6379>

此时开启另一客户端,将监听的key(name)对应的value做数值改动,如:

127.0.0.1:6379>set name 123

OK

然后再回到之前控制台,执行如下操作:

127.0.0.1:6379>EXEC

(nil)

表明未执行,即事物回滚(1.对未监听的key,如list,则不会回滚。2.对错误命令如 set name 123  456 不会滚)。

 

对于错误的指令:

 

注:

  在事务处理中使用discard可以取消事务的处理。redis在事务中如果发生错误时事务退出,但是在该错误之前的操作无法回滚。

总之:

  multi 命令用于开启一个事务,它总是返回 OK

  multi 执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中, exec命令被调用时,所有队列中的命令才会被执行。

八.Redis安全

8.1 redis安全常识

Redis在默认状态可直接登录,也可以设置密码进行安全验证。设置密码时最好设置一个比较复杂的密码,防止暴力破解。因为redis执行速度非常快,正常配置下1s内可以进行150k次密码登录尝试。

8.2 redis基于配置安全验证

打开redis.conf配置文件,做如下配置:

配置完成后,启动redis服务,注意,此时不要点击redis-server.exe启动,因为redis-server.exe启动使用的是默认配置,可以在cmd命令行下启动:

 

8.3 redis设置临时验证

redis支持临时密码设置:

查看密码

config get requirepass

设置密码

config set requirepass 123

注:这种方式是临时设置密码,如果重启 redis-server 则失效

 

永久设置密码:

修改redis.window.conf 配置文件,找到 requirepass 参数并设置密码,启动server 时加载配置文件。

 

登陆时若不指定密码,进入客户端后,执行相关指令会报认证错误:

redis-cli -p 6379

> KEYS *

(error)NOAUTH Authentication required.

> LRANGE list 0 10

(error) NOAUTH Authentication required.

两种通过验证的方式:

redis-cli  -h 127.0.0.1 -p 6379 -a 123

或进到客户端里在验证

auth 123

九.Redis持久化

9.1 redis持久化之RDB

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”),也可以把每一次数据变化都写入到一个append onlyfile(aof)里面(这称为“全持久化模式”)。

  第一种方法filesnapshotting(RDB):

默认redis是会以快照的形式将数据持久化到磁盘的(一个二进制文件,dump.rdb,这个文件名字可以指定),在配置文件中的格式是:save N M表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。当然我们也可以手动执行save或者bgsave(异步)做快照。

工作原理简单:

  当redis需要做持久化时,redis会fork一个子进程;子进程将数据写到磁盘上一个临时RDB文件中;当子进程完成写临时文件后,将原来的RDB替换掉,这样的好处就是可以copy-on-write

如在修改redis.conf文件:

1.dbfilenamedump.rdb 指定持久化数据存放文件(可更改dump.rdb文件名称)

2.dir./  默认设置相对路径,此处可指定持久化文件的绝对路径

3.#   save <seconds> <changes>........

        save 900 1

        save 300 10

        save 60 10000   可添加或者修改相关参数

9.2 redis持久化之AOF

 第二种方法Append-only(AOF):

  filesnapshotting方法在redis异常死掉时, 最近的数据会丢失(丢失数据的多少视你save策略的配置),所以这是它最大的缺点,当业务量很大时,丢失的数据是很多的。

   Append-only方法可以做到全部数据不丢失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no),appendonly yes开启AOF之后,redis每执行一个修改数据的命令,都会把它添加到aof文件中,当redis重启时,将会读取AOF文件进行“重放”以恢复到 redis关闭前的最后时刻。

如修改redis.conf文件:

1.appendonly no 修改为yes可转换为aof模式

2.appendfilename"appendonly.aof"  可修改aof文件名称

3.appendfsync everysec

3.# everysec.

十.虚拟内存(了解即可)

  Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。

如果想启用虚拟内存功能,在配置文件redis.conf中增加配置如下:

 

 

 

十一.Redis主从复制

11.1redis主从复制概念

Redis主从复制配合和使用比较简单,通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。

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

11.2redis主从复制过程

Redis主从复制过程:

1.Salve与master建立连接,发送sync同步命令。

2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令缓存。

3.后台完成保存后,就将此文件发送给slave。

4.slave将此文件保存到硬盘上。

11.3redis主从复制结构

 

注:第二种配置方式在master宕机后,可以实现自动切换到slave1

11.4redis主从复制配置

Redis环境说明:

  window下Redis服务作为master主机,window的IP为192.168.1.100,虚拟机下linux下的Redis作为slave,linux的IP为192.168.1.150。

在redis从机(linux环境)的redis.conf配置文件中加入以下配置:

 

 

 

11.5 主从示例

  主机写入2条记录到数据库,然后从从机中读取,注意:总计无法更新值,只能读取。

主机:

 

从机:

 

十二.Java连接redis

十三.Springdata+redis+springtest之demo测试

十四.微博项目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值