PHP-Redis入门笔记

Redis

  • 非关系型数据库
  • 基于内存存在,所以相对于MySQL等运行速度更快
  • 与MySQL相比,无需定义数据字典
  • 是远程的,分Server端和Client端,通过Redis自定义的协议传输与交互,通常我们所说的Redis都是Server端
  • 应用场景
    1. 缓存
    2. 队列(pop,push)
    3. 数据存储(通过硬盘持久化机制)

安装

  • 安装环境
    1. Linux CentOS 6.8

    2. 需要预装软件(gcc、tcl)(yum install即可)

    3. 步骤

      1. 下载Redis源码 wget http://download.redis.io/releases/(具体需要哪个版本自行选择)
      2. 解压并cd到目录中
      3. make && make install (将会放到usr/local/bin下)
    4. cp 安装目录/redis.conf 到 你要放置的目录(备份一下原配置文件,可以在该目录下修改配置文件,启动redis时可以使用该配置文件,或者你直接使用安装目录下的配置文件也可以)

    5. redis.conf 中的设置
      daemonize = no 改为 daemonize = yes (no:前台启动 yes:后台启动)
      port = 7200 (修改端口为7200)

    6. 启动redis(以/目录/redis.conf这个配置文件启动)
      sudo /usr/local/bin/redis-server /目录/redis.conf

    7. 查看redis是否已启动
      ps aux | grep redis-server

    8. 客户端登录,本机登录默认以6379端口登录,因为有修改了端口,所以需要在登录时指定登录端口
      redis-cli -h 127.0.0.1 -p 7200
      info # 查看redis的信息

Redis数据类型

数据类型 存储的值 读写能力
String 可以是字符串、整数或浮点,统称为元素 对字符串操作、对整数类型加减
List 一个序列集合切每个节点都包含了一个元素 序列两端推入或弹出元素,修剪,查看或移除元素
Set 各不相同的元素 从集合中插入或者删除元素
Hash 有key-value的散列祖,其中key是字符串,value是元素 按照key进行增加删除
Sort Set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找
  • String 格式:key->value(sting、int、float)

    • set string1 test1 # 设置一条数据,key为string1,value为test1
    • get string1 # 获取string1的值
    • set string2 4
    • get string2 # 得到4
    • incr string2 # 自增1操作
    • get string2 # 得到5
    • decrhy string2 2 # 自减2操作
    • get string2 # 得到3
  • List(有序列表)

    • 格式:key->value(12)(左)->value(13)->value(13)->value(14)(右)
    • 队列:左边推入,右边弹出
    • lpush list1 12 # 从左边推入一个元素 l(left):左边 push:推入
    • lpush list1 13
    • rpop list1 # 从右边弹出一个元素,得到12(先入先出)
    • lpush list12 | lpush list2 13 | lpush list 13 # 推入2个相同的元素
    • llent list2 查看list元素的个数(得到3)
  • Set(无序的方式存储多个不同的元素,每个元素的值都不一样)

    • sadd set1 12 # 添加一个set元素
    • sadd set1 13 sadd set1 13 # 添加2个相同的set元素
    • scard set1 # 查看set中有多少个元素(得到2个元素,说明value值不允许重复,必须唯一)
    • sismember set1 13 # 查看13是否存在于这个set中
    • srem set1 13 # 将13这个元素从set中移除
  • Hash(散列类型,将多个键值对存到一个redis键里)

    • 格式:key -> key1=>value1 / key2=>value2 / key3=>value3 / key4=>value4
    • hset hash1 key1 12 hset hash1 key2 13 hset hash1 key3 13 # 设置一个hash元素,只要求key不一样,value值可以一样
    • hget hash1 key1 # 获取hash元素中一个键的值(3个)
    • hlen hash1# 获取hash元素的个数
    • hmget hash1 key1 key2 key3 # 一次性获取多个元素的值
  • Sort Set

    • 格式:key->score(浮点数)=>value(string/int/float)=>rank(int)
    • value必须全局唯一,如果设置相同的value值,不会增加一个元素,会修改score的值。
    • zadd zset1 10.1 val1 # 向sort set中添加一个元素
    • zadd zset1 11.2 val2
    • zadd zset1 9.2 val3
    • zcard zset1 # 查看zset1中有几个元素
    • zrange zset1 0 2 withscores # 获取排名0-2的排名,带分数
    • zrank zset1 val2 # 查看val2 在 zset1 中的排名
    • zadd zset1 12.2 val3 # 将val3的score改为12.2
    • zadd zset1 12.2 val2
    • zrange zset1 0 2 withscores # 获取排名0-2的排名,带分数。val2和val3de分数一样,但是val2中的val等于val3中的val,2小于3,所以val2的排名高于val3

