redis

  • 前提
  • 一. 数据库分类
  • 二、Redis重要特性
  • 三.使用场景:
  • 四.redis基本命令
  • 五.redis安装
  • 六. redis主从复制


前提

互联网需求的3高
高并发,高可扩,高性能
Redis 是一种运行速度很快,并发性能很强,并且运行在内存上的NoSql(not only sql)数据库

一. 数据库分类

关系型: mysql oracle sqlserver db2 postgresql
非关系型: redis mongo ES

二、Redis重要特性

1.速度快
c语言写的
代码优雅
单线程架构
2.支持多种数据结构
字符串,哈希,列表,集合,有序集合
3.丰富的功能
天然计数器
健过期功能
消息队列
4.支持客户端语言多
php,java,python
5.数据持久化
所有的数据都运行在内存中
支持2种格式持久化数据AOF RDB AOF&RDB
6.自带多种高可用架构
主从
哨兵
集群
7. 数据高并发的读写
8.海量数据的读写
9.对扩展性要求高的数据

三.使用场景:

1.配合关系型数据库做高速缓存
2.缓存高频次访问的数据,降低数据库io
3.分布式架构,做session共享
4.可以持久化特定数据。
5.利用zset类型可以存储排行榜
6.利用list的自然时间排序存储最新n个数据
7.缓存-键过期时间
把session会话存在redis,过期删除
缓存用户信息,缓存Mysql部分数据,用户先访问redis,redis没有再访问mysql,然后回写给redis
商城优惠卷过期时间
8.排行榜-列表&有序集合
热度/点击数排行榜
直播间礼物积分排行
9.计数器-天然支持计数器
帖子浏览数
视频播放数
评论数
点赞/踩
10.社交网络-集合
粉丝
共同好友
兴趣爱好
标签
11.消息队列-发布订阅
配合ELK缓存收集来的日志

四.redis基本命令

1.全局命令
KEYS * #列出所有键值名,但在企业环境禁止使用
DBSIZE #查看有多少键值数
EXISTS #查看键值是否存在
EXPIRE k2 20 #设置K2过期时间为20秒,20秒后k2自动取消
PERSIST k2 #取消k2的过期时间
TTL k2 #查看k2的生命周期
TYPE #查看数据类型

2.字符串类型:string
SET k3 3 #创建键值
GET k3 #查看键值
DEL k2 #删除键值
INCR k3 #键值k3为整数,递增加1
INCRBY k3 10 #递增k3的量值10
MSET k4 v4 k5 v5 k6 v6 k7 v7 #批量创建键值
MGET k4 k5 k6 k7 #批量查看键值

3.列表:list
RPUSH list1 1 2 3 4 #创建列表list1,值为1 2 3 4
RPUSH list1 5 6 7 8 #在list1右侧添加5 6 7 8
LPUSH list1 0 #在list1左侧添加0
LRANGE list1 0 -1 #查看list1所有值
RPOP list1 #删除右侧最后一个值
LPOP list1 #删除左侧第一个值
LTRIM list1 0 2 #仅保留前3位,其他值删除

4.哈希:hash
HMSET user:1000 username zhangsan age 17 job it #创建hash键值user:1000
HGET user:1000 username #查看键值中username参数
HGET user:1000 age #查看键值中age参数
HGET user:1000 job #查看键值中job参数
HMSET user:1000 tel 18866668888 #添加值tel

5.集合:set
SADD set1 1 2 3 #创建集合set1
SMEMBERS set1 #查看集合set1
SADD set1 1 4 #为集合set1添加值1 4 ,但集合特性是去除重复,所以1无法再添加
SREM set1 1 4 #删除集合的值1 4
sadd set2 1 4 5 #创建第二个集合set2
SDIFF set1 set2 #求差集
SINTER set1 set2 #求合集(交集)
SUNION set1 set2 #求并集

五.redis安装

1.准备安装和数据目录

mkdir /data/soft
mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}

2.下载redis安装包

cd /data/soft
wget http://download.redis.io/releases/redis-5.0.7.tar.gz

3.解压redis到/opt/redis_cluster/

tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
ln -s /opt/redis_cluster/redis-5.0.7 /opt/redis_cluster/redis

4.切换目录安装redis

cd /opt/redis_cluster/redis
make && make install

5.编写配置文件

vim /opt/redis_cluster/redis_6379/conf/6379.conf
添加:
bind 127.0.0.1 192.168.42.172
port 6379
daemonize yes
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
databases 16
dbfilename redis.rdb
dir /opt/redis_cluster/redis_6379
保存退出

6.启动当前redis服务

redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

7.1.redis持久化:
RDB:生成时间点快照,保存于硬盘
优点:速度快,适合做备份,能做主从复制,单开子进程进行rdb操作不影响主业务
缺点:会有部分数据丢失

AOF:记录所有写操作命令,通过再次执行这些命令还原数据
优点:最大程度保证数据不丢失
缺点:日志记录量太大

2.RDB配置:
redis-cli 登录redis
bgsave rdb保存命令

vim /opt/redis_cluster/redis_6379/conf/6379.conf	
#末尾添加:
save 900 1           #在900秒(15分钟)内,如果至少有1个key发生变化,则dump内存快照。
save 300 10          #在300秒(5分钟)内,如果至少有10个key发生变化,则dump内存快照。
save 60 10000        #在60秒(1分钟)内,如果至少有10000个key发生变化,则dump内存快照
#保存退出

bgslave

3.AOF配置

vim /opt/redis_cluster/redis_6379/conf/6379.conf
#末尾添加:
appendonly yes			#启用AOF持久化
appendfilename "redis.aof"	#指定AOF文件名
appendfsync everysec		#每秒同步一次
#保存退出

bgslave

4.重启redis

vim /root/redis.sh
添加
#/bin/bash
redis-cli shutdown
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
保存退出

sh /root/redis.sh

######################################################################################

六. redis主从复制

环境:
主服务器:192.168.1.42.172
从服务器:192.168.1.42.143
1.redis主从复制
为解决单点故障把数据复制到一个或多个副本副本服务器(从服务器),实现故障恢复和负载均衡

2.开启第二台服务器,安装redis
(1)把第一台服务器的redis安装目录,scp到第二台服务器上
> scp -rp /opt/redis_cluster/ root@192.168.42.143:/opt
(2)在第二台服务器上,make install安装redis
> cd /opt/redis_cluster/redis
> make install

vim /opt/redis_cluster/redis_6379/conf/6379.conf 
	#修改:
	bind 127.0.0.1 192.168.42.143
	#末尾添加
	slaveof 192.168.42.172 6379
	#保存退出
3)启动服务

redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

(4)主服务器上新建键值,测试从服务器自动同步

redis-cli
keys *

(5)从服务器在同步过程中,只能复制主数据库的数据,不能手动添加修改数据;
如果从服务器非要修改数据,需要断开同步:
> redis-cli slaveof no one
验证从服务器是否能添加数据
> redis-cli
> set 1 1
如果还不能修改则

vim /opt/redis_cluster/redis_6379/conf/6379.conf
	删除
	slaveof 192.168.42.172 6379
重启:
redis-cli shutdown
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

再次验证
> redis-cli
> set 1 1