redis的入门与应用

redis的入门与应用

第一章 课程简介

课程内容概要

  1. 第一部分 初识redis
    • redis的概念
    • redis的安装
    • redis的五种数据类型
  2. 第二部分 操作redis
    • PHP的redis扩展安装
    • PHP操作redis的五种类型

什么是redis

  • 首先,redis是远程的。它有客户端和服务端两个部分,客户端和服务端可以部署在不同的机器上,它们之间是通过redis自定义的协议进行传输和交互的。我们平时说的redis,通常是指的redis的服务端,只有在特殊的具体的错误定位的时候,我们才需要说redis的客户端出了什么什么问题。
  • 其次,redis是基于内存的,它所有的数据和结构都是存储在内存中,所以这也就代表了redis所有的操作都是非常高速,性能远远优于硬盘数据操作。另一方面,正式因为他所有的数据跟结构都是存储在内存中,所以它也是一个比较吃内存的软件。
  • 最后,redis是非关系型数据库,它的本质是一个数据库,用来存储数据的,但是它和MySQL是不同的,MySQL是关系型数据库而redis不是。关系型数据库在进行存储之前必须要定义好所谓的数据字典,后期的存储数据按照数据字典进行存储,而redis就不需要定义数据字典。

redis的应用场景

  • 当做缓存来使用,如:当我们的系统接口速度比较慢的时候,我们可以将接口的某些数据缓存起来,当下次进行请求时就不需要再进行查询数据库操作,而是可以直接从redis中读取,这也是提升系统性能最常用的到方法之一。
  • 其次是队列,redis中提供了一个list结构,这个结构集成了push和pop操作,redis保证了push和pop是原子性的。基于这个结构和原子性,我们就可以把redis当做队列来使用,使用push来插入队列元素,使用pop来弹出队列元素。
  • 最后是数据存储,这个意思就是,我们可以直接将redis都当成数据存储来使用,所有的增删改查可以直接在redis中进行操作,不需要再借助MySQL来进行数据存储,我们可以这么做的基础是redis有非常完备的硬盘持久化的机制,它有两种持久化的机制,配合这两种持久化的机制,我们可以把我们的redis数据定期持久化到硬盘中。这样,我们就保证了redis中数据的完整性和安全性。
  • 与memcached的区别
    • memcached 的单个key 老版本 1M 新版本 2M 可以通过修改 memcached.h 修改 KEY_MAX_LENGTH 调整单个KEY的大小
    • redis单个key 512M
    • Memcached 是多线程 redis 是单线程
    • Memcached 数据不能持久化 断电数据消失
    • redis可以持久化 因为使用了 RDB和AOF机制
    • memcached 不支持集群 但是支持 Memcached::addServers() 十台组合成1台使用
    • redis支持集群 而且redis 支持库 0-15 16个库
    • memcached 支持key=》value redis有多种数据类型
    • redis 还可以做消息队列 比如聊天室 IM

第二章 redis的安装

