1、什么是NoSql
为了解决高并发、高可扩展(集群)、高可用(不能宕机)、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。
NoSql :全称 not only sql ,非关系型数据库。可以作为关系型数据库的一个很好的补充。不能替代。
2、什么是redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库(nosql),应用在缓存。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型有5种。
如下:
字符串类型 (String)
散列类型(hash)
列表类型(List)
集合类型(set)
有序集合类型(SortedSet)(Zset)
3、redis的应用场景
缓存。
分布式集群架构中的session分离。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。(SortedSet)
网站访问统计。
数据过期处理。(expire)
4、Redis的安装
yum -y install gcc-c++
安装步骤:
第一步:将redis的源码包上传到linux系统。
第二步:解压缩redis的源码包。
第三步:进行编译。 cd到解压后的目录 输入命令:make
第四步:进行安装。 输入命令:make install PREFIX=/usr/local/redis
PREFIX 必须是大写的。
第五步:检查目录是否存在。
在/usr/local/redis 下 有bin 说明安装成功。
5、redis服务端启动
- 后台启动:
第一步:把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
第二步:使用vim命令修改redis.conf配置文件 将daemonize no修改为daemonize yes
第三步:输入启动命令
[root@localhost bin]# ./redis-server redis.conf
第四步:检查redis进程:
[root@localhost bin]# ps -ef|grep redis
6、客户端Redis-cli连接redis
- 使用Redis-cli建立连接:
[root@localhost bin]# ./redis-cli
默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:连接的服务器的地址
-p:服务的端口号
- 退出连接:
第一种:
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> quit
第二种:
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> exit
第三种:CTR+C
[root@localhost bin]#
7、关闭Redis服务
第一种:通过连接上客户端进行关闭,使用shutdown 命令。
或者:cd 到redis的bin 目录 再执行以下:
[root@localhost bin]# ./redis-cli shutdown
第二种:使用 kill 命令。
找到对应的redis的进程id 然后使用命令:(pid为进程id)
kill -9 pid
8、Redis五种数据类型
8.1、String:key-value
redis命令不区分大小写,但是key区分的
redis中的数据都是字符串。
redis是单线程,(不适合存储比较大的数据)
使用incr 命令,如果key 不存在,会自动创建key 并自动+1.(Integer数据(虽然本身是String))
redis中所有的数据都是字符串。
set key value 设置值
get key 获取值
incr key 加一
decr key 减一
8.2、Hash: key-field-value
相当于一个key 对应一个map (map中又是key- value),
应用于归类
hset key field value 设置值
hget key field 获取值
hincrby key field num 设置增数量
8.3、List
List是有顺序可重复(数据结构中的:双链表,队列)
可作为链表 ,从左添加元素 也可以从右添加元素。
lpush list a b c d (从左添加元素)
rpush list 1 2 3 4 (从右边添加元素)
lrange list 0 -1 (从0 到 -1 元素查看:也就表示查看所有)
lpop list (从左边取,删除)
rpop list (从右边取,删除)
8.4、Set
Set无顺序,不能重复
sadd set1 a b c d d (向set1中添加元素) 元素不重复
smembers set1 (查询元素)
srem set1 a (删除元素)
8.5、SortedSet(zset)
有顺序,不能重复
适合做排行榜 排序需要一个分数属性
zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member )
(ZRANGE key start stop [WITHSCORES])(查看所有元素:zrange key 0 -1 withscores)
如果要查看分数,加上withscores.
zrange zset1 0 -1 (从小到大)
zrevrange zset1 0 -1 (从大到小)
zincrby zset2 score member (对元素member 增加 score)
9、key 命令
expire key second (设置key的过期时间)
ttl key (查看剩余时间)(-2 表示不存在,-1 表示已被持久化,正数表示剩余的时间)
persist key (清除过期时间,也即是持久化 持久化成功体提示 1 不成功0)。
del key: 删除key
EXISTS key
若key存在,返回1,否则返回0。
select 0 表示:选择0号数据库。默认是0号数据库
10、Redis持久化方案
Redis 数据都放在内存中。如果机器挂掉,内存的数据就不存在。
需要做持久化,讲内存中的数据保存在磁盘,下一次启动的时候就可以恢复数据到内存中。
1.RDB 快照形式 (定期将当前时刻的数据保存磁盘中)会产生一个dump.rdb文件
特点:会存在数据丢失,性能较好,数据备份。
2.AOF append only file (所有对redis的操作命令记录在aof文件中),恢复数据,重新执行一遍即可。
特点:每秒保存,数据比较完整,耗费性能。
redis 默认开启RDB
如下图:redis.conf中默认设置了保存规则及时间间隔
AOF开启设置:
修改 redis.conf 文件 如下图:
将appendonly 设置为yes
同时开启两个持久化方案,则按照 AOF的持久化放案恢复数据。
默认是按照rdb的方式恢复数据,如果开启了AOF,就是用AOF恢复数据,数据是存在于/usr/local/redis/bin/appendonly.aof文件中
11、Redis集群的搭建
redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.通过投票机制
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点