Redis 入门 - 1(基本 key 操作)
Redis 入门 - 1(基本 key 操作)
对 Redis 的基础应用进行总结,并逐步使用 Laravel + Bootstrap + Redis 构建一个【个人任务管理系统】
大纲
前提
- Redis 入门 - 0(安装、远程访问) | Laravel China 社区 - 高品质的 Laravel 开发者社区
- Redis 入门 - 0(图形化管理工具) | Laravel China 社区 - 高品质的 Laravel 开发者社区
大纲
- 基本 key-value 操作
- 字符串 String 类型 和 自增长 Integer 类型
- 散列 hash 类型
- 列表 list 类型
- 集合 set 类型
- 有序集合 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。
总结
实践 - 版本 v1.0
设计一个【个人任务管理系统】项目,能够将自己的日常事项进行管理:
- 一个界面,上半部分 Input,下半部分 List
- 使用 Laravel + Bootstrap + Redis 来实现
- Redis 中有一个统筹的自增 ID:task:count,由它生成全局的 task id
- 实现 task 的保存即可,因此存储结构为:task:$id:title 和 task:$id:content($id 就是获取到的 task:count)
- 功能上,仅实现 task 的添加即可
示例
GitHub - chinkiver/simple-task: A simple task system
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: