前言
Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
下载与安装
使用前,肯定先要安装吧。这里以 Windows
环境安装 Redis 为例:点击Github - redis下载。
安装后,配置环境变量,设置 Redis 的服务端口,默认为 6379。Redis 默认是没有登录密码的,如有需要可以修改配置文件打开访问控制。
服务端
打开一个 cmd 窗口,使用 cd 命令切换目录到 Redis 的安装目录下 ,再运行:redis-server.exe
。如果还没把 Redis 的路径加到系统的环境变量里,参数 redis.windows.conf
就不能省略,运行命令为:redis-server.exe redis.windows.conf
。
在 Windows 环境上,关闭命令窗口就是关闭 Redis 服务端。
如果显示“oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo”,说明已经启动 Redis 了,不要重复启动。
客户端
这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。再切换到 Redis 的安装目录下,运行:redis-cli.exe -h 127.0.0.1 -p 6379
,显示对应的命令操作行(进入交互模式),就说明成功连接上了。
为了操作界面的美观与功能,我使用的是另一款客户端:Redis Assistant。
连接进入仪表盘之后,显示了状态监控、内存分析、数据管理、多样化搜索等功能。
数据类型
Redis 所有的 key(键)都是字符串,所以我们在谈基础数据类型时,讨论的是存储 value(值)的数据类型,主要包括常见的 5 种数据类型,分别是:String、List、Set、Zset、Hash。
字符串 String
字符串 String 表示的是一个可变的字节数组,并不是 Java 的不可变的 String,更类似于 Java 的 ArrayList。存储的值可以是任何种类的字符串(包括二进制数据、整数或浮点数),通常用 SET key value
和 GET key
来设置和获取字符串值。需要注意的是字符串的最大长度为 512 M
。
如果字符串的值是一个整数,那么还可以将字符串当成计数器来使用。INCR
命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,类似的命令还有 INCRBY
、DECR
和 DECRBY
。
使用 EXISTS
命令返回 1 或 0 标识给定 key 的值是否存在,使用 DEL
命令可以删除 key 对应的值,DEL
命令返回 1 或 0 标识值是被删除(值存在)或者没被删除(key 对应的值不存在)。
操作命令参考菜鸟教程 - Redis 字符串。
列表 List
列表 List 是按插入顺序排序的字符串元素的集合,基本上就是链表(Linked List),而且是双向链表。因为它是链表,所以不能像数组一样随机访问;在头部(左边)或尾部(右边)添加 / 删除一个元素的操作,其时间复杂度只有 O(1)
。
类似于 Java 集合类的 List.get(index) 方法,Redis 的 List 也可以通过索引获取列表中的元素,索引可以使用自然数 0, 1, 2, ... n-1
表示,还可以使用负数 -1, -2, ... -n
来表示:以 -1 表示列表的最后一个元素,-2 表示列表的倒数第二个元素,以此类推,-n
就表示第一个元素,对应的索引为 0。
链表可以从表头和表尾追加和移除元素,结合使用 lpush / lpop / rpush / rpop 这四条指令,可以将链表作为队列或堆栈使用。
操作命令参考菜鸟教程 - Redis 列表
哈希 Hash
Redis 的 Hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,类似于 Java 的 HashMap,特别适合用于存储对象。
Hash 便于表示 objects,实际上,你可以放入一个 hash 的域数量实际上没有限制(除了可用内存以外)。HMSET
指令同时将多个 field-value (域-值)对设置到哈希表,而 HGET
取回单个域。HMGET
和 HGET
类似,但返回一系列值。
操作命令参考菜鸟教程 - Redis 哈希
集合 Set
Redis 的 Set 是 String 类型的无序集合,类似于 Java 的 Set 集合,不按特定的方式排序,只是简单地把对象加入集合,集合中不能包含重复的对象。它是通过哈希表实现的,所以添加、删除、查找操作的复杂度都是 O(1)。SADD
指令把一个或多个新元素添加到 set 中,与此相反的是 SREM
指令,它用于删除一到多个元素;SMEMBERS
指令返回集合中的所有的成员;SPOP
指令删除并返回集合中的一个随机元素; SUNIONSTORE
指令用于对多个集合取并集,并把结果存入另一 set 中。
操作命令参考菜鸟教程 - Redis 集合
有序集合 Sorted Set
Sorted Set,通常我们称之为 zset
,因为其操作指令以字母 z
开头。
它是一个特别的数据类型,一方面它类似于 Java 的数据结构 Map<String, Double>,可以给每一个元素 value 赋予一个权重 score,另一方面它又类似于 TreeSet,内部的元素会按照权重 score 进行排序,可以得到每个元素的名次,还可以通过 score 的范围来获取元素的列表。zset 的成员是唯一的,但权重 score 却可以重复。
操作命令参考菜鸟教程 - Redis 有序集合
参考
菜鸟教程 - Redis教程
Redis中文网