Redis简单上手

[TOC]

REDIS 学习#

1. 安装#

宝塔自动安装 Redis 服务器端

2. 数据结构#

  • 基本类型
    String Hash List Set SortedSet
  • 特殊类型
    GEO BitMao HyperLog 等

help @string

3. 客户端#

  • 命令行
    • redis-cli 进入控制
    • 心跳测试 输入 PING 返回 PONG
  • 图形化
  • 客户端编程

4. 项目中如何使用#

在项目中我们不可能简单的以键值对的方式存储数据
比如我们在项目中有用户表 商品表等
存储的数据也是一个个对象

这是我们键的命名可以是 项目名:业务名:类型:id
比如 美团:用户模块:用户:1
或者
美团:用户:1
美团:商品:1
值的话采用 json 字符串存入

set meituan:usermodule:user:1 '{"id":1,"age":3}'

通过这种方式存储的数据 ,要查询值的时候会比较麻烦,无法根据值的信息去查询或者排序等
所以一般都会使用 HASH 类型对值进行存储

cli 增删改查#

5.String 类型#

keys * 得到键 数据量多 不建议使用
set foo bar 添加
set key1 1 添加
get foo 得到值
del foo key1 key2 删除 可批量
exists key1 是否存在
expire key1 20 设置过期时间
ttl  查看过期时间
MSET KEY1 1 KEY2 2 批量添加
MGET KEY1 KEY2 批量查询
INCR KEY1 整形自增1
INCRBY KEY1 2 整形自增 指定步长
INCRBY KEY1 -2 整形自增 指定步长 为负数时为自减
DECRBY KEY1 1 整形自减 指定步长
DECRBY KEY1 2 整形自减 指定步长
DECRBY KEY1 -2 整形自减 指定步长 为负数时为自增
INCRBYFLOAT KEY1 1 浮点数自增 必须指定步长 
INCRBYFLOAT KEY1 1.1 浮点数自增 必须指定步长
SETNX 新增 值必须不存在 否则不执行

6.HASH 类型#

HSET meituan:usermodule:user:1 name zhangsan age 24   可以添加一个也可以添加多个
HMSET meituan:usermodule:user:2 name zhangsan age 24   可以添加一个也可以添加多个
HGET meituan:usermodule:user:2 name 只能查询一个值
HMGET meituan:usermodule:user:2 name age  查询多个值
HGETALL meituan:usermodule:user:2 查询全部键值
HKEYS meituan:usermodule:user:2 查询全部键 
HVALS meituan:usermodule:user:2 查询全部值
HINCRBY meituan:usermodule:user:2 age 1 自增  必须指定步长
HINCRBYFLOAT meituan:usermodule:user:2 age 1.1 自增  必须指定步长 可以是浮点数
HSETNX meituan:usermodule:user:1 name zhangsan 不存在才执行 只能单个字段

7.LIST 类型#

LPUSH USER 1 左侧插入
RPUSH USER 2右侧插入
LPOP USER  1左侧取出1个元素
RPOP USER  2右侧取出2个元素
LARNGE USER 1 10 返回范围角标的所有元素
BLPOP USER 10  //等待10s 左侧一个一个取
BRPOP 

8.SET 类型#

SADD USER 1 添加一个元素 
SREM USER 1 删除一个元素
SCARD USER 返回元素个数
SISMEMBER USER 1 元素是否存在
SMEMBERS USER 获取所有元素
SINTER USER USER2 求交集
SDIFF USER USER2 求差集
多用于社交 共同好友 好友列表等

9.SORTEDSET#

ZADD USER 85 zhangsan 94 lisi 添加元素1个或多个 
ZREM USER zhangsan 删除一个元素
ZCARD USER 返回元素个数
ZSCORE USER zhangsan 获取指定元素的分数
ZRANK USER zhangsan 获取指定元素的排名
ZCOUNT USER 80 90 获取分数范围元素的个数
ZINCRBY USER 2 zhangsan 自增某个元素 指定步长
ZRANG USER 0 5 查询最小的五个
ZREVRANG USER 0 5 查询最大的五个
ZRANGBYSCORE USER 0 80 查询八十分以内的元素
默认是升序 如要降序,在Z后面加 REV

10.REDIS 客户端编程#

创建 laravel 项目

composer create-project laravel/laravel example-app

安装 predis 扩展

composer require predis/predis

使用

    $client = new Predis\Client();
    $client->set('foo', 'bar');
    $value = $client->get('foo');

简单测试
使用函数跟使用命令行区别不大,更多命令可以参考文档
www.cnblogs.com/yhdsir/p/5529207.h...

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class IndexController extends Controller
{
    //
    public function index()
    {
        $client = new \Predis\Client();

        $testuid = 1;
        $key = 'testredis:user:string:'.$testuid;

        $client->set('foo', 'bar');
        $value = $client->get('foo');
        $this->dump( $value );

        $client->del('foo');
        $value = $client->get('foo');
        $this->dump( $value );

        $client->set('foo', 'bar2');
        $value = $client->get('foo');
        $this->dump( $value );

        $client->setnx('foo', 'bar3');
        $value = $client->get('foo');
        $this->dump( $value );

        $data = [
            'name'=> 'zhangsan',
            'age' => 23,
            'sex' => 'man',
        ];
        $data = json_encode($data);



        $client->set($key, $data);
        $value = $client->get($key);
        $this->dump( $value );

        $client->mset([
            'a' => 1,
            'b'=>2,
            ]);

        $res = $client->exists($key);
        dump($res);
       $client->expire($key,20);
        $res = $client->ttl($key);
        dump($res);

        $key1 = 'a';
        $client->INCRBYFLOAT($key1 ,1);
        $value = $client->get($key1);
        $this->dump( $value );
        $client->INCRBYFLOAT($key1 ,2);
        $value = $client->get($key1);
        $this->dump( $value );

        //=====================================
        //以hash形式存储
        $key1 = 'testredis:user:hash:1' ;
        $key2 = 'testredis:user:hash:2' ;
        $client->hsetnx($key1,'name','zhangsan1');
        $client->hmset($key1,[
            'id' => 1,
            // 'name'=>'zhangsan',
            'age'=>23,
            'sex'=>'man'
            ]);
        // $client->HMSET([
        //         $key1 => 'name zhangsan age 23 sex man',
        //         $key2 => 'name lisi age 33 sex woman',
        //     ]);
        $value = $client->hget($key1,'name');
        $this->dump( $value );  
        $value = $client->hmget($key1,['id','name','age','sex']);

        $this->dump( $value );  

        $value = $client->HGETALL($key1);
        $this->dump( $value );  

        //===============================================
        //List类型
        $key = 'queue';
        $client->lpush($key,1,2,3,4);
        $client->rpush($key,5,6,7,8);
        $value = $client->lpop($key,10);
        $this->dump( $value );  
    }

    public function dump( $value)
    {
        echo"==================================";
        echo '<br>';
        dump($value);
        echo"==================================";
        echo '<br>';
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。