第一章
1.1NoSQL简介
传统关系型系统中的事务控制是一个很好的机制,但是本身有一个最大的缺点,处理速度慢。单节点的数据库即使再厉害,你所在的服务器的硬件性能再好,你也无法承受几亿条数据。
Nosql=Not Only SQL不仅仅是SQL
特点:
采用数据集存储
动态结构定义
存储精简
可扩展性强
适合云计算
关系型数据库:
利用ACID保证数据完整性
行列的规范化存储
存储数据量小
结构化查询
首先在实际的开发中,关系型数据库不能被替代,因为它存储的数据都是结构化的数据,但是一些操作频繁较高的数据呢?在所有的电商平台上都会存在有一个购物车功能,那么现在的技术开发要求考虑PC端、移动端数据通用。
传统关系型数据库依然要进行保留,因为依然要保留原始的结构化数据,而NoSQL要负责处理那些高并发的用户操作。
NoSQL数据库分类
键值key-value存储数据库,采用hash表结构存储。
列存储数据库,应分布式存储的海量数据,采用列族的形式存储
图形数据库
对象存储,通过类似面向对象语言的语法操作数据库
xml数据库,高效的存储XML数据,并支持XML的内存查询语法
1.2认识Redis
首先Redis提供给用户的只是一个源代码的开发程序包。
Redis特点:
异常快速:Redis是非常快的,每秒可以执行大约11万设置操作,8万每秒的读取操作。
支持丰富的数据类型,String,List、Set、Sorte Set、Hash
原子性操作:所有的Reids操作都是原子的,从而确保当两个客户同时访问Redis服务器得到的是更新后的值。
MultiUtility工具:Redis是一个多功能适用的工具。
Redis执行的数据块,支持的数据类型多,但是并不是只有Redis具备这样的特点,Redis是属于缓存数据库的第二代产品,而第一代是Memcached。
面试题:
Redis与Memcached区别:
Redis比Memcached支持更多的数据类型
Redis支持主从结构,可以实现数据备份。
Redis支持数据持久化,可以将数据保存到磁盘上,重启数据依然可用。
第二章 Redis的安装与配置
2.1Redis编译与安装
1、将Redis开发包上传到系统中
Tar xzvf、srv/ftp/redis-3.2.9.tar.gz -C /usr/local/src/
2、进入到Redis源代码所在的安装目录
3、进行程序的编译处理make
4.编译完成之后要进行Redis安装 make install
5、Redis数据库属于内存缓存数据库,那么你现在是一台单独的Redis服务器,则应该考虑将所有的可用内存都分配给Redis。
2.2Redis数据库配置
Redis数据库,主要的配置文件就是redis.conf,所有的配置项一定要在此出完成
1、Redis支持持久化功能的数据库,所以其一定会有一个用于数据库存储的目录,那么Redis在存储的时候有三类文件需要保存:Redis运行时的pid,相关处理日志,Redis的数据文件。
2、修改Redis的配置文件redis.conf
配置端口号:port 6379
配置Redis是否为后台运行
设置进程保存路径
设置日志保存目录
该数据库支持的数据库数量
保存数据文件目录
3、启动Redis
第三章 Redis数据操作
3.1redis-benchmark测试与操作命令
范例:模拟1000一个客户端进行数据处理
/redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 10000
-h连接服务器的地址 -p端口号 -c客户端数量 -d每一次操作的数据长度 -n每一个用户发出的请求数量
3.2字符串操作
在Redis中有一个特别重要的命令keys,可以进行全部数据的列出
set key keyvalue get key
情况仓库:flushdb
不覆盖设置内容:setnx key keyvalue
设置数据的保存时间:setex key time keyvalue
查看当前有效时间:ttl key
让key取消过期时间:persist key
设置多个key:mset key value key2 value2
追加内容:append key value
取得key的内容长度:strlen key
删除指定的数据内存:delete key key2 key3
set username-jmldn hello
get username-mldn
3.3Hash数据操作
存放Hash类型:hset key username zsz
hset key age 28
取数据:hget key age
hash与对象转化
设置不重复的数据:hsetnx key name zsz
批量设置:hmset key name zsz age 28
判断某个key的某个属性是否存在:hexists key age
取得成员个数:hlen key
删除指定的key的内容:hdel key age
取得所用的hash的key:hkeys key
取得所用的key与value:hgetall key
取得全部的value:hvals key
3.4数字操作
自增:incr key
set num 100;incr num;
自增n:incrby num n;
自减:decr key;
自减n:decrby key n;
进行Hash类型的数字操作:hincr key age 1;
3.5List数据操作
创建一个描述关键字的List集合:lpush key value1 value2 value3 value4
进行指定范围的链表数据输出:lrange key 0 2
全部输出:lrange key 0 -1
右入栈:rpush key value1 value2 value3
在指定元素前追加内容:linsert key before value1
在指定元素后追加内容:rinsert key after value2
如果此时你存放的内容有重复数据以第一个为准
修改指定索引数据:lset key 0 value5
删除数据:lrem key 1 value6
保留指定范围的数据:ltrim key 0 10
元素从栈顶出栈:lpop key
元素从栈底出栈:rpop key
将移除的数据放到另一个集合:rpoplpush key key2
取得指定索引的数据:lindex key 8
取得集合个数:llen key;
3.6Set数据操作无序、弹出为自动删除
用来实现数据的集合对比处理:实现数据的交集、并集、差集。
向集合追加新元素:sadd key value1 value2 value3 value4
查询set集合:smembers key;
删除集合元素:srem key value1
从集合中随机弹出一个数据:spop key
两个集合的差集:diff key1 key2 (key1-key2)
将差集放到另一个集合中:sdiffstore key1 key2 key3
交集:sinter key1 key2
将交集保存到指定的集合中:sinterstore key1 key2 key3
并集:sunion key1 key2
将并集保存到指定的集合中:sunionstore key1 key2 key3
弹出数据到另外的集合中:smove key1 key2 value1
返回集合个数:scard key
判断指定的集合中是否包含指定的元素:sismember key value1
随机返回key中的数据返回的数据个数不删除:srandmember key number
3.7SortedSet数据操作
增加数据:zadd key分数内容
取出有序集合内容:zrange key 0 -1 withscores
删除有序集合数据:zrem key内容
数据增长:zincrby key分数内容
返回集合中指定元素的索引值:zrank key内容
反转数据:zrevrank key内容
反转后取得数据:zrevrange key开始分数结束分数 withscores
根据索引取得指定范围的数据:zrangebyscore key开始分数结束分数 withscore
取得集合中指定分数范围的数量:zcout key开始分数结束分数
取得指定集合中的元素个数:zcard key
根据下标排序,删除指定范围的数据:zremrangebyrank key 0 1 5
3.8Redis数据类型总结
Redis严格来讲由于其处理速度很快,某种程度上已经不完全属于数据库的支持了,所以对于数据类型:
1、基本类型:string int基本类型的基本操作更加适合用户进行短期的数据存储,因为在实际开发中,可以进行各种复杂的操作,而且字符串也可以描述各种数据的含义。那么在实际的开发中,可以利用此类型实现nginx的集群数据保存,springData数据保存。
2、hash类型:hash类型更多的情况下是一个结构化的信息,但是这种结构化的信息个人认为不如对象序列化好用,但是至少需要知道hash这样的类型可以进行内容的详细分类;
3、List在实际的开发中可以实现消息队列的功能,或者进行缓冲的功能,好多公司不用消息中间件,而用List实现。
4、set数据类型:最大的支持功能在于集合的运算上,例如:相似度检测、好友推荐、都可以通过这种方式来完成。
5.SortdSet:主要进行数据的流式分析;
第四章 Redis进阶操作
4.1Redis事务处理
Redis本身支持事务处理,但是这种支持的事务处理本身是存在有设计缺陷的,而且与传统的事务处理有些不同,首先看一下Redis中的事务支持命令:
打开事务:multi
取消事务:discard
提交事务:exec
一旦开启了Redis的事务控制,则表示所有的更新操作都要追加到一个更新的队列之中。由于现在在执行完更新之后发现数据本身出现了问题,所以选择了关闭事务,一旦事务关闭之后那么该操作将会回滚到之前的状态。
如果在事务开启状态下进行了更新处理,随后只有执行了exec指令后才表示事务真正的提交,才会影响真实的数据,但是需要提醒的是,Redis设计之初就是不考虑事务的,所以以上的事务只能够说是Redis的玩笑,因为这种设计并不完善。
4.2Redis乐观锁
在数据库执行操作的时候,为了保证数据的一致性,A用户更新数据的时候B用户不能够更新。
悲观锁:基于数据库的实现,
乐观锁:基于算法的实现,在数据表上追加一个锁的处理列。
在Redis里面直接支持有乐观锁,如果想要观察乐观锁的处理,可以打开两个不同的Session来进行我们的处理。
4.3Redis密码配置
1、修改redis. conf配置文件
2、关闭redis服务,重新启动
3、登录redis
Redis-cli -h 127.0.0.1 -p 6379 -a passwd
Auth mldnjava
4.4Redis性能监控
redis-stat工具监控
1、为了更加清楚的发现redis-stat特点,下面通过建立三个redis运行进程,模拟方式很简单,配置不同的redis端口即可;
2、建立redis数据的保存目录,要求可以保存三个Redis进程:
3、将我们之前的redis.conf配置拷贝三份
4、编辑每一个配置文件,修改端口号、保持密码相同,取消外网访问设置,设置后台运行,设置日志
5、启动redis
6、通过GITHUB下载redis-stat开发包
7、下载下来的redis-stat只有一个指令,如果要想使用这个命令必须使用ruby进行命令的处理。
第五章使用java操作Redis数据库
5.1连接Redis数据库
Ok
5.2Jedis数据操作
1.设置字符串数据
1、设置过期时间
3.操作Hash数据
4、操作List数据
5.3Jedis连接池
第六章 Redis主从模式
6.1主从模式概述
断电机房网络故障服务器崩溃,数据丢失
离线备份
在线备份:在数据做出任何处理操作的时候都进行及时的备份
主从设计:
6.2.主从模式实现
1、如果要进行主从模式的匹配,主服务器上不需要做出任何的变化
2、所有的从服务器配置文件上必须要求明确的设计出对于的主服务器
配置主服务器的IP/端口号设置主服务器的密码
3、启动所有的服务器
4、登录主服务器查看所有副本信息
5、操作主节点的数据
读写分离便于备份
主从设计的优点:便于备份
主从设计的缺点:只能够做备份,当出现灾难的时候(主服务器挂了)不无法立即恢复,不能把从服务器当做主服务器用,服务暂停。