NoSql数据库之Redis笔记.docx

上传人:b****2 文档编号:22982207 上传时间:2023-04-29 格式:DOCX 页数:36 大小:1.22MB
下载 相关 举报
NoSql数据库之Redis笔记.docx_第1页
第1页 / 共36页
NoSql数据库之Redis笔记.docx_第2页
第2页 / 共36页
NoSql数据库之Redis笔记.docx_第3页
第3页 / 共36页
NoSql数据库之Redis笔记.docx_第4页
第4页 / 共36页
NoSql数据库之Redis笔记.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

NoSql数据库之Redis笔记.docx

《NoSql数据库之Redis笔记.docx》由会员分享,可在线阅读,更多相关《NoSql数据库之Redis笔记.docx(36页珍藏版)》请在冰豆网上搜索。

NoSql数据库之Redis笔记.docx

NoSql数据库之Redis笔记

NoSql数据库之Redis

1课程计划

1、什么是nosql,nosql的应用场景

2、Nonsql数据库的类型

a)Key-value

b)文档型(类似于json)

c)列式存储

d)图式

3、redis的相关概念kv型的。

4、Redis的安装及部署

5、Redis的使用方法及数据类型

a)Redis启动及关闭

b)Redis的数据类型

i.String类型

ii.Hash类型

iii.List类型

iv.Set类型

v.SortedSet(zset)

6、redis数据库的持久化

a)Rdb快照形式

b)Aof命令形式

7、主从复制

8、Redis集群

2什么是nosql

2.1nosql

Nosql=Notonlysql,非关系型数据库。

Web1.0:

内容输出型网站。

类似于搜狐、网页、新浪。

Web2.0:

交互型的网站。

例如人人网、微博等。

关系型数据库遇到的问题:

1、Highperformance-对数据库高并发读写的需求

2、大数据量存储。

3、HighScalability&&HighAvailability-对数据库的高可扩展性和高可用性的需求

此时nosql数据出现了。

2.2Nosql数据库的类型

1、key-value类型。

常用的就是redis。

可以用作缓存使用。

2、文档型。

Mongodb。

存储的是类似于json的数据bson。

3、列式存储。

Hbase。

基于hadoop的数据库。

4、图式存储。

典型应用:

社交网络

3Redis的相关概念

3.1什么是redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。

它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如

下:

字符串类型

散列类型

列表类型

集合类型

有序集合类型。

3.2Redis的应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。

(最多使用)

分布式集群架构中的session分离。

聊天室的在线好友列表。

任务队列。

(秒杀、抢购、12306等等)

应用排行榜。

网站访问统计。

数据过期处理(可以精确到毫秒)

4Redis的安装及部署

4.1Redis部署环境

需要linux系统,centos6.4

Redis同样也有windows版本,可以练习使用。

官方不典型支持。

推荐使用linux版本。

需要gcc的开发环境。

4.2Redis的下载

http:

//redis.io/

最新版本:

3.0.3

本课程的版本:

3.0.0

是一个redis的源码包,c语言开发的。

4.3安装步骤

第一步:

安装linux虚拟机。

Centos6.4(32位)

第二步:

把源码包上传到服务器。

端口号22

第三步:

解压源码包。

tar-zxvfredis-3.0.0.tar.gz

第四步:

编译源码,需要gcc的环境。

如果没有就安装一个,需要联网。

安装gcc:

yuminstallgcc-c++

编译源码:

进入源码目录,make。

第五步:

安装

makeinstallPREFIX=/usr/local/redis

PREFIX:

指定安装目录

4.4启动和关闭

4.4.1前端启动模式

在bin目录下执行:

./redis-server

4.4.2后端启动模式

需要redis.conf配置文件:

把此文件复制到redis的目录。

修改redis.conf文件:

daemonizeyes(默认是no)

查看原来启动的redis进程,并将其杀掉

启动:

./redis-serverredis.conf

需要指定一个配置文件。

4.4.3关闭redis

1、kill进程

2、正常关闭

./redis-cli-h192.168.25.147-p6379shutdown

-h:

服务的ip地址

-p:

端口号

如果是本地服务,而且端口是6379这些参数可以省略。

4.5Redis的客户端

4.5.1Redis自带客户端:

redis-cli

