1.什么是NoSQL?
NoSQL,not only sql,指的是非关系型数据库,NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,所以NoSQL解决的是大数据量的问题。
分类:1、键值存储数据库,如Redis和Memcached
2、列存储数据库
3、文档型数据库,如MongoDb
4、图形数据库
2.什么是redis?
2.1 Redis的概念
Redis是一个开源的高性能的,c语言编写的NoSQL数据库,redis的数据都是缓存在内存中的,它会周期性的把数据写入到磁盘或把修改操作追加到记录文件中。redis是一个key-value的数据库,支持的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
2.2 Redis的特点
1、数据保存在内存,存取速度快,并发能力强
2、它支持存储的value类型很多,包括string,list,set,zset,hash
3、它提供多种语言的客户端支持,使用方便
4、Redis支持集群(主从同步),数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
5、支持持久化,可以将数据保存在硬盘的文件中
6、支持订阅/发布(subscribe/publish)功能QQ群
2.3 Redis的应用场景
Redis经常被用在缓存中,因为redis缓存可以解决性能的问题,将查询频繁且变动较少的数据放入缓存,不用每次去查,可以提高性能
3.redis的安装与使用
3.1 Redis的安装
直接在Redis官网下载redis的压缩包,解决就可以使用,Redis 的官方下载站是 http://redis.io/download
解压之后的文件目录如下:
3.2 Redis的运行
直接双击redis-server.exe启动服务端,再启动redis-cli.exe,然后就可以操作进行redis操作了
3.3 Redis的常用命令
命令 | 含义 |
---|---|
keys * | 获取所有key列表 |
del key | 删除指定的key |
expire key xx | 设置key的过期时间(xx秒后过期) |
ttl key | 查看key的过期时间 |
select index | 切换数据库,redis中默认有16个库,索引0-15 |
flushdb | 清除当前库 |
flushall | 清空整个redis服务器数据,所有的数据库全部清空 |
3.4 Redis的对string的操作命令
命令 | 含义 |
---|---|
set key value | 将字符串值value关联到key,即以key-value的格式添加数据 |
get key | 返回key关联的字符串值,即通过key取到对应的value |
mset key1 value1 key2 value2… | 同时设置一个或多个 key-value 对 merge |
mget key1 key2 | 返回所有(一个或多个)给定 key 的值 |
incr key | 将 key 中储存的数字值增1(key不存在,则初始化为0,再加1),即自增1 |
decr key | 将 key 中储存的数字值减1(key不存在,则初始化为0,再减1),即自减1 |
incrBy key num | 自增多少,即自增指定的值 |
decrBy key num | 自减多少,即自减指定的值 |
Setex key seconds value | 同时设置key的过期时间和值 |
3.5 Redis的对list的操作命令
list集合可以看成是一个左右排列的队列(列表)
命令 | 含义 |
---|---|
lpush key value1, value2… | 从表头添加一个或多个数据(最左边) |
rpush key value1, value2… | 从表尾添加一个或多个数据(最右边) |
lpop key | 移除并返回列表 key 的头(最左边)元素。 |
rpop key | 移除并返回列表 key 的尾(最右边)元素。 |
lrange key start stop | 返回列表 key 中指定区间内的元素,查询所有的stop为-1即可 |
3.6 Redis的对set的操作命令
set集合是一个无序的不含重复值的队列
命令 | 含义 |
---|---|
sadd key value1, value2… | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 |
srem key value1, value2… | 移除集合 key 中的一个或多个 member 元素,不存在的 |
member | 元素会被忽略 |
smembers key | 返回集合 key 中的所有成员。 |
3.7 Redis的对事务的操作命令
命令 | 含义 |
---|---|
multi | 开启事务,标记一个事务块的开始。 |
exec | 提交事务,执行所有事务块内的命令。 |
discard | 取消事务,放弃执行事务块内的所有命令。 |
3.8 Redis的设置密码的操作命令
通过在redis.conf配置文件中添加一行代码:requirepass 123456 123456是你设置的具体密码,然后在启动的时候不在直接启动
而是redis-server.exe redis.conf执行这个命令,即启动时带上配置文件,然后操作时会需要密码验证才能操作
auth 123456 验证密码
4.redis的持久化
redis有两种持久化策略:RDB数据文件,AOF更新日志
所以Redis的持久化配置是还来不及保存的数据,会以AOF日志的方式保存下来。
Redis启动时,先解析日志文件(一堆命令),恢复数据。然后还要加载RDB文件(取并集)。
4.1 AOF追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
我们通过配置redis.conf中的appendonly yes就可以打开AOF功能。如果有写操作(如SET等),redis就会被追加到AOF文件的末尾。
默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据。
在redis.conf配置下面内容
appendonly yes yes 开启,no 关闭
appendfsync everysec 每秒 fsync 一次
4.2 RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
在redis.conf配置文件中下面的内容时配置的RDB
save 900 1 至少在900秒的时间段内至少有一次改变存储同步一次
5.redis的淘汰策略
淘汰一些数据,达到redis数据量都是有效的,redis的淘汰策略有以下几种:
淘汰策略 | 淘汰原理 |
---|---|
volatile-lru | 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 |
volatile-ttl | 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 |
volatile-random | 从已设置过期时间的数据集(server.db[i].expires)中任意(随机)选择数据淘汰 |
allkeys-lru | 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰 |
allkeys-random | 从数据集(server.db[i].dict)中任意选择数据淘汰 |
no-enviction(驱逐) | 禁止驱逐数据(不删除任意数据.默认策略,但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误) |
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。