0%

Redis6

Redis 概述

image-20230306154617660

介绍

  • Redis 是一个开源的 key-value 存储系统
  • 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set –有序集合) 和 hash(哈希类型)。
  • 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的
  • 在此基础上,Redis 支持各种不同方式的排序。
  • 与 memcached 一样,为了保证效率,数据都是缓存在内存中。
  • 区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
    并且在此基础上实现了 master-slave (主从) 同步。

应用场景

配合关系型数据库做高速缓存

  • 高频次,热门访问的数据,降低数据库IO;
  • 分布式架构,做session共享。

image-20210618160003509

多样的数据结构存储持久化数据

image-20210618160101040

相关技术

Redis 使用的是单线程 + 多路 IO 复用技术

多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用 select 和 poll 函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

串行 vs 多线程 + 锁(memcached) vs 单线程 + 多路 IO 复用 (Redis)(与 Memcache 三点不同:支持多数据类型,支持持久化,单线程 + 多路 IO 复用) 。

Redis安装

Redis 是需要安装在Linux系统中。并且要求系统中需要有C语言的环境gcc。

此处选择的Linux版本为CentOS 7.

Redis的官方王章地址:https://redis.io/

1
2
3
4
5
6
7
8
9
10
yum install -y gcc tcl  # 安装依赖

tar -zxvf redis-6.2.6.tar.gz # 解压压缩包,压缩包从系统中下载
cd redis-6.2.6 # 进入解压后的目录下
make # 进行编译
make install # 进行安装 默认安装目录 /usr/local/bin

#### Redis 命令
redis-server # 启动redis服务
redis-cli # 通过客户端连接redis

指定配置启动

如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6),名字叫redis.conf

image-20230306162933351

先将这个配置文件备份一份

1
cp redis.conf redis.conf.bck

然后修改redis.conf文件中的一些配置

1
2
3
4
5
6
7
# 监听的地址,默认是127.0.0.1,会导致只能在本地访问,修改为0.0.0.0则可以在任意ip访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问reids必须输入秘密
requirepass 123456

Redis的其他常见配置:

1
2
3
4
5
6
7
8
9
10
# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志,持久化等文件会保存在这个目录
dir .
# 数据库数量 设置为1,代表只使用一个库,默认有16个库,编号0~15
databases 1
# 设置为redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"

启动redis:

1
2
3
4
# 进入redis安装目录
cd /usr/local/src/redis-6.2.6
# 启动
redis-server ./redis.conf

停止服务:

1
2
3
# 利用redis-cli 来执行shutdown命令,即可停止redis服务
# 因为之前配置了密码,因此需要通过 -u 来指定密码
redis-cli -u 123456 shutdown

开机自启动

我们也可以通过配置来实现开机自启动

首先,新建一个系统服务文件:

1
vi /etc/systemd/system/redis.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重载系统服务:

1
systemctl daemon-reload

现在,我们可以用下面这组命令来操作redis:

1
2
3
4
5
6
7
8
# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

执行下面的命令可以让redis开机自启:

1
systemctl enable redis

Redis客户端

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:

  • 命令行客户端
  • 图形化桌面客户端
  • 编程客户端

Redis命令行客户端

Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

1
redis-cli [options] [commonds]

其中常见的options有:

  • -h 127.0.0.1:指定要连接的redis节点的IP地址,默认是127.0.0.1
  • -p 6379:指定要连接的redis节点的端口,默认是6379
  • -a 123321:指定redis的访问密码

其中的commonds就是Redis的操作命令,例如:

  • ping:与redis服务端做心跳测试,服务端正常会返回pong

不指定commond时,会进入redis-cli的交互控制台:

image-20211211110439353

图形化桌面客户端

GitHub上的大神编写了Redis的图形化桌面客户端,地址:https://github.com/uglide/RedisDesktopManager

不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。

在下面这个仓库可以找到安装包:https://github.com/lework/RedisDesktopManager-Windows/releases

image-20211211111351885

安装

在课前资料中可以找到Redis的图形化桌面客户端:

image-20211214154938770

解压缩后,运行安装程序即可安装:

image-20211214155123841

此处略。

安装完成后,在安装目录下找到rdm.exe文件:

image-20211211110935819

双击即可运行:

image-20211214155406692

建立连接

点击左上角的连接到Redis服务器按钮:

image-20211214155424842

在弹出的窗口中填写Redis服务信息:

image-20211211111614483

点击确定后,在左侧菜单会出现这个链接:

image-20211214155804523

点击即可建立连接了:

image-20211214155849495

Redis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。

如果是基于redis-cli连接Redis服务,可以通过select命令来选择数据库:

1
2
# 选择 0号库
select 0

Redis 数据类型

Redis 字符串String

简介

  • String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
  • String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。
  • String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M。

常用命令

  • set <key> <value>:添加键值对指令
  • get <key>:获取对应键的值
  • append <key> <value>:将给定的value追加到原值的末尾
  • strlen <key>:获得值的长度
  • setnx <key> <value>:只有在不存在时,设置key的值
  • incr <key>:将key中存储的数字加1。只能对数字进行操作。
  • decr <key>:将key中存储的数字减1。
  • incrby/decrby <key> <步长>:将key中存储的数字增减自定义的步长。
正在加载今日诗词....