Ø

(1)连接redis服务器:

Ø

(2)简单命令:

Ping:

测试服务器是否还活着。

Ø(3)Set:

命令,添加一个key

Setkeyvalue

例子:

127.0.0.1:

6379>setkey1100

OK

Get命令,取一个key的值

Getkey

例子:

127.0.0.1:

6379>getkey1

"100"

4.5.2Java的客户端Jedis

Ø导入Jedis开发的Jar包

Ø开发测试程序

如果远程连接失败,查看linux的防火墙是否开放redis的服务端口。

第一种方法:

关闭防火墙:

serviceiptablesstop

第二种方法:

修改配置文件开放指定端口。

第一步:

修改:

vim/etc/sysconfig/iptables

第二步:

重启防火墙服务

[root@localhost~]#serviceiptablesrestart

iptables:

Flushingfirewallrules:

[OK]

iptables:

SettingchainstopolicyACCEPT:

filter[OK]

iptables:

Unloadingmodules:

[OK]

iptables:

Applyingfirewallrules:

[OK]

4.5.3图形客户端

注意:

当前图形客户端不支持集群操作

Redis中默认有16个数据库。

0-15号。

默认操作0号库。

使用命令切换数据库:

127.0.0.1:

6379[1]>select16

(error)ERRinvalidDBindex

127.0.0.1:

6379>select15

OK

127.0.0.1:

6379[15]>

库和库之间相互隔离,不同的库中可以有相同的key。

数据库的数量在redis.conf中配置:

5Redis中的数据类型

5.1String类型

基础数据类型。

在redis中所有的值都是字符串。

在redis中命令不区分大小写。

1、set命令:

添加一个key

2、get命令:

取一个key

3、Incr命令:

加一命令。

如果key的值是数值类型可以使用此命令。

4、decr命令:

减一命令

127.0.0.1:

6379>decra

(integer)100

5、del命令:

删除key

127.0.0.1:

6379>dela

(integer)1

127.0.0.1:

6379>geta

(nil)

5.2Hash类型

Key-value(hash)-key-value

|-key-value

|-key-value

命令:

1、Hset命令:

添加一个key

Hsetkeyhashkeyvalue

127.0.0.1:

6379>hsethash1a1

(integer)1

2、hmset:

批量添加key

Hmsetkeyhkey1valuehkey2valuehkey3value....

127.0.0.1:

6379>hmsethash2a1b2c3d4

OK

3、hget命令:

取一个hashkey

127.0.0.1:

6379>hgethash1a

"1"

4、hmget命令:

取多个hashkey

127.0.0.1:

6379>hmgethash2abc

1)"1"

2)"2"

3)"3"

4、自增命令:

hincrby

127.0.0.1:

6379>hmgethash2abc

1)"1"

2)"2"

3)"3"

127.0.0.1:

6379>hincrbyhash2a10

(integer)11

5.3List类型

Redis中是链表形式的存储。

可以当做队列使用,也可以当做栈使用。

1、在左边添加元素:

lpush

Lpushkeyvalue1value2value3

127.0.0.1:

6379>lpushlist1abcdef

(integer)6

127.0.0.1:

6379>

2、右边添加元素:

rpush

127.0.0.1:

6379>rpushlist112345

(integer)11

3、取最左边元素:

lpop,取完列表中此元素删除。

127.0.0.1:

6379>lpoplist1

"f"

4、取最右元素:

rpop

127.0.0.1:

6379>rpoplist1

"5"

127.0.0.1:

6379>

5、查看列表中的元素:

lrange

Lrangekey起始下标结束下标(取全部的结束下标就是-1)

127.0.0.1:

6379>lrangelist103

1)"e"

2)"d"

3)"c"

4)"b"

127.0.0.1:

6379>lrangelist10-1

1)"e"

2)"d"

3)"c"

4)"b"

5)"a"

6)"1"

7)"2"

8)"3"

9)"4"

127.0.0.1:

6379>

5.4Set类型

特点:

集合中的元素是无序的并且没有重复的。

5.4.1命令

1、向集合中添加元素:

sadd

Saddkeyvalue1value2value3....

127.0.0.1:

6379>saddset1abcde

(integer)5

2、删除元素:

srem

Sremkeyvalue

127.0.0.1:

