文章目录
- 一.Redis安装
- 1.Windows 下安装
- 1>资源管理器目录进入
- 2>目录进入命令:
- 3.配置环境变量
- 2.Linux 下安装
- 1> 安装redis
- 2> 启动redis
- 3> 查看 redis 是否启动
- 二.Redis配置
- 1. 查看配置
- 2. 编辑配置
- 3. 参数说明
- 三.Redis数据类型
- 1. String(字符串)
- 常用命令
- 实例
- 2. Hash(哈希)
- 常用命令
- 实例
- 3. List(列表)
- 常用命令
- 实例
- 4. Set(集合)
- 常用命令
- 实例
- 5. zset(sorted set:有序集合)
- 常用命令
- 实例
- 6. HyperLogLog
- 7. Bitmaps
- 8. Geospatial Indexes
- 9. Streams
一.Redis安装
1.Windows 下安装
Github下载: https://github.com/tporadowski/redis/releases(推荐)
官网下载: https://redis.io/download(注意没有Windows版本的)
Windows下的.msi安装和.zip格式区别:
.msi是Windows installer开发出来的程序安装文件,它可以让你安装,修改,卸载你所安装的程序。说白了.msi就是Windows installer的数据包,把所有和安装文件相关的内容封装在一个包里。此外:它还包含有关安装过程自己的信息。例如:安装序列、目标文件夹路径、安装选项和控制安装过程的属性。
.zip是一个压缩包,解压之后即可,不需要安装
建议使用zip压缩包方式下载,如图:
一般解压缩到除C盘之外的盘即可,重命名为redis
在redis的安装目录下打开cmd窗口,运行:
1>资源管理器目录进入
2>目录进入命令:
cd 切换目录命令示例:
例:cd // 显示当前目录
例:cd … // 进入父目录
例:cd /d d: // 进入上次d盘所在的目录(或在直接输入:d:)
例:cd /d d:\ // 进入d盘根目录
例:cd d: // 显示上次d盘所在的目录
例:cd /d d:\src // 进入d:\src目录
redis-server.exe redis.windows.conf
默认端口为6379,出现图上的图标说明redis服务启动成功。命令里面的 redis.windows.conf 可以省略,省略后,使用redis-server.exe命令会使用默认的配置。出现这个即表示redis服务器启动成功了,切记不要关闭
以同样的方式在redis的安装目录下打开cmd,挨个运行:
使用redis-cli.exe命令来打开Redis客户端连接本地redis
redis-cli.exe -h 127.0.0.1 -p 6379
设置键值对:
set myKey abc
取出键值对:
get myKey
也可在客户端连接服务器之后使用ping命令查看是否连接成功,返回PONG则成功
3.配置环境变量
为了方便,建议把Redis路径配置到系统变量Path值中,这样就省得再输路径了。
我们把redis的安装路径复制到系统环境变量的path中即可,之后按ctrl+R进入cmd窗口即可直接运行redis命令
2.Linux 下安装
由于CentOs停止维护,我们以Ubuntu示例,本质流程都一个样
1> 安装redis
sudo apt update
sudo apt install redis-server
2> 启动redis
redis-server
3> 查看 redis 是否启动
redis-cli
如果终端打开以下内容,即表示安装成功:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。
我们输入 PING 命令,返回PONG即表示安装成功
redis 127.0.0.1:6379> ping
PONG
二.Redis配置
本机使用Redis服务器的话可以挂vscode上使用
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。
1. 查看配置
可以通过 CONFIG 命令查看或设置配置项。(记得打开redis服务器)
语法:
# 查询指定名为<CONFIG_SETTING_NAME>的配置项
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
# 查询配置文件中所有的配置项
CONFIG GET *
2. 编辑配置
你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
语法:
# 修改指定名为<CONFIG_SETTING_NAME>的值改为<NEW_CONFIG_VALUE>
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
3. 参数说明
redis.conf 配置项说明如下:
序号 | 配置项 | 说明 |
---|---|---|
1 | daemonize no | Redis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程(Windows 不支持守护线程的配置为 no ) |
2 | pidfile /var/run/redis.pid | 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定(windows不支持哦) |
3 | port 6379 | 指定 Redis 监听端口,默认端口为 6379 |
4 | bind 127.0.0.1 | 绑定的主机地址 |
5 | timeout 300 | 当客户端闲置多长秒后关闭连接,如果指定为 0 ,表示关闭该功能 |
6 | loglevel notice | 指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice |
7 | logfile stdout | 日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null |
8 | databases 16 | 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id |
9 | save | 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合 |
10 | rdbcompression yes | 指定存储至本地数据库时是否压缩数据,默认为 yes |
11 | dbfilename dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
12 | dir ./ | 指定本地数据库存放目录 |
13 | slaveof | 设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口 |
14 | masterauth | 当 master 服务设置了密码保护时,slave 服务连接 master 的密码 |
15 | requirepass foobared | 设置 Redis 连接密码 |
16 | maxclients 128 | 设置同一时间最大客户端连接数,默认无限制 |
17 | maxmemory | 指定 Redis 最大内存限制 |
18 | appendonly no | 指定是否在每次更新操作后进行日志记录 |
19 | appendfilename appendonly.aof | 指定更新日志文件名 |
20 | appendfsync everysec | 指定更新日志条件 |
21 | vm-enabled no | 指定是否启用虚拟内存机制 |
22 | vm-swap-file /tmp/redis.swap | 虚拟内存文件路径 |
23 | vm-max-memory 0 | 将所有大于 vm-max-memory 的数据存入虚拟内存 |
24 | vm-page-size 32 | Redis swap 文件 page 大小 |
25 | vm-pages 134217728 | 设置 swap 文件中的 page 数量 |
26 | vm-max-threads 4 | 设置访问swap文件的线程数 |
27 | glueoutputbuf yes | 设置在向客户端应答时,是否把较小的包合并为一个包发送 |
28 | hash-max-zipmap-entries 64, hash-max-zipmap-value 512 | 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法 |
29 | activerehashing yes | 指定是否激活重置哈希 |
30 | include /path/to/local.conf | 指定包含其它的配置文件 |
可视化工具我这里使用的DataGrip
三.Redis数据类型
Redis 主要支持以下几种数据类型:
类型 | 特性 |
---|---|
string(字符串) | 基本的数据存储单元,可以存储字符串、整数或者浮点数。 |
hash(哈希) | 一个键值对集合,可以存储多个字段。 |
list(列表) | 一个简单的列表,可以存储一系列的字符串元素。 |
set(集合) | 一个无序集合,可以存储不重复的字符串元素。 |
zset(sorted set:有序集合) | 类似于集合,但是每个元素都有一个分数(score)与之关联。 |
位图(Bitmaps) | 基于字符串类型,可以对每个位进行操作。 |
超日志(HyperLogLogs) | 用于基数统计,可以估算集合中的唯一元素数量。 |
地理空间(Geospatial) | 用于存储地理位置信息。 |
发布/订阅(Pub/Sub) | 一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。 |
流(Streams) | 用于消息队列和日志存储,支持消息的持久化和时间排序。 |
模块(Modules) | Redis 支持动态加载模块,可以扩展 Redis 的功能。 |
注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库
然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内存只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。
1. String(字符串)
string 是 redis 最基本的数据类型,一个 key 对应一个 value,最大能存储 512MB。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。
常用命令
命令 | 作用 |
---|---|
SET key value | 设置键的值 |
GET key | 获取键的值 |
INCR key | 将键的值加 1 |
DECR key | 将键的值减 1 |
APPEND key value | 将值追加到键的值之后 |
实例
set test "玛卡巴卡"
get test
incr test
decr test
append test "万岁!"
利用set创建了一个键为test,值为“玛卡巴卡”,get获取test的值,由于这里string值为中文,不能使用incr和decr,append增加值
2. Hash(哈希)
Redis hash 是一个键值(key=>value)对集合,类似于一个小型的 NoSQL 数据库。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个哈希最多可以存储 2^32 - 1 个键值对。
常用命令
命令 | 作用 |
---|---|
HSET key field value | 设置哈希表中字段的值 |
HGET key field | 获取哈希表中字段的值 |
HGETALL key | 获取哈希表中所有字段和值 |
HDEL key field | 删除哈希表中的一个或多个字段 |
场景:存储、读取、修改用户属性
实例
首先删除前面的String类型的test或者使用另外的数据库,redis共有16个
-- 选择2号数据库
select 2
-- 删除test键
del test
运行:
hmset test field1 "Hello" field2 "World"
hget test field1
hgetall test
hdel test field1
hgetall test
实例中我们使用了hmset设置了两个 field=>value 对, hget 获取对应 field 对应的 value,hdel删除了field1,hgetall获取了test键的全部值
3. List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可以存储 2^32 - 1 个元素。
常用命令
命令 | 作用 |
---|---|
LPUSH key value | 将值插入到列表头部 |
RPUSH key value | 将值插入到列表尾部 |
LPOP key | 移出并获取列表的第一个元素 |
RPOP key | 移出并获取列表的最后一个元素 |
LRANGE key start stop | 获取列表在指定范围内的元素 |
场景:1、最新消息排行等功能(比如朋友圈的时间线) 2、消息队列
实例
同理,这里我们先使用del命令删除test键
del test
lpush test redis
lpush test mongodb
lpush test rabbitmq
lrange test 0 10
rpush test java
lrange test 0 10
lpop test
rpop test
lrange test 0 10
4. Set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
常用命令
命令 | 作用 |
---|---|
SADD key value | 向集合添加一个或多个成员,添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。 |
SREM key value | 移除集合中的一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SISMEMBER key value | 判断值是否是集合的成员 |
场景:1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
实例
同理,这里我们先使用del命令删除test键
del test
sadd test redis
sadd test mongodb
sadd test rabbitmq
smembers test
sadd test rabbitmq
smembers test
srem test rabbitmq
sismember test rabbitmq
注意:以上实例中 rabbitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
5. zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
常用命令
命令 | 作用 |
---|---|
ZADD key score value | 向有序集合添加一个或多个成员,或更新已存在成员的分数 |
ZRANGE key start stop [WITHSCORES] | 返回指定范围内的成员 |
ZREM key value | 移除有序集合中的一个或多个成员 |
ZSCORE key value | 返回有序集合中,成员的分数值 |
场景:1、排行榜 2、带权重的消息队列
实例
同理,这里我们先使用del命令删除test键
del test
zadd test 0 redis
zadd test 0 mongdb
zadd test 0 rabbitmq
zadd test 1 rabbitmq
zrange test 0 1000
zrem test redis
zscore test rabbitmq
6. HyperLogLog
- 用于基数估计算法的数据结构。
- 常用于统计唯一值的近似值。
7. Bitmaps
- 位数组,可以对字符串进行位操作。
- 常用于实现布隆过滤器等位操作。
8. Geospatial Indexes
处理地理空间数据,支持地理空间索引和半径查询。
9. Streams
- 日志数据类型,支持时间序列数据。
- 用于消息队列和实时数据处理。