一.NoSQL概述
1.什么是NoSQL
NoSQL = Not Only SQL,是非关系型的数据库,无需创建数据库字段就可以实现存储。
2.为什么需要NoSQL(优势)
A.高并发读写
B.海量数据的高效率存储和访问
C.数据库高可扩展性和高可用性
3.NoSQL数据库的四大分类
A.键值(key-value)存储
B.列存储
C.文档数据库
D.图形数据库
二.Redis概述
1.什么是Redis
高性能键值对数据库,2008年在意大利出世,2009年开发完成并维护至今,读写速度惊人。
2.Redis应用场景
A.缓存
B.任务队列(秒杀,抢购等)
C.网站访问统计
D.数据过期处理
E.应用排行榜
F.分布式集群架构中的session分离
三.Redis的安装
建议安装在Linux服务器上来运行测试
1.搭建环境
A.虚拟机版本:VMware 10.0.2
B.Linux系统:CentOS-6.5
C.SSH客户端:
远程命令端:SecureCRT 7.3
ftp端:SecureFX 7.3
2.安装gcc环境
redis是C语言开发的,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要先安装gcc。
A.打开SecureCRT软件,连接Linux服务器地址
B.输入安装gcc的命令(必须连网):yum install gcc-c++
提示是否安装时输入y即可
出现以下内容表示安装gcc环境完成
3.安装redis
A.将redis安装包上传到linux服务器
利用filezilla.exe软件将本地redis安装包直接拖到远程linux服务器root目录里面
此时查看服务器根目录便可看到上传的文件
B.解压redis安装包后进行源代码编译
输入解压命令:tar -zxvf redis-3.0.7.tar.gz ,这样在根目录下可看到解压后的文件
进入到redis-3.0.7目录后输入make命令进行编译
C.安装redis
在redis-3.0.7目录下输入安装命令:make PREFIX=/usr/local/redis install ,其中PREFIX=/usr/local/redis指定了redis的安装目录
D.将redis安装包里的配置文件redis.conf拷贝到redis的安装目录里
在redis-3.0.7目录下输入拷贝命令:cp redis.conf /usr/local/redis
E.启动redis
前端启动方式:在bin目录下输入命令 ./redis-server ,但这种方式必须按ctrl+c退出后才能进行其他命令操作,一般启动redis用后端启用方式。
后端启动方式:
输入命令vim redis.conf后进入编辑模式,修改配置文件中的daemonize no 为daemonize yes后保存退出;
在安装目录下输入启动命令:./bin/redis-server ./redis.conf;
可输入命令ps -ef | grep -i redis 来查找redis以便确认redis是否安装成功;
F.关闭redis
在bin目录下输入命令: ./redis-cli shutdown
四.jedis入门
我们可以用命令来向redis存入和获取数据,但实际开发中我们通常会用程序来向redis保存和获取数据,jedis是java首选的客户端开发包。
1.如何编写jedis程序呢
A.将jedis的jar包引入到项目中
B.编写程序
单例的方式:
连接池方式连接:
以上程序执行前都需要在linux服务器上设置打开6379端口才能连接到linux服务器:
在安装目录输入命令vim /etc/sysconfig/iptables 进入防火墙设置
加入以下设置
重启linux防火墙,输入命令:service iptables restart
五.Redis的数据结构
1.字符串(String)
A.特点
二进制安全的,存入和获取的数据相同
value最多可以容纳的数据长度为512M
B 存储String常用命令:
赋值 set key value
取值 get key
删除 del key
数值递增 incr key ,当前key为空时会创建这个key,并且value加1;不为空时判断value是否为数字型,若不是递增则报错
数值递减 decr key
扩展命令
增加数值 incrby key value ,key不存在时创建这个key并且加上对应数值
减去数值 decrby key value
拼接字符串 append key value
2.哈希(hash)
A.特点
String key 和 String value 的map容器
每一个hash可以存储4294967295个键值对
B.常用命令:
赋值单个键值对 hset key key1 value1
赋值多个键值对 hmset key key1 value1 key2 value2
取值单个键值对 hget key key1
取值多个键值对 hget key key1 key2
取值全部键值对 hgetall key
删除一个或多个 键值对 hdel key key1 key2
删除整个hash del key
增加数字 hincrby key key1 value
自学命令
判断属性是否存在 hexists key key1
获取属性个数 hlen key
获取所有key hkeys key
获取所有值 hvals key
3 .字符串列表(list)
4.字符串集合(set)
5.有序字符串集合(sorted set)
六.redis的Keys的通用操作
1.获取所有key : keys *
2.查找某些key : keys xx?
3.删除某些key : del key1 key2 key3
4.判断key是否存在 : exists key
5.key重命名 : rename key newkey
6.设置key过期时间:expire key time
7.查看key剩余超时时间: ttl key
8.获取指定key的类型 : type key
七.redis的事务
1.多数据库
A.客户端可指定连接哪个数据库(默认连接0号数据库):select num
B.将一个数据库中的key移到另一个数据库:move key num
2.提供事务的支持
在事务中所有命令将被串行化顺序执行,事务执行期间redis不会再为其他客户端提供任何服务,从而保证事务中的所有命令都被原子化执行,在redis中如果某个命令执行失败,后面的命令还会被执行。
在事务开启之前,如果客户端和服务器之间发生通讯故障并导致网络断开,那么这之后执行的语句都将不会被服务器执行;如果中断事件是发生在客户端执行语句之后,那么这个事务中的所有命令都将被服务器执行。
A.开启事务:multi
B.提交事务:exec
C.回滚事务:discard
八.redis的持久化
1.为何要持久化
redis的高性能是由于它所有的数据都存储在内存中,为了使redis在重启之后仍然能保证数据不丢失,就需要将数据从内存当中同步到我们的硬盘上,这个过程就叫做持久化操作。
2.redis的持久化方式
A.RDB方式(默认):在指定的时间间隔内将内存中的数据集快照写入到磁盘。
优势:
a.整个redis数据库只包含一个文件,对文件备份非常方便,系统发生故障时很容易进行恢复 。
b.性能最大化,对于redis服务进程而言,在开始持久化时唯一需要做的只是分叉出一些进程,之后再由子进程完成持久化的工作,这样能最大化避免服务器进程执行IO操作。
c.相比AOF方式,如果数据集很大,RDB启动的效率会更高。
劣势:
a.因为是在指定时间间隔内更新数据,所以服务器宕机时容易丢失数据。
b.RDB由子进程完成持久化的工作,这样在数据集很大时可能会导致整个服务器停止几百毫秒甚至一秒钟。
配置redis.conf:
save 900 1 : 每900秒至少有1个key发生变化时往硬盘上写一次。
dbfilename dump.rdb : 指定数据的文件名,即dump.rdb。
dir ./ : 文件保存的路径,./表示当前的配置文件同路径下。
B.AOF方式: 以日志的方式记录服务器所处理的每一个操作,在redis服务器启动之初会读取该文件来重新构建我们的数据库来保证启动后数据是完整的。
a.更高的数据安全性,每次修改数据才同步到磁盘,效率低但最安全。
b.这种机制对于日志文件的写入操作采用append模式,因此在写入过程中服务器出现宕机的现象也不会破坏日志文件中已经存在的内容。
c.如果日志过大,redis可以自动启用重写机制,除了日志文件,还有一个文件用于记录哪些修改命令被执行,这样方便重写。
劣势:
a.对于相同数量的数据集而言,AOF文件要比RDB文件要大一些。
b.根据同步策略不同,AOF效率比RDB低。
配置redis.conf:
appendonly no :默认为no即不使用AOF方式,改为yes便可启用AOF方式。
appendfilename "appendonly.aof" : 启用AOF方式后会产生一个名为appendonly.aof的文件。
同步策略:
appendfsync always 每修改一次同步到磁盘上 (通常为了安全会选择这种)
appendfsync eyerysec 每秒同步一次
appendfsync no 不同步
C.无持久化:通过配置禁用服务器持久化功能,这种情况下redis就是一个缓存机制。
D.同时使用RDB和AOF。