NoSQL:not only sql
什么是NoSQL?
是一项全新的数据库理念,泛指非关系型的数据库。
为什么有NoSQL?
互联网项目:数据库高并发读写,海量数据高效率存储,数据库的高可用性和高可扩展性。
NoSQL的主流:
键值对(redis)、列式存储、文档图形、图形数据库。
NoSQL特点:
数据库高并发读写,海量数据高效率存储,可扩展。
Redis简介
什么是实时系统?
瞬间可以实现某些数据的统计或者是功能的实现
什么是Redis?
由C语言实现的直接操作内存的开源的高性能的数据库软件。
Redis的应用场景?
- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 聊天室的在线好友列表
- 任务队列(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
安装redis
步骤一:
打开虚拟机,开启linux操作系统。获取Redis的安装包,redis-3.0.7.tar.gz,利用filezilla.exe软件(Linux章节用过)将安装包上传到/root/
步骤二:
命令cd /root/ 到root文件夹里面。命令tar -zxvf redis-3.0.7.tar.gz解压。
步骤三:
编译,将源码翻译成为.o文件,命令cd /root/redis-3.0.7进入文件夹,命令make编译。
步骤四:
创建一个安装目录,命令mkdir /usr/local/redis,创建一个名为redis的文件夹。
步骤五:
安装redis
cd /root/redis-3.0.7
make PREFIX=/usr/local/redis
安装截图
步骤六:
由于redis启动需要一个配置文件,将配置文件复制到/usr/local/redis/中去
cp /root/redis-3.0.7/redis.conf /usr/local/redis
步骤七:
修改/usr/local/redis/redis.conf,就是将下图中的daemonize参数由原来的no改为yes。
步骤八:
启动服务端和客户端
第一句命令的意思是在配置文件redis.conf的前提下执行开启服务器
步骤九:
测试redis是否正确安装成功
向服务器发送ping,服务器返回pong
向服务器发送set name erbei,之后再使用命令get name能够获取带erbei的信息
向服务器发送key *,可以查看服务器中一共有多少键值对的数据,可以查看到各个键值类型数据。
(需要注意是,redis的段口号是6379,但是在之前的步骤中,我并没有开放这个端口,那为什么这直接可以运行redis,因为redis有他默认的IP地址,127.0.0.1,和端口号,下图中的IP地址和当前linux的IP地址是不一样的,要想使用当前linux的IP地址还需要打开防火墙下的6379端口号。)
Redis的数据结构
redis常用命令
- set key value 赋值
- get key 取值
- getset key value 先获取key的值,在设置该key的值
- del key 删除指定key
- incr key 将key值自增1,key不存在初始值为0
- decr key 将key值自减1,key不存在初始值就是0,若当前key的类型不能转化为整型将会抛异常
- incrby key increment 指定key值增加increment
- decrby key increment 指定key值减少increment
- append key value 在指定key值后面增加value值
以下是hash类型的常用命令
- hset key field value 为指定的key设定键值对
- hmset key field value [field2 value2 …] 设置key中的多个键值对
- hget key field 返回指定的key中的field
- hmget key fields 获取key中的多个field的值
- hgetall key 获取key中的所有键值对
- hdel key field [field…] 可以删除一个或多个字段,返回值是被删除的字段个数
- del key 删除整个list,整个键值对
- hincrby key field increment 设置key中field的值增加increment
- hexists key field 判断指定的key中的field是否存在
- hlen key 获取key中所包含的field的数量
- hkeys key 获得所有的key
- hvals key 获得所有的value
Redis的消息订阅与发布
- subscribe channel 订阅频道,例如subscribe mychat,订阅mychat这个频道
- psubscrbe channel* 批量订阅频道,例如psubscribe s*,订阅以s开头的频道
- publish channel content 在指定的频道中发布消息,如publish mychat ‘sss’
在别的CRT窗口中访问指定频道,消息会在指定的频道中显示。当你批量订阅了以my开头的频道时,你可以使用mychat01,mychat02等等,只要是my开头,都可以使用。
Redis事务
和众多的其他数据库一样,redis作为NoSQL数据库也同样提供而事务机制,在redis中,MULTI/EXEC/DISCARD这三个命令是我们实现事务的基石
- mutil 开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,(一个干在干另一个,不能同时干两个事务)直到执行EXEC时,这些命令才会被原子的执行,类似与关系型数据库中的:begin transaction
- exec 提交事务,类似与关系型数据库中的:commit
- discard 事务回滚,类似与关系型数据库中的:rollback
上面箭头表示的是在开启事务的时候,变量值是不会变得,只有事务执行完,变量才会发生改变。
左边的方框表示的是回滚,刚开始是jack,在事务中设置成了rose,但是回滚了,值又变成了初始化的jack
右边方框表示的是错误命令,虽然中间有个加x出错了,但是不耽误其他语句,最后变量还是加上了两个5,变为了20.
redis持久化
两种持久化的方式,一种RDB,一种AOF,可以单独使用其中一种或者将两者结合使用。
1、RDB持久化(默认支持,无需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
2、AOF
该机制将以日志的形式记录服务器所处理的每一个写操作,在redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。就是把你每一句的命令都拿个文件记录下来,下次你再使用Redis的时候,自动加载这个文件,就可以获取到之前操作Redis的数据了。