初识 Redis

基础知识网上很多,就不写的太啰嗦,这里纪录一下我的首次使用。

一、redis 安装

在服务器上安装 redis

我的服务器环境是宝塔,方便安装

php 扩展打开 redis

二、项目中的实际应用

首先说明,项目环境是 php

redis 的一些基本操作命令

    //数据操作:
    // set($key, $value): 设置指定键的值。
    // get($key): 获取指定键的值。
    // del($key1, $key2, ...): 删除一个或多个键。
    // incr($key): 增加键对应的值。
    // decr($key): 减少键对应的值。
    // exists($key): 检查键是否存在。
    // 其他诸如append、strlen、mset、mget等等。
    // 列表操作:
    // lpush($key, $value1, $value2, ...): 在列表左侧插入一个或多个值。
    // rpush($key, $value1, $value2, ...): 在列表右侧插入一个或多个值。
    // lpop($key): 弹出列表左侧的值。
    // rpop($key): 弹出列表右侧的值。
    // llen($key): 获取列表长度。
    // 其他诸如lindex、lrange、ltrim等等。
    // hset / hget(设置 / 获取)

    // hexists(检查是否存在)
    
    // hdel(删除)
    
    // hkeys(获取所有 field)
    
    // hvals (获取所有的 value)
    
    // hgetall(获取所有键值对)
    
    // hmget(查询指定个 value)
    
    // hsetnx(设置值时设置参数)
    
    // hash 自增自减处理

redis 初始化

// 初始化 redis 类
$redis = new Redis();
// 打开 redis 连接
$redis->connect('127.0.0.1', 6379);
//TODO:操作

// 关闭 redis 连接
$redis->close();

set/get操作

$redis->set('mobile','1331889999'); 
$redis->get('mobile');

Hash 键值对集合操作

项目中需要存储对象,一开始我的考虑是:

mobile作为 key,userinfo 作为 value 存储,对应 get、set的方法就是set(mobile,userinfo),userinfo 需要转为字符串,如php 的 json encode 方法 ,取用户数据的时候得先 jsondecode。

这个方法的弊端是:存取麻烦。

比如说:修改用户的信息,要么整个键值对删除,重新插入,要么把用户信息拿出来解构,修改后再编码再更新。

那有没有更优的方案呢?这时候我注意到了哈希 Hash 键值对集合操作;

1、循环遍历写入

$_POST的数据格式大概长这样:

foreach ($_POST as $val){
                    $mobile = $val['mobile'];
                    $info = json_encode($val);
                    // $redis->set($mobile,$info);
                    // $redis->hset($mobile,'info',$info);
                    // 以 hash 键值对的方式存储
                    foreach($val as $k=>$v){
                        $redis->hset($val['mobile'],$k,$v);
                    }
                }

2、信息读取

$redis->hget('13712341234','mobile');

这样就可以通过手机号+字段获取信息

3、信息更新

$redis->hset('13712341234','mobile','13312341234');

这样就把手机号是"13712341234"的用户手机号修改为"13312341234",这样更新操作是不是就便捷的多?(当然手机业务逻辑涉及到手机号变更的,不应该这么改)

因此哈希表比较合适。

还有很多操作,还没用到,后续更新......

// hexists(检查是否存在)

// hdel(删除)

// hkeys(获取所有 field)

// hvals (获取所有的 value)

// hgetall(获取所有键值对)

// hmget(查询指定个 value)

// hsetnx(设置值时设置参数)

// hash 自增自减处理

三、应用案例

3.1 GET请求:返回最后一个用户 id

从列表"userid"左边获取第一个数值(如下表示例)

|-----------------|---|---|---|---|---|---|---|---|
| userid 列表 |||||||||
| | | | | | | | | |
| 如此类推 最大的 id 在左侧 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |

3.2 POST 请求:接收总库传来的消息

需要做两个动作:

1、用户数据以哈希键值对的方式存储;

2、用户 id 单独存列表"userid",并且从左边插入数据(返回的 id 必须按照顺序 asc排序,即最后一个 id 是最大的 id);

php 复制代码
// 备注:下面用到方法,判断请求类型是封装过的函数,非原生 php 写法
public function redis(){
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
       
        // GET请求:返回用户maxid
        if(is_get()){
            // 列表origin_uid左边第一个数值
            $user = $redis->lindex('userid',0);
            print_r($user);
        }
        
        // POST请求:接收数据,用户id必须是顺序排序,依次从左侧插入列表
        if(is_post()){
            print_r($_POST);
            // return json($_POST);
            if($_POST){
                $count = 0;
                foreach ($_POST as $val){
                    $mobile = $val['mobile'];
                    $info = json_encode($val);
                    // $redis->set($mobile,$info);
                    // $redis->hset($mobile,'info',$info);
                    // 以 hash 键值对的方式存储
                    foreach($val as $k=>$v){
                        $redis->hset($val['mobile'],$k,$v);
                    }
                    // 把用户原始 id 写入到集合里面,方便查询最后同步到那个客户。
                    $redis->lpush('userid',$val['id']);  // 以列表lpush方式存储(加在列表左边)
                    $count ++;
                }
                if($count>0){
                    return json('redis存下了'.$count.'条数据');
                }else{
                    return json();
                }
            }
            
        }
       // 关闭连接
        $redis->close();
    }
相关推荐
夜光小兔纸29 分钟前
oracle查询出表中某几个字段值不唯一的数据
数据库·sql·oracle
deadknight93 小时前
Oracle密码过期处理方式
数据库·oracle
Ljubim.te3 小时前
数据库第01讲章节测验(选项顺序可能不同)
数据库
吱吱喔喔3 小时前
数据分表和分库原理
数据库·分表·分库
快乐非自愿3 小时前
KES数据库实践指南:探索KES数据库的事务隔离级别
数据库·oracle
一只fish3 小时前
Oracle的RECYCLEBIN回收站:轻松恢复误删对象
数据库·oracle
weixin_440401693 小时前
分布式锁——基于Redis分布式锁
java·数据库·spring boot·redis·分布式
TOR-NADO3 小时前
数据库概念题总结
数据库·oracle
云计算练习生3 小时前
理解MySQL核心技术:存储过程与函数的强大功能
数据库·mysql·存储过程·函数·mysql函数
zengson_g3 小时前
当需要对大量数据进行排序操作时,怎样优化内存使用和性能?
java·数据库·算法·排序算法