Redis-01-基础命令
一、基本概念
Redis:Remote Dictionary server 远程词典(键值对形式)服务器。是一种 NoSQL 数据库。
和 SQL 比较
Redis 特点
数据类型
Redis 的 Key 都是字符串类型,Value 则支持五种基本类型和其他类型。
基本类型:string(字符串),hash(哈希),list(列表),set(集合)、sorted set(有序集合)
一个 Key 的 Value 只能有一个数据类型。
Redis 安装
1. 安装 GCC 依赖
Redis 使用 C 语言编写,所以需要安装其代码所依赖的 GCC 编译器。
1 | yum install -y gcc tcl |
2. 下载 Redis 解压
我们将目录定位到 usr/local/src
中,并下载解压
1 | wget https://download.redis.io/releases/redis-6.2.7.tar.gz |
3. 编译 Redis
1 | cd redis-6.2.7 |
编译完成之后,会在 /usr/local/bin
中出现编译结果,这个目录 /usr/local/bin
已经被添加到了默认的环境变量中,任意地方都可以运行里面的结果。
redis-cli Redis 命令执行客户端启动脚本
redis-server Redis 服务端启动脚本
redis-sentinel Redis 哨兵启动脚本
二、Redis 控制
1. 启动
前台启动
在任意地方输入 redis-server 即可前台启动 Redis,此时无法退出,只能看着监控面板
1 | redis-server |
后台启动
如果要让 Redis以 后台
方式启动,则必须修改 Redis 配置文件,就在我们之前解压的 Redis 安装包下( /usr/local/src/redis-6.2.6
),名字叫 Redis.conf:
我们先将这个配置文件备份一份:
1 | cp redis.conf redis.conf.bck |
然后修改 redis.conf 文件中的一些配置:
1 | # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0 |
Redis 的其它常见配置:
1 | # 监听的端口 |
启动 Redis:
1 | # 进入redis安装目录,作为启动 redis 的工作目录 |
停止服务:
1 | # 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务, |
后台开机自启
我们也可以通过配置来实现开机自启。
首先,新建一个系统服务文件:
1 | vi /etc/systemd/system/redis.service |
内容如下:
1 | [Unit] |
然后重载系统服务:
1 | systemctl daemon-reload |
现在,我们可以用下面这组命令来操作redis了:
1 | # 启动 |
执行下面的命令,可以让 redis 开机自启:
1 | systemctl enable redis |
2. 链接 Redis
命令行客户端
Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
1 | redis-cli [options] |
其中常见的options有:
-h 127.0.0.1
:指定要连接的redis节点的IP地址,默认是127.0.0.1-p 6379
:指定要连接的redis节点的端口,默认是6379-a xxxxxx
:指定redis的访问密码
推荐先进行 redis 链接,不输入密码。链接成功之后
1 | auth [username] password |
来验证账号密码(没有用户名可以不填)
图形化客户端
在这里下载:https://github.com/lework/RedisDesktopManager-Windows/releases
然后链接就可以使用了
三、Redis 命令
推荐在官方的文档里面去学习 Redis 的命令:https://redis.io/commands/
也可以在 Redis 命令行中使用 help [command]
来查看命令用法.
1. 通用命令
Expire /ɪkˈspaɪər/ 到期死亡,设置的 key 有效期是以秒计算。
TTL TimeToLive 生存时间,返回 key 有效期,-1 为永久有效,-2 表示不存在。
Key 的分类
为了规范 Key 的命名,一般采用 项目名:业务名:类型:id
的形式命名 Key,然后将数据对象序列化为 Json 字符串作为存储值。
KEY | VALUE |
---|---|
xorex:blog:user:233 | {“id”:233, “name”: “Xorex”, “age”: 21} |
xorex:video:dance:123 | {“id”:123, “name”: “newLand”, “time”: 4539} |
用这样的形式分类,会被 RDM 自动分层处理。
2. String
类型信息
虽说三种调用的时候都是字符串,但是存储的时候格式不同,int 和 float 会使用对应的编码来增大存储范围。
操作命令
- SET:添加或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对(Multiple)
- MGET:根据多个key获取多个String类型的value(Multiple)
- INCR:让一个整型的key自增1(Increase)
- INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2(可以通过它实现负增长)
- INCRBYFLOAT:让一个浮点类型的数字自增并指定步长(浮点数没有默认自增长度)
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行 (SET if Not eXists)
- SETEX:添加一个String类型的键值对,并且指定有效期 (Set+Expire)
3. Hash 类型
类型信息
对 Json 类的 String 进行的改进,Json 部分使用 Hash 存储,可以单独定位修改里面的某个元素。
操作命令
都是在一个 Key 下面,对不同的 field 进行 value 的修改。
Hash的常见命令有:
- HSET key field value:添加或者修改hash类型key的field的值
- HGET key field:获取一个hash类型key的field的值
- HMSET:批量添加多个hash类型key的field的值
- HMGET:批量获取多个hash类型key的field的值
- HGETALL:获取一个hash类型的key中的所有的field和value
- HKEYS:获取一个hash类型的key中的所有的field
- HVALS:获取一个hash类型的key中的所有的value
- HINCRBY:让一个hash类型key的字段值自增并指定步长
- HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
4. List 类型
类型信息
List 是有序的双向链表结构,插入删除快,查询速度慢。只能从左边或者右边插入,不支持插入中间。所以说是有序的,能保留插入顺序的数据结构。
操作命令
前缀 L 和 R 用来区分链表的 左边 和 右边,也就是 头 和 尾 。
List 的操作都是针对一个 Key,一个 Key 里面存着一个 List。
List的常见命令有:
- LPush key element … :向列表左侧插入一个或多个元素
- LPop key:移除并返回列表左侧的第一个元素,没有则返回nil
- RPush key element … :向列表右侧插入一个或多个元素
- RPop key:移除并返回列表右侧的第一个元素
- LRange key star end:返回一段角标范围内的所有元素
- BLPop 和 BRPop:与 LPOP 和RPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil(在等待过程中只是该操作进入阻塞状态,仍可以完成其他操作命令)
5. Set 类型
Redis 的 Set 结构与 Java 中的 HashSet 类似,满足以下特性:无序,元素不可重复,查找快,支持交集、并集、差集等功能。
常见命令:
- SAdd key member … :向set中添加一个或多个元素
- SRem key member … : 移除set中的指定元素
- SCard key: 返回set中元素的个数
- SIsNumber key member:判断一个元素是否存在于set中 isMember
- SMembers:获取set中的所有元素 members
- SInter key1 key2 … :求 key1 与 key2 的交集 inter
- SDiff key1 key2 … :求key1与key2的差集
- SUnion key1 key2 ..:求key1和key2的并集
6. SortedSet(ZSet) 类型
一个经过排序的 Set 集合(SortedSet 又名 ZSet),底层是通过跳表实现排序,Hash 实现唯一性。而排序是根据 score 属性的值进行排序的。
因为引入了排序功能,所以操作也多了关于位置和范围的操作:
- ZAdd key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
- ZRem key member:删除sorted set中的一个指定元素
- ZScore key member : 获取sorted set中的指定元素的score值
- ZRank key member:获取sorted set 中的指定元素的排名
- ZCard key:获取sorted set中的元素个数
- ZCount key min max:统计score值在给定范围内的所有元素的个数
- ZIncrBy key increment member:让sorted set中的指定元素自增,步长为指定的increment值
- ZRange key min max:按照score排序后,获取指定排名范围内的元素
- ZRangeByScore key min max:按照score排序后,获取指定score范围内的元素
- ZDiff、ZInter、ZUnion:求差集、交集、并集