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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!