Redis
一、什么是redis
nosql
非关系数据库 数据模型 key=>value
Memcached 内存缓存数据库
Redis 内存缓存数据库
MongoDB 功能齐全 数据存储到磁盘
Redis 是Remote Dictionary Server(远程数据服务)的缩写。
是一款 内存高速缓存数据库。
它支持多种数据结构:
1. String、
2. List(双向链表)、
3. Hash(哈希)、
4. Set(集合)、
5. zSet(有序集合sorted set)
二、为什么使用redis
是一款数据库产品,有数据存储功能,
高速读取数据(in-memory)
减轻数据库负担
有集合计算功能(优于普通数据库和同类别产品)
多种数据结构支持
三、什么场合使用redis
根据不同的业务模式,使用不同的数据存储结构
①[Sorted Set]排行榜应用,取top n操作,例如sina微博热门话题
②[List]获得最新N个数据 或 某个分类的最新数据
③[string incr]计数器应用
④[Set] sns(social network site)获得共同好友
⑤[Set]防攻击系统(ip判断)等等 黑白名单
四、Redis的优点(与Memcache比较)
- Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持master-slave(主-从)模式应用。
- Redis支持数据的持久化,可以将数据保存在磁盘中,重启时候可以再次加载使用
- Redis单个value的最大限制是1GB,memcached只能存1MB的数据。
五、编译安装Redis
#先将redis压缩包,php扩展包上传至/root/amp,然后解压
cd /root/amp
tar zxvf redis-4.0.1.tar.gz
cd redis-4.0.1
make PREFIX=/usr/local/redis install
测试启动redis
/usr/local/redis/bin/redis-server
后台启动redis服务器
默认不支持后台启动,使用不方便,通过配置文件进行配置。
cd /root/amp/redis-4.0.1
cp ./redis.conf /usr/local/redis/bin/
vim +/daemon redis.conf
:i
daemonize yes
:wq
#启动时配上配置文件参数
./redis-server ./redis.conf
命令行客户端使用
/usr/local/redis/bin/redis-cli
#设置和获取
set name itcast
get name
#查看redis服务器状态
info
七、redis各种数据结构操作
1.key
redis默认提供了16个库的使用,下标从0开始。
2.String
string是redis最基本的类型
redis的string可以包含任何数据。包括jpg图片或者序列化的对象。
单个value值最大上限是1G字节。
如果只用string类型,redis就可以被看作加上持久化特性的memcache
3.List
ist类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。
这使得list既可以用作栈,也可以用作队列。
栈 先进后出 同一端进出
队列 先进先出 一端进,另外一端出
需求:建立一个存储结构 存储一种类型(业务上)的数据
取出最后进入结构的数据。
记录目前市场常见的编程语言
c c++ c# java html css JavaScript php python ruby go nodejs
key:LA
4. set
set是string类型的不允许有重复元素的无序集合
set元素最大可以包含(2的32次方-1)个元素。
关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能.
需求:存储两个人的朋友圈
设计:
xiaomingFR xiaoqiang xiaohua xiaohong xiaohuang xiaohei
xiaohongFR xiaoming xiaohei xiaohuang xiaolv xiaolan
5. zset
和set一样sorted set也是string类型元素的集合,不允许有重复元素
不同的是每个元素都会关联一个权(score)。
通过权值可以有序的获取集合中的元素。
需求:手机应用下载排行榜
设计:APPTOP
id name score
1 QQ 3
2 wechat 6
3 weibo 5
4 taobao 8
5 jd 9
6 king 2
6. Hash
key=>value(feild:value)
适合存储key=>value对应格式的数据。json对应关系、对象对应关系、关联数组
实例:
八、php操作redis
1.安装拓展
①编译生成拓展
tar zxvf redis-3.1.5.tgz
cd redis-3.1.5
是php的拓展文件,所以需要php的一个配置拓展的软件phpize,进行设置生成configure文件
shell > /usr/local/php/bin/phpize
shell > ./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
②开启php.ini配置,重启启动服务器,查看phpinfo
vim /usr/local/php/lib/php.ini
#847行开启
extension=redis.so
service httpd restart
2.代码操作
<?php
//实例化
$redis = new Redis();
//连接
$redis -> connect('192.168.65.128',6379);
//设置
$redis->set('key1',time());
//获取
var_dump($redis->get('key1'))
3.消息队列操作
需求:设计一个抢购的业务模式,要求不能够超卖。
设计:
①把商品数量添加到list中
②通过出队列的方式,把数据一个一个取出来
设计模式:
生产者:把需要执行的任务添加到队列中
消费者:把队列中的任务一个一个消耗掉
实际中在代码中体现就是两个访问路径和方法
实现:
添加商品到对列中
限购思路:
①通过用户的唯一标识确认 登录之后才可以抢购,在下单之前判断是否已经买过了
②简单通过ip判断是否已经购买(误伤率大)
九、优化
redis提供数据持久化机制(数据存储到磁盘中)。
方式:
①snapshotting快照 默认开启的
②aof append only file 追加写方式
1、snapshotting
①查看配置文件快照默认备份频率
2、append only file
注意:开启append only file 之前的快照数据会丢失!!!
要先保存之前的快照数据到数据库或文件中!!!
①查看配置开启
②重启配置测试aof
3、主从复制架构
主 master 192.168.65.128
从 slave 192.168.65.129
slave读master服务器并同步
需解决问题:
①主服务器必须运行从服务器远程访问,防火墙端口问题6379
②从服务器上配置,主服务器的相关地址信息
3.1、主服务器配置
①打开主服务器防火墙6379端口
②主服务器要在配置中允许从服务器登录
3.2、从服务器配置
①修改配置文件相关信息
修改好主从服务器,重启redis的主从服务器。通过redis-cli命令行客户端进行登录,测试操作主服务器
主服务器查看主从效果
从服务器查看主从效果