6379>sremset1a

(integer)1

3、查看集合中的元素:

smembers

Smemberskey

127.0.0.1:

6379>smembersset1

1)"c"

2)"d"

3)"b"

4)"e"

127.0.0.1:

6379>

5.4.2集合的运算

1、差集运算

属于A并且不属于B的元素构成的集合。

SDIFFkey[key...]

127.0.0.1:

6379>saddsetaabcde

(integer)5

127.0.0.1:

6379>saddsetbcdefg

(integer)5

127.0.0.1:

6379>sdiffsetasetb

1)"a"

2)"b"

2、交集运算

属于A且属于B的元素构成的集合。

SINTERkey[key...]

127.0.0.1:

6379>sintersetasetb

1)"c"

2)"d"

3)"e"

127.0.0.1:

6379>

5.4.3并集运算

属于A或者属于B的元素构成的集合

SUNIONkey[key...]

127.0.0.1:

6379>sunionsetasetb

1)"c"

2)"d"

3)"b"

4)"a"

5)"f"

6)"e"

7)"g"

5.5SortedSet类型(zset)

特点集合但是是有序的。

在此集合中每个元素都有一个分数,可以根据分数升序排列。

5.5.1命令

1、添加元素命令:

zadd

Zaddkey得分元素得分元素。

127.0.0.1:

6379>zaddzset11a2b3c4d

(integer)4

2、删除元素:

zrem

127.0.0.1:

6379>zremzset1a

(integer)1

3、查看计划中的元素:

zrange

Zrangekey起始下标结束下标(-1全部)withscores(带分数)

127.0.0.1:

6379>zrangezset10-1

1)"b"

2)"c"

3)"d"

127.0.0.1:

6379>zrangezset10-1withscores

1)"b"

2)"2"

3)"c"

4)"3"

5)"d"

6)"4"

4、降序排列:

zrevrange

127.0.0.1:

6379>zrevrangezset10-1withscores

1)"d"

2)"4"

3)"c"

4)"3"

5)"b"

6)"2"

适用于应用排行榜。

6Keys命令

6.1可以设置key的有效期。

1、设置有效期:

expire

Expirekey生存期(以秒为单位)

127.0.0.1:

6379>seta100

OK

127.0.0.1:

6379>expirea30

(integer)1

2、查看key的生存期

Ttlkey

-1:

永久

-2:

key不存在

3、持久化keypersist,可以把key持久化保存

127.0.0.1:

6379>persista

(integer)1

6.2其他keys命令

Keys命令,可以查看数据库中所有的可以列表。

127.0.0.1:

6379>keys*

1)"list1"

2)"zset1"

3)"a"

4)"hash2"

5)"key1"

6)"setb"

7)"seta"

8)"list"

9)"hash1"

10)"hello"

11)"set1"

7Redis的持久化

两种方案:

1、快照形式RDB形式。

(默认开启)

2、Aof形式。

命令形式存储。

(需要手动开启)

Rdb:

速度快。

丢失数据的概率大。

Aof:

默认每秒钟保存一次命令。

性能低,可靠性高。

最多丢失一秒的数据。

需要在redis.conf中配置。

Rdb:

Aof方案:

(appendonlyfile)

两种方案同时开启,使用aof恢复数据。

8主从复制

只需要修改redis.conf文件就可以。

需要配置两个虚拟机,如果不能实现,至少需要两个数据库实例。

第一步:

创建slave服务器的实例。

1、把redis的bin目录复制一份。

2、修改redis.conf文件。

修改端口号。

第二步:

配置从服务器,主服务器不需要做任何修改。

修改从服务器的redis.conf文件。

第三步:

启动从服务器

9redis集群

9.1集群架构图

9.2集群中的槽slot

槽是用来存储key。

B

A

C

9.3redis-cluster投票:

容错

 

(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):

什么时候整个集群不可用(cluster_state:

fail)?

 

  a:

如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态.ps:

redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

  b:

如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

 ps:

当集群不可用时,所有对集群的操作做都不可用,收到((error)CLUSTERDOWNTheclusterisdown)错误

9.4安装步骤

第一步:

需要6台虚拟机。

至少需要6个redis实例。

第二步:

修改每个实例的端口7001~7006。

需要修改redis.conf文件。

第三步:

安装ruby环境

安装ruby

yuminstallruby

yuminstallrubygems

安装ruby和redis的接口程序

拷贝redis-3.0.0.gem至/usr/local下

执行:

geminstall/usr/local/redis-3.0.0.gem

第四步:

在/root/redis-3.0.0/src目录下有一个redis-trib.rb文件就是一个ruby的脚本文件,是用来创建redis集群的脚本文件。

把此文件复制到/usr/local/redis-cluster目录下。

第五步:

修改每个实例的redis.conf文件。

第六步:

启动每个实例。

第七步:

使用redis-trib.rb脚本创建集群。

./redis-trib.rbcreate--replicas1192.168.25.147:

7001192.168.25.147:

7002192.168.25.147:

7003192.168.25.147:

7004192.168.25.147:

7005192.168.25.147:

7006

[root@localhostredis-cluster]#./redis-trib.rbcreate--replicas1192.168.25.147:

7001192.168.25.147:

7002192.168.25.147:

7003192.168.25.147:

7004192.168.25.147:

7005192.168.25.147:

7006

>>>Creatingcluster

Connectingtonode192.168.25.147:

7001:

OK

Connectingtonode192.168.25.147:

7002:

OK

Connectingtonode192.168.25.147:

7003:

OK

Connectingtonode192.168.25.147:

7004:

OK

Connectingtonode192.168.25.147:

7005:

OK

Connectingtonode192.168.25.147:

7006:

OK

>>>Performinghashslotsallocationon6nodes...

Using3masters:

192.168.25.147:

7001

192.168.25.147:

7002

192.168.25.147:

7003

Addingreplica192.168.25.147:

7004to192.168.25.147:

7001

Addingreplica192.168.25.147:

7005to192.168.25.147:

7002

Addingreplica192.168.25.147:

7006to192.168.25.147:

7003

M:

a96e224fe9aa5667a908a721c18aeeb78c0e628d192.168.25.147:

7001

slots:

0-5460(5461slots)master

M:

22f03de15a3fd7260f5efa83539a342b94f07032192.168.25.147:

7002

slots:

5461-10922(5462slots)master

M:

75ccb72ea57cce1fbd951117c021d385f126b894192.168.25.147:

7003

slots:

10923-16383(5461slots)master

S:

2525654870fee9fa3a06d96c08f39e5c0912afea192.168.25.147:

7004

replicatesa96e224fe9aa5667a908a721c18aeeb78c0e628d

S:

f153fb80c15168d6701d7ef2b5fddaff2f82ffef192.168.25.147:

7005

replicates22f03de15a3fd7260f5efa83539a342b94f07032

S:

6d6565162bd0550f29fff20fe52ea6178f748fa1192.168.25.147:

7006

replicates75ccb72ea57cce1fbd951117c021d385f126b894

CanIsettheaboveconfiguration?

(type'yes'toaccept):

yes

>>>Nodesconfigurationupdated

>>>Assignadifferentconfigepochtoeachnode

>>>SendingCLUSTERMEETmessagestojointhecluster

Waitingfortheclustertojoin....

>>>PerformingClusterCheck(usingnode192.168.25.147:

7001)

M:

a96e224fe9aa5667a908a721c18aeeb78c0e628d192.168.25.147:

7001

slots:

0-5460(5461slots)master

M:

22f03de15a3fd7260f5efa83539a342b94f07032192.168.25.147:

7002

slots:

5461-10922(5462slots)master

M:

75ccb72ea57cce1fbd951117c021d385f126b894192.168.25.147:

7003

slots:

10923-16383(5461slots)master

M:

2525654870fee9fa3a06d96c08f39e5c0912afea192.168.25.147:

7004

slots:

(0slots)master

replicatesa96e224fe9aa5667a908a721c18aeeb78c0e628d

M:

f153fb80c15168d6701d7ef2b5fddaff2f82ffef192.168.25.147:

7005

slots:

(0slots)master

replicates22f03de15a3fd7260f5efa83539a342b94f07032

M:

6d6565162bd0550f29fff20fe52ea6178f748fa1192.168.25.147:

7006

slots:

(0slots)master

replicates75ccb72ea57cce1fbd951117c021d385f126b894

[OK]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1