Redis 入门 - 1(基本 key 操作)

Redis 入门 - 1(基本 key 操作)

对 Redis 的基础应用进行总结,并逐步使用 Laravel + Bootstrap + Redis 构建一个【个人任务管理系统】

大纲

前提

  1. Redis 入门 - 0(安装、远程访问) | Laravel China 社区 - 高品质的 Laravel 开发者社区
  2. Redis 入门 - 0(图形化管理工具) | Laravel China 社区 - 高品质的 Laravel 开发者社区

大纲

  1. 基本 key-value 操作
  2. 字符串 String 类型 和 自增长 Integer 类型
  3. 散列 hash 类型
  4. 列表 list 类型
  5. 集合 set 类型
  6. 有序集合 sort set 类型

阶段

时间计划上为 4 个阶段:

  • Step 1:完成 1、2 两个知识点的掌握,并构建一个最基本的 【个人任务管理系统】
  • Step 2:继续学习 3、4 两个知识点,完善【个人任务管理系统】
  • Step 3:继续学习 5、6 两个知识点,完成【个人任务管理系统】
  • Step 4:明确目标,完整构建【个人任务管理系统】

约定

约定 Redis 命令使用大写来表示(但 Redis 自身并不区分大小写)

Key

Redis 的基础

基础命令

获取 Key

// ?、*、[]、\x
KEYS [正则表达式]

// 获取所有键(不建议在生产上执行此命令)
KEYS *

// 获取所有以 post_xxxx 开头的 key
KEYS post_*

判断 Key 是否存在

// 存在返回整数类型 1,不存在则返回 0
EXISTS key_name

删除 Key

// 返回删除键的个数(整数类型)
DEL key_name

注意,DEL 不支持通配符,因此如果需要批量删除需结合 Linux 管道命令实现。例如:

redis-cli DEL `redis-cli KEYS "post_*"`

String

Redis 中最基本的数据类型,最大存储容量为 512 MB

基础命令

赋值与取值

// 存储 key_name = "value"
SET key_name value

// 获取 key_name 的 "value"
// 注意:key_name 不存在时,返回空
GET key_name

// 同时赋值多个 key 或 获取 多个 key 的 value
MSET key_name value [key_name2 value2 ...]
MGET key_name [key_name2 ...]

末尾追加值

// 返回追加后字符串的总长度(Integer)
APPEND key_name value

如果 key_name 不存在,则创建一个 key_name-value,相当于执行 SET key_name value

获取字符串长度

// 返回字符串的长度(Integer)
STRLEN key_name

Integer

可实现关系型数据库里的“自增”

基本命令

递增与指定递增值

// 让 key_name 递增,并返回递增后的值(注意是 Integer)
INCR key_name   

// INCR 是 INCRBY key_name 1 的特例
INCRBY key_name [每次递增值]

如果 key_name 不存在时,会创建 key_name 并赋值为 0,再执行 INCR 命令。因此,第一次递增后的结果是 1。

递减与指定递减值

// 递减
DECR key_name

DECRBY key_name [每次递减值]

如果 key_name 不存在时,会创建 key_name 并赋值为 0,再执行 DECR 命令。因此,第一次递增后的结果是 -1。

【引申】Redis 是原子操作,绝不会出现多个客户端同时执行 INCR 命令后,产生相同的递增或递减结果。

递增指定浮点数

// 每次递增一个双精度浮点数
INCRBYFLOAT key_name [每次递增浮点数]

位操作

位操作,我觉得可对理解 Redis 的底层操作有帮助,实际应用上最好别用。

但有一个地方要明确,Redis 同其他语言的设计一样,当存储过大偏移量的数据时,要简化!例如:ID 以 6237000000000001 开始的编码,直接存储会造成内存的巨大浪费,应该写个转换函数,减去 6237000000000000 后,存 1。

总结

file

实践 - 版本 v1.0

设计一个【个人任务管理系统】项目,能够将自己的日常事项进行管理:

  1. 一个界面,上半部分 Input,下半部分 List
  2. 使用 Laravel + Bootstrap + Redis 来实现
  3. Redis 中有一个统筹的自增 ID:task:count,由它生成全局的 task id
  4. 实现 task 的保存即可,因此存储结构为:task:$id:title 和 task:$id:content($id 就是获取到的 task:count)
  5. 功能上,仅实现 task 的添加即可

示例

GitHub - chinkiver/simple-task: A simple task system

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
sushengbuhuo

总结很赞

5年前 评论

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