Redis学习笔记

一、Redis概述

1.1Redis简介

Redis( Remote Dictionary Server ),远程字典服务,支持网络,可基于内存亦可基于持久化的日志型、NoSQL开源内存数据库,提供多种语言的API。 Redis 之所以称之为字典服务,是因为 Redis 是一个 key-value 存储系统。支持存储的 value 类型很多,包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等。

1.2Redis的用途

Redis在生产环境中最多的场景是做数据缓存,即客户端从DBMS中查询到的数据先写入到Redis中,后续无论哪个客户端访问数据,直接读取Redis中的数据即可,减少了查询速率,减轻了DBMS的压力。

根据Redis缓存的数据与DBMS中的数据同步性划分,缓存可换分为两类:

  • 实时同步缓存:要求缓存中的数据必须与DBMS中的数据一致,DBMS中的数据发生白变更,缓存中的数据立即消失。
  • 阶段性同步缓存:没有必要与DBMS中的数据保持一致,相差不大即可。(实现:为缓存中添加生存时长属性)

1.3Redis的特性

  • 性能极高:Redis的读的速度可以达到11W次/s,写的速度可以达到8W次/s。有这么高的性能,有以下几点原因:
    • Redis的所有操作都是在内存中发生的。
    • Redis是用C语言开发的。
    • Redis的源码非常精细。
  • 简单稳定:Redis的源码很少,早起版本只有2W行左右,从3.0版本开始,增加了集群功能,代码变为5W行左右。
  • 持久化: Redis 内存中的数据可以进行持久化,其有两种方式:RDB 与 AOF。
  • 高可用集群:Redis提供了高可用的主从集群功能,可以确保系统安全性。
  • 丰富的数据类型:Redis是一个K-V存储系统,支持存储的Value类型很多,包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型), 还有 BitMap、HyperLogLog、Geospatial 类型 。
    • BitMap:一般用于大数据量的二值性统计 。
    • HyperLogLog:其实是 Hyperlog Log,用于对数据量超级庞大的日志做去重统计。
    • Geospatial:地理空间,其主要用于地理位置相关的计算。
  • 强大的功能:Redis提供数据过期功能,发布/订阅功能 ,简单事务功能,还支持Lua脚本扩展功能。
  • 客户端语言广泛: :Redis提供了简单的 TCP 通信协议,编程语言可以方便地的接入 Redis。 所以,有很多的开源社区、大公司等开发出了很多语言的 Redis 客户端。
  • 支持ACL权限控制: 从 Redis6 开始引入了 ACL 模块,可以 为不同用户定制不同的用户权限。 ( ACL,Access Control List,访问控制列表,是一种细粒度的权限管理策略,可以针对任意用户与组进行权限控制。目前大多数 Unix 系统与 Linux 2.6 版本已经支持 ACL了)
  • 支持多线程IO模型: Redis 之前版本采用的是单线程模型,从 6.0 版本开始支持了多线程模型。

1.4Redis的IO模型

Redis 处理客户端请求所采用 的处理架构,称为 Redis 的 IO 模型。不同版本的 Redis 采用的 IO 模型是不同的。

1.4.1单线程模型

对于Redis3.0之前的版本,Redis的IO模型采用是单线程模型,即所有客户请求都由一个线程来完成。

Redis的单线程模型采用多路复用技术。

每个客户端若要想Redis提交请求,都需要与Redis建立一个Socket连接,并向事件分发器注册一个事件,一旦该事件发生,就表明该连接已经就绪,而一旦就绪,事件分发器( 之所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交由不同的事件处理 器去处理。 )就会感知到,然后获取客户端通过该连接发送的请求,并由事件分发器绑定的这个唯一的线程来处理,如果该线程还在处理多个任务,则将该任务写到任务列表中,等待线程处理。

优点:可维护性高,性能高。不存在并发读写的情况,所以不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销。

缺点:性能受到影响,而且单线程只能使用一个处理器,所以会形成处理器浪费。

1.4.2混合线程模型

从Redis4.0版本开始,Redis中就开始加入多线程元素,处理客户端请求还是单线程模型,但对于一些比较耗时但不影响对客户端的的响应操作,就由后台其他线程来完成。比如,持久化,对AOF的rewritr,对失效连接的清理等。

1.4.3多线程模型

从Redis6.0版本,才是真正意义上的多线程模型,因为其对于客户端请求的处理采用多线程模型。

多线程IO模型中的“多线程”仅用于接收,解析客户端的请求,然后把解析出来的请求写到任务队列中,而对具体任务(命令)的处理仍然是由主线程来处理。这样做用户无需考虑线程安全问题,无需考虑事务控制,无需考虑像 LPUSH/LPOP 等命令的执行顺序问题 。

优点:结合了单线程和多线程的优点,避开的它们的不足。

缺点:不是真正意义上的多线程,因为真正处理任务的线程仍然是单线程,所以对其性能还是有点影响。

二、Redis安装和配置

2.1安装前的准备工作
2.1.1安装gcc

由于 Redis 是由 C/C++语言编写的,而从官网下载的 Redis 安装包是需要编译后才可安装的,所以对其进行编译就必须要使用相关编译器。对于C/C++语言的编译器,使用最多的是gcc与gcc-c++,而这两款编译器在 CentOS7中是没有安装的,所以首先要安装这两款编译器。

GCC,GNU Compiler Collection,GNU 编译器集合。

2.1.2下载Redis

redis 的官网为: http://redis.io。点击下面的链接可以直接进行下载。

2.1.3上传到Linux

将下载好的压缩包上传到 Linux 的/opt/redis目录中。

2.2安装Redis
2.2.1解压Redis

将 Redis 解压到/opt/redis 目录中。

2.2.2编译

编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以 直接进行编译了。

进入到解压目录中,然后执行编译命令 make。

当看到如下提示时,表示编译成功。

2.2.3安装

在 Linux 中对于编译过的安装包执行 make install 进行安装。

可以看到,共安装了三个组件:redis 服务器、客户端与一个性能测试工具 benchmark。

2.2.4查看bin目录

安装完成后,打开/usr/local/bin 目录,可以看到出现了很多的文件。

通过 echo $PATH 可以看到,/usr/local/bin 目录是存在于该系统变量中的,这样这些命令就可以在任意目录中执行了。

2.3Redis启动与停止
2.3.1前台启动

在任意目录执行 redis-server 命令即可启动 Redis。这种启动方式会占用当前命令行窗口。

再开启一个会话窗口,可以查看到当前的 Redis 进程,默认端口号为 6379。

通过 Ctrl + C 命令可以停止 Redis 。

2.3.2命令式后台启动

使用nohub命令,最后再添加一个&符,可以使要启动的程序在后台以守护进程方式运行。这样的好处是,进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个nohup.out文件用于记录Redis的操作日志。

2.3.3配置式后台启动

使用nohup命令可以使Redis后台启动,但每次都要键入nohup与&符,比较麻烦。可 以通过修改Linux中Redis的核心配置文件redis.conf达到后台启动的目的。redis.conf文件在Redis的安装目录根下。

将daemonize属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行。

修改后再启动 Redis,就无需再键入 nohup 与&符了,但必须要指定启动所使用的 Redis 配置文件 。

2.3.4Redis的停止

通过 redis-cli shutdown 命令可以停止 Redis。

2.4连接前的配置

Redis 是一个内存数据库服务器,就像 MySQL 一样,对其操作也需要通过客户端进行。 若要使远程主机上的客户端能够连接并访问到服务端的 Redis,则服务端首先要做如下配置。

2.4.1绑定客户端IP

Redis 可以通过修改配置文件来限定可以访问自己的客户端 IP。

以上设置后,只允许当前主机访问当前的 Redis,其它主机均不可访问。所以,如果不想限定访问的客户端,只需要将该行注释掉即可。

2.4.2关闭保护模式

默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。

2.4.3设置访问密码

为 Redis 设置访问密码,可以对要读/写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis,但无法访问。

2.4.3.1密码设置

密码的设置位置在 redis.conf 配置文件中。默认是被注释掉的,没有密码。

没有通过密码登录的用户,无法读/写 Redis。

2.4.3.2使用密码

对于密码的使用,有两种方式:登录时未使用密码,则访问时先输入密码;登录时直接使用密码登录,访问时无需再输入密码。

  • 登录时未使用密码

  • 登录时使用密码

  • 结束服务时使用密码

2.4.4禁止/重命名命令

flushall 与 flushdb。它们都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。以下配置,禁用了 flushall 与 flushdb 命令。

2.5Redis客户端分类

Redis 客户端也像 MySQL 客户端一样有多种类型:命令行客户端、图形界面客户端、Java 代码客户端。

2.5.1命令行客户端

Redis 提供了基本的命令行客户端。打开命令行客户端的命令为 redis-cli。

  • -h 指定连接的Redis服务器的IP
  • -p 指定连接的Redis的端口号

若连接的是本机 Redis,且端口号没有改变,保持默认的 6379,则-h 与-p 选项可以省略不写。

2.5.2图形界面客户端
2.5.3Java 代码客户端

所谓 Java 代码客户端就是一套操作 Redis 的 API,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。 对 Redis 操作的 API 很多,例如 jdbc-redis、jredis 等,但最常用也是最有名的是 Jedis。

未完待续。。。。。。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yourheads

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值