PHP操作Redis

  • [root@localhost ~]# php -m 查看PHP当前安装的扩展,查看是否已安装redis扩展
  • [root@localhost ~]# which phpize 查看phpize命令的位置
  • [root@localhost ~]# which php-config 查看php-config 命令的位置
  • 下载php-redis扩展,安装并打开扩展 (点击查看更多PHP-Redis操作)
[root@localhost ~]# git clone https://github.com/phpredis/phpredis.git # 从GitHub上把PHP-Redis代码下载下来
[root@localhost ~]# cd phpredis
[root@localhost ~]# phpize
[root@localhost ~]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost ~]# make && make install
[root@localhost ~]# vim /usr/local/php/etc/php.ini # 开启 phpredis扩展
[root@localhost ~]# php -m # 查看redis扩展是否已打开
[root@localhost ~]# cd /data/wwwroot/redis # 进入www目录下的redis目录
[root@localhost ~]# vim connect.php
  • string操作
<?php
	$redis = new \Redis();
	$redis->connect('127.0.0.1');	// 默认6379端口,如果你修改了端口,则为 $redis->connect('127.0.0.1',7200);
	//  string 操作
	$redis->set('string1','value1');s
	$val = $redis->get("string1");
	echo $val;
	echo PHP_EOL;

	$redis->set('string1',4);
	$val = $redis->get('string1');
	echo $val;
	echo PHP_EOL;

	$redis->incr('string1',2);
	$val = $redis->get('string1');
	echo $val;
  • list操作
<?php
	$redis = new \Redis();
	$redis->connect('127.0.0.1');

	// list 操作
	$redis->lPush("list1", "A");	// 从左边推入A
	$redis->lPush("list1", "B");	// 从左边推入B
	$redis->lPush("list1", "C");	// 从左边推入C

	$val = $redis->rPop("list1");	// 从右边弹出
	echo $val;		// 遵循先入先出的原则,未弹出前,list的数值 为 C,B,A 使用rPop则弹出 A
  • set操作
<?php
	$redis = new \Redis();
	$redis->connect('127.0.0.1');

	// set 操作
	$redis->sAdd('set1', "A");
	$redis->sAdd('set1', "B");
	$redis->sAdd('set1', "C");
	$redis->sAdd('set1', "C");	// 由于set中元素必须唯一,所以实际上只插入了3个元素

	$val = $redis->sCard("set1");
	var_dump($val);	// 3

	$val = $redis->sMembers("set1");
	var_dump($val);
	/**
	 * array(3) {
	 * 	   [0] => string(1)	"A"
	 * 	   [1] => string(1)	"B"
	 * 	   [2] => string(1)	"C"
	 * }
	 */
  • hash操作
<?php
	$redis = new \Redis();
	$redis->connect('127.0.0.1');

	// hash 操作
	// 设置driver1的name
	$redis->hSet('driver1', 'name', 'jack');
	// 设置driver1的age
	$redis->hSet('driver1', 'age', 25);
	// 设置driver1的sex
	$redis->hSet('driver1', 'sex', 1);
	// hGet - 获取driver1的name值
	$val = $redis->hGet('driver1', 'name');
	var_dump($val);
	// hMGet - 获取driver1的多个key的值
	$val = $redis->hMGet('driver1', array('name','age'));
	var_dump($val);
  • sort set操作
<?php
	$redis = new \Redis();
	$redis->connect('127.0.0.1');

	// sort set操作
	// 往key值为zset1添加数据
	$redis->zAdd('zset1', 90, 'userA');	// rank:2
	$redis->zAdd('zset1', 99, 'userB');	// rank:1
	$redis->zAdd('zset1', 70, 'userC');	// rank:4
	$redis->zAdd('zset1', 80, 'userD');	// rank:3

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

	$val = $redis->zRevRange('zset1', 0, -1);	// 从高到低
	var_dump($val);
posted @ 2017-09-01 21:44  TricSuMer  阅读(235)  评论(0编辑  收藏  举报