redis的安装环境

  • 安装环境

    • 服务器环境:Linux环境 (本次使用 CentOS release 6.8 )

      查看命令 cat /etc/redhat-release

    • redis 版本(3.2.9 http://download.redis.io/releases/)

    • 预装软件(yum安装gcc和tcl)

      gcc C语言的编译器,redis是基于C语言写的;tcl是一门语言,redis一些组件基于tcl。

redis服务器端安装

  • wget -c http://download.redis.io/releases/redis-3.2.9.tar.gz

  • tar -zxvf redis-3.2.9.tar.gz

  • mv redis-3.2.9 /usr/local/redis

  • cd /usr/local/redis/

  • make insatll

  • ls src/redis* #查看刚刚生成的redis二进制文件

    用途 文件名称
    redis-cli redis客户端
    redis-server redis服务端
    redis-benchmark redis 性能测试工具
    redis-check-aof AOF修复工具 因为AOF Redis才能持久化存储
    redis-check-rdb RDB检查工具
    redis-sentinel 哨兵服务器 2.8以后才有的

  • which redis-server #查看安装目录

  • 启动redis

    • cd /usr/local/redis/src
    • ./redis-server
    • ./redis-server -v 查看版本号
    • ./redis-server /usr/local/redis/redis.conf 指定配置文件启动 以端口号区分redis服务器
  • 配置开机启动。找到redis 提供的开机启动脚本/usr/local/redis/utils/redis_init_script

  • cd utils

  • cp redis_init_script redis_init_script_6379 #以端口号 区分redis服务器

  • 修改redis 启动脚本

    vim redis_init_script_6379

    REDISPORT=6379
    EXEC=/usr/local/redis/redis/src/redis-server
    CLIEXEC=/usr/local/redis/redis/src/redis-cli
    
    PIDFILE=/var/run/redis_${REDISPORT}.pid
    CONF="/usr/local/redis/redis/redis_${REDISPORT}.conf"
    
  • 修改redis.conf

    • cd /usr/local/redis
    • cp redis.conf redis_6379.conf
    • vim redis_6379.conf
    daemonize yes #以守护进程启动,后台启动
    
  • 启动脚本

    /usr/local/redis/utils/redis_init_script_6379 start

  • vim /etc/rc.local 写入加入开机启动脚本

    /usr/local/redis/utils/redis_init_script_6379 start
    
  • ps aux|grep redis-server查看是否已经启动

redis客户端的安装

  • redis-cli端口6379,直接就可以连接了,如果配置文件中改了默认的端口,则 redis-cli -h 127.0.0.1 -p 端口号 ,可以使用info 命令来查看redis-server的当前状态。

第三章 redis数据类型介绍

3-1 redis的五种数据类型

数据类型 存储的值 读写能力
String 可以是字符串、整数或浮点,统称为元素
List 一个序列集合且每个节点都包好了一个元素(一个有序的列表) 序列两端推入或弹出,修剪、查找或移除元素
Set 各不相同的唯一的元素 从集合中插入或删除元素
Hash 有key-value的散列组,其中key是字符串,value是元素 按照key进行增加删除
Sort Set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找

3-2 string类型操作

key ----> value(string/int/float)

  • 设置值 set string1 aaa
  • 读取值get string1;
  • set string2 4
  • 自增 incr string2
  • 自减 decrby string2 2

3-3 list类型操作

  • 一个有序的列表

    key ------> value(1) 左

    ​ value(2)

    ​ value(3) 右

  • 操作

    • lpush list1 12--->lpush list1 13--->rpop list1

    • list 不要求集合中的元素是唯一的

      lpush list2 12--->lpush list2 13--->lpush list2 13--->查看集合长度llen list2

3-4 set类型操作

  • set提供了无序的方式来存储多个不同的元素,每个元素的值都不一样,用户可以快速的对元素中的值进行添加和删除,以及检查某个元素是否在这个集合中

    key ------>value(1)

    ​ value(2)

    ​ value(3)

  • 操作

    • 插入sadd set1 12 --->查看集合中有多少元素scard set1 --->sadd set1 13 --->sadd set1 13 --->scard set1 结果是2--->判断13是否在set1中sismember set 13 返回0或1 --->删除13srem set1 13

3-5 hash 类型操作

  • hash类型也叫作散列类型,用户可以将多个键值对存储到redis一个键里面

    key------> key1 value(string/int/float)

    ​ key2 value(string/int/float)

    ​ key3 value(string/int/float)

    ​ key4 value(string/int/float)

  • 操作

    • hset hash1 key1 12--->hget hash1 key1--->hset hash1 key2 13--->hset hash1 key3 13 --->hlen hash1
    • 修改值hset hash1 key3 14
    • 一次性获取多值hmget hash1 key1 key2

3-6 sort set 类型操作

  • 又叫有序分数集,和hash很类似,存储的也是一个映射,它的映射是分数和元素的映射,它的分数是浮点型的,值(成员)唯一

    key ------> score(10.1) value(string/int/float) rank:1

    ​ score(9.1) value(string/int/float) rank:0

    ​ score(11.2) value(string/int/float) rank:2

  • 操作

    • zadd zset 10.1 val1--->zadd zset 11.2 val2--->zadd zset 9.2 val3--->查看有多少成员zcard zset1 --->按照分数排序zrange zset1 0 2 withscores--->查看某个值(成员)的排名zrank zset val2
    • 修改成员分数 zadd zset1 12.2 val3 --->zadd zset1 12.2 val2--->zrange zset1 0 2 withscores 如果成员的分数score值一样的话按照这两个成员的字典顺序排序。

第四章 PHP的redis扩展安装

4-1 PHP redis扩展安装环境

  • php -m 可以看安装了那些扩展

4-2 PHP redis扩展安装

  • git clone -b php7 https://github.com/phpredis/phpredis.git

  • cd phpredis

  • /usr/local/php7/bin/phpize

  • ./configure --with-php-config=/usr/local/php7/bin/php-config

  • make && make install

  • vim /usr/local/php7/etc/php.ini

    extension_dir="/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"
    extension=redis.so
    

  • service php-fpm restart

第五章 PHP操作redis

5-1 redis的链接操作

  • 说明:

  • 链接

    <?php
    // phpinfo();
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    

5-2 string类型操作

  • string 类型经常用在缓存JSON的结构上,因为JSON序列化完后就是一个字符串

    <?php
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    //string 操作
    $redis->delete('string1');
    
    $redis->set('string1','val1');
    $val = $redis->get('string1');
    var_dump($val); //val1
    
    $redis->set('string1',4);
    $redis->incr('string1',2);
    $val = $redis->get('string1');
    var_dump($val); //6
    

5-3 list类型操作(订单)

  • 队列,先进先出

    <?php
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    //list 操作
    $redis->delete('list1');
    
    $redis->lpush('list1','A');
    $redis->lpush('list1','B');
    $redis->lpush('list1','C');
    
    $val = $redis->rPop('list1');
    var_dump($val); //A
    

5-4 set类型操作

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//set 操作

$redis->delete('set1');

$redis->sAdd('set1', 'A');
$redis->sAdd('set1', 'B');
$redis->sAdd('set1', 'C');
$redis->sAdd('set1', 'C');

$val = $redis->sCard('set1');

var_dump($val); //3

$val = $redis->sMembers('set1');
var_dump($val);//array

5-5 hash类型操作(可用于存储复杂数据结构)

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//set 操作

$redis->delete('driver1');

$redis->hset('driver1', 'name', 'xiaoming');
$redis->hset('driver1', 'age', '25');
$redis->hset('driver1', 'sex', 'boy');

$val = $redis->hGet('driver1', 'name');
var_dump($val);

$val = $redis->hMGet('driver1', array('name', 'age'));
var_dump($val); //array

5-6 sort set类型操作(常用于排行榜)

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//set 操作

$redis->delete('zset1');

$redis->zAdd('zset1', 100, 'xiaoming'); //rank:2
$redis->zAdd('zset1', 90, 'xiaohong'); //rank:0
$redis->zAdd('zset1', 93, 'xiaowang'); //rank:1

$val = $redis->zRange('zset1', 0, -1); //从第0个开始,展示所有,从低到高
var_dump($val);

$val = $redis->zRevRange('zset1', 0, -1); //从高到低
var_dump($val);

第六章 课程总结

posted @ 2017-07-27 11:03  燕志浩  阅读(96)  评论(0编辑  收藏  举报