zoukankan      html  css  js  c++  java
  • redis(以php代码为例)

    备注:redis及phpredis扩展安装请查看:PHP典型功能与Laravel5框架开发学习笔记

    redis具有原子性,所以在高并发情况下确保数据的一致性

    一、连接

    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    一、key-value

    1、选择数据库

    $redis->select(2);

    2、设置:set

    $redis->set('name', 'jimu');

    3、获取:get

    $redis->get('name');

    4、删除:del

    $redis->del('name');

    5、判断键是否存在:exists

    $redis->exists('name');

    6、如果键值不存在则设置,存在则不做任何操作:setnx(SET if Not eXists)

    $redis->setnx('age', 22);

    7、自增、自减:incr、decr、incrBy、decrBy

    $key = 'libdata:pv';
    $redis->incrBy($key, 3);
    $key = 'libdata:pv';
    $redis->decrBy($key, 1);

    8、键名一般按照模块从大到小来设计,以冒号分隔,如user:info:1,这样的好处是层级关系清晰,客户端显示如下

    二、hash,以下方法和key-value的方法一一对应

    1、hSet

    $redis->hSet('user:a', 'age', 20);

    2、hGet

    $redis->hGet('user:a', 'age');

    3、hDel

    $redis->hDel('user:a', 'age');

    4、hExists

    $redis->hExists('user:a', 'age');

    5、hSetNx

    $redis->hSetNx('user:a', 'age', 23);

    三、list

    1、lPush、rPush

    //    先队列头添加数据
    $redis->lPush('list', 0);
    //    先队列尾添加数据
    $redis->rPush('list', 2);

    2、lPop、rPop

    //    先队列头取出数据
    $redis->lPop('list');
    //    先队列尾取出数据
    $redis->rPop('list');

    3、lSet:给指定的索引赋值

    $redis->lSet('list', 0, 10);

    4、lLen:获取数组的长度

    $len = $redis->lLen('list');

    5、lRange:获取索引从1到索引3的值

    $res = $redis->lRange('list', 1, 3);
    var_dump($res);

    6、lTrim:删除选中范围外的数据,返回bool值

    $redis->lTrim('list', 1, 3);

    执行前数据:

    执行后:

    四、set:特点:无序、键值不重复

    1、sAdd:

    $redis->sAdd('fruit', 'apple');
    $redis->sAdd('fruit', 'banana');
    $redis->sAdd('fruit', 'watermelon');
    $redis->sAdd('fruit', 'watermelon');

    2、sMembers:返回集合的所有成员

    $res = $redis->sMembers('fruit');

    3、sCard:返回成员个数

    $num = $redis->sCard('fruit');

    4、sPop:随机取出一个成员

    $fruit = $redis->sPop('fruit');

    5、sDiff:求差集,及第一个集合中有而其他集合中没有的成员

    $fruit1 = $redis->sAdd('fruit:1', 'apple');
    $fruit1 = $redis->sAdd('fruit:1', 'banana');
    
    $redis->sAdd('fruit:2', 'banana');
    $redis->sAdd('fruit:2', 'watermelon');
    
    $diff = $redis->sDiff('fruit:1', 'fruit:2');
    var_dump($diff);

    五、发布订阅

    1、监听者代码:sub.php

    <?php
    //    监听者
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    echo "reading c1 c2...
    ";
    $redis->setOption(Redis::OPT_READ_TIMEOUT, -1);  //  设置不超时
    $redis->subscribe(['c1', 'c2'], function(Redis $instance, $channel, $message) {
        echo "recieve message from {$channel}: {$message}
    ";
    });

    2、发布者代码:pub.php

    <?php
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    
    $num = $redis->publish('c1', 'hi, c1');
    //    返回监听者的个数
    echo "client:{$num}
    ";
    
    $num = $redis->publish('c2', 'hi, c2');
    //    返回监听者的个数
    echo "client:{$num}
    ";

     3、执行及显示:

    3.1、先开启监听者:

    3.2、发布消息:

    3.3、监听者收到消息:

  • 相关阅读:
    第五章 并发性:互斥和同步
    第四章 线程、SMP和微内核
    Python Linked List
    关于名字查找
    测试当前C环境的栈帧增长方向以及传递参数时的压栈顺序
    关于栈——不针对特定实现的分析
    c语言15行实现简易cat命令
    C11 constant expressions 常量表达式
    一个fork短码的扩展版本
    为什么C++没有对应realloc的new操作符呢?
  • 原文地址:https://www.cnblogs.com/zhengchuzhou/p/9892584.html
Copyright © 2011-2022 走看看