初识 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 在左侧
87654321

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

需要做两个动作:

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

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

// 备注:下面用到方法,判断请求类型是封装过的函数,非原生 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();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/758248.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript学习笔记(全)

文章目录 TypeScript入门2.编译并运行TS代码2.1.简化运行ts步骤 3.TS中的常用类型3.1.TS中的类型注解3.2.TS中的原始类型3.3.TS中的数组类型3.4.TS中的联合类型3.5.类型别名3.6.函数类型3.6.1.单独执行参数、返回值类型3.6.2.同时指定参数,返回值类型3.6.3.函数的vo…

昇思25天学习打卡营第4天|扩散模型

文章目录 昇思MindSpore应用实践基于MindSpore的Diffusion扩散模型1、Diffusion Models 简介2、构建 Diffusion Model 的准备工作3、Attention 机制4、条件 U-Net5、Diffusion 正向过程6、Diffusion 反向过程7、Diffusion 模型训练 Reference 昇思MindSpore应用实践 本系列文章…

掌握Python编程的深层技能

一、Python基础语法、变量、列表、字典等运用 1.运行python程序的两种方式 1.交互式即时得到程序的运行结果 2.脚本方式把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容2.python程序运行的三个步骤 python3.8 C:\a\b\c.py 1.先启动python3…

什么是产线工控安全,如何保障产线设备的安全

什么是产线工控安全? 工控,指的是工业自动化控制,主要利用电子电气、机械、软件组合实现。即是工业控制系统,或者是工厂自动化控制。产线工控安全指的是工业控制系统的数据、网络和系统安全。随着工业信息化的迅猛发展&#xff0…

【Lua】第一篇:在Linux系统中安装搭建lua5.4.1环境

文章目录 一. 远程下载安装包二. 解压安装包三. 编译安装Lua环境 一. 远程下载安装包 输入以下命令即可在当前目录下,远程下载安装包lua-5.4.1.tar.gz: wget http://www.lua.org/ftp/lua-5.4.1.tar.gzPS:其他版本的安装包如下,可…

鸿蒙项目实战-月木学途:1.编写首页,包括搜索栏、轮播图、宫格

效果展示 搜索栏制作 相关知识回顾 输入框组件TextInput 单行输入框类型.type(InputType.Normal)//基本输入框.type(InputType.Password)//密码.type(InputType.Email)//邮箱.type(InputType.Number)//数字.type(InputType.PhoneNumber)//电话号.type(InputType.Normal).type…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止,我已经花了非常多的时间去学习和了解x86架构和RISC-V架构,对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过,学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

Python | Leetcode Python题解之第199题二叉树的右视图

题目: 题解: class Solution:def rightSideView(self, root: TreeNode) -> List[int]:rightmost_value_at_depth dict() # 深度为索引,存放节点的值max_depth -1stack [(root, 0)]while stack:node, depth stack.pop()if node is not…

15 个适用于企业的生成式 AI 用例

作者:来自 Elastic Jennifer Klinger 关于生成式人工智能及其能做什么(和不能做什么)有很多讨论。生成式人工智能(例如大型语言模型 - LLMs)利用从大量训练数据中学习到的模式和结构来创建原创内容,而无需存…

weiyang**2.部署

一、官方文档 一键部署可以在 同机 快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。 一键部署会搭建:节点(FISCO-BCOS 2.0)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-…

3D生物打印的未来:多材料技术的突破

多材料生物打印技术是近年来发展迅速的一项技术,为组织工程和再生医学带来了新的机遇,可以帮助我们更好地理解人体组织的结构和功能,并开发新的治疗方法。 1. 组织构建 复杂性模拟:多材料生物打印技术能够构建具有层次结构和异质…

2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第二部分】

上一篇文章:2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第一部分】_尘封的CPU的博客-CSDN博客最近回顾了Java B组的试题,深有感触:脑子长时间不用会锈住,很可怕。兄弟们,都给我从被窝里爬起来,赶…

综合项目实战--jenkins节点模式

一、DevOps流程 DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让开发、测试、运维效率协同工作的方法。 DevOps流程(自动化测试部分) DevOps完整流程 二、gitee+j…

Burpsuite靶场中信息泄露相关的实验通关

目录 第一关:错误消息中的信息披露 第二关:调试页面信息披露 第三关:通过备份文件披露源代码 第四关:通过信息披露绕过身份验证 第五关:版本控制历史中的信息披露 最近看大佬的文章,发现了很对自己没有…

IOS Swift 从入门到精通:ios 连接数据库 安装 Firebase 和 Firestore

创建 Firebase 项目 导航到Firebase 控制台并创建一个新项目。为项目指定任意名称。 在这里插入图片描述 下一步,启用 Google Analytics,因为我们稍后会用到它来发送推送通知。 在这里插入图片描述 在下一个屏幕上,选择您的 Google Analytics 帐户(如果已创建)。如果没…

FFT的IP核使用报错的检查流程

一、config部分 拉出clk resetn, s_axis_config_tdata, s_axis_config_tready, s_axis_config_tvalid .这四个信号。 时序行为解释:

【python - 数据】

一、序列 序列(sequence)是一组有顺序的值的集合,是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例,而是一个包含不同类型数据间共享行为的集合。也就是说,序列有很多种类&…

第0章_项目方案介绍

文章目录 第0章 项目方案介绍0.1 功能介绍0.2 硬件方案0.3 软件方案0.3.1 上位机方案0.3.2 **中控方案**0.3.3 **传感器方案**0.3.4 **技术难点** 第0章 项目方案介绍 0.1 功能介绍 本课程来自一个真实项目:多个气体传感器的管理。由于气体传感器比较昂贵&#xf…

mysql5.7安装使用

mysql5.7安装包:百度网盘 提取码: 0000 一、 安装步骤 双击安装文件 选择我接受许可条款–Next 选择自定义安装,下一步 选择电脑对应的系统版本后(我的系统是64位),点击中间的右箭头,选择Next 选择安装路径–Next 执行…

第1章:计算机系统知识

第1章:计算机系统知识 校验码 海明码 1、数据怎么分组,为什么这样分组? 分组1:1、3、5、7 分组2:2、3、6、7 分组3:4、5、6、7 目的就是为了纠错,从下面图便可以知道 2、为什么检验位在2∧…