NoSql数据库之Redis笔记.docx
《NoSql数据库之Redis笔记.docx》由会员分享,可在线阅读,更多相关《NoSql数据库之Redis笔记.docx(36页珍藏版)》请在冰豆网上搜索。
![NoSql数据库之Redis笔记.docx](https://file1.bdocx.com/fileroot1/2023-4/29/04befefd-64b4-4bee-87eb-0ac11af01571/04befefd-64b4-4bee-87eb-0ac11af015711.gif)
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]