一、NoSQL简介
1.1NoSOL是什么
Not only sql,代表的不仅仅是sql,没有声明性查询语言;没有预定义的模式;使用键值对,列存储,文档存储,图形数据库的方式存储;最终一致性,而非ACID属性;CAP定理和高性能,高可用性;
1.2.数据库原理CAP+Base
A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
CAP理论
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性;
Base理论
BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。BASE是下面三个术语的缩写:基本可用(Basically Available)、软状态(Soft state)和最终一致(Eventually consistent)
二、Redis简介
REmote DIctionary Server(远程字典服务器) ,是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器;
2.1.Redis的特点
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用 ,Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储 ,Redis支持数据的备份,即master-slave模式的数据备份 。详细资料参考官网英文官网和Redis中文网。
2.2.Redis安装
第一步:连接虚拟机
1 | ssh root@192.168.1.18 |
第二步:拷贝本机文件到虚拟机中
1 | scp redis-5.0.0.tar.gz root@192.168.1.18:/opt |
第三步:解压redis
1 | tar -zxvf redis-5.0.0.tar.gz |
第四步:安装编译redis
1 | [root@localhost redis-5.0.0]# make |
第五步:根目录创建我们自己的redis配置文件夹,存放redis的配置文件备份
1 | [root@localhost ~]# cd / |
第六步:使用vim修改我们的redis配置文件
1 | vim redis.conf |
如果提示vim命令不存在,则使用以下命令安装
1 | yum -y install vim* |
第七步:查看redis服务是否启动
1 | [root@localhost myredis]# ps -ef|grep redis |
第八步:启动我们的redis服务
1 | [root@localhost redis-5.0.0]# cd /usr/local/bin/ |
第九步:进入redis
1 | [root@localhost bin]# redis-cli -p 6379 |
第十步:查看redis服务是否被启动
1 | 127.0.0.1:6379> ping |
第十一步:退出redis
1 | 127.0.0.1:6379> SHUTDOWN |
2.3.Redis的其他知识
在redis中,默认16个数据库,类似数组下表从零开始,初始默认使用零号库 ,使用select命令
切换数据库,使用dbsize命令
查看当前数据库的key的数量 ,使用flushdb:清空当前库
,使用Flushall;通杀全部库
,Redis索引都是从零开始
。
三、Redis五大数据类型
3.1.数据类型简介
Redis五大数据类型分别是:string
(字符串)、hash
(哈希 )、list
(列表) 、set
(集合)和zset
(sorted set:有序集合) ,可以在Redis常用命令找到自己忘记的redis命令;
3.2.Redis的key
使用keys *
命令查看当前库key的数量
1 | 127.0.0.1:6379> keys * |
使用exists key
命令判断当前库是否存在某一个key
1 | 127.0.0.1:6379> EXISTS k1 |
使用move key db
命令将当前库的key移入到指定库中
1 | 127.0.0.1:6379> MOVE k1 2 |
使用ttl key
命令查看指定key的存活时间,-1代表永不过期,-2代表已经过期
1 | 127.0.0.1:6379> ttl k2 |
使用expipre key second
命令指定key的存活时间
1 | 127.0.0.1:6379> EXPIRE k2 10 |
说明:当key过期后,就已经从内存中移除了,使用
keys *
不能获取到
使用type key
命令判断key的数据类型
1 | 127.0.0.1:6379> type k3 |
3.3.String数据类型
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。
常用的String命令
1 | # 设值 |
value数字的加减操作
1 | # 将指定的key进行加1操作,注意key的value是数字才可以 |
key的截取和替换命令
1 | 127.0.0.1:6379> set k1 hello12345 |
向redis中添加key和value
1 | # 增加指定存活时间的key-value |
合并设置和取值
1 | # mset:同时设置一个或多个 key-value 对 |
3.4.List数据类型
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边),底层实际是个链表
List数据的添加命令
1 | # 将一个或多个值插入到列表的表头 |
常用的操作命令
1 | # 返回列表中下标为index的元素 |
3.5.Set集合数据类型
常用命令
1 | # 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 |
3.6.Hash数据类型
常用命令
1 | # 将哈希表 user 中的域 id 的值设为 12 。 |
3.7.Zset数据类型
在set基础上,加一个score值,之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2。
常用命令
1 | # 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。 |
四、Redis配置文件
首先,从前面我们就可以看出,redis的配置文件redis.conf
位于redis安装包里,但是我们一般都不会修改redis本身的配置文件,而是复制一份修改。
4.1.units单位
打开redis.conf
文件,我们就可以看见redis的units单位,如下若是
1 | # 1k => 1000 bytes |
4.2.GENERAL通用配置
daemonize yes
配置,默认情况下,ReIIS不作为守护进程运行。loglevel notice
:日志级别,redis有四种日志级别,分别是debug
、verbose
、notice
、warning
port 6379
:端口配置。tcp-backlog
:设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值
来达到想要的效果。timeout 0
:在客户端空闲N秒后关闭连接(0禁用)。tcp-keepalive
:单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60 。syslog-enabled
:是否把日志输出到syslog中syslog-ident
:指定syslog里的日志标志