0

0

Python全栈(六)项目前导之1.Redis介绍及数据类型介绍

爱谁谁

爱谁谁

发布时间:2025-09-25 09:06:15

|

299人浏览过

|

来源于php中文网

原创

文章目录一、数据库发展历史1.背景2.数据库的发展简史二、redis的介绍和安装1.redis概念2.redis特性3.redis的作用和使用redis的主要作用:redis应用场景使用4.redis五大数据类型5.redis的安装和启动ubuntu上安装rediskali中安装rediswindows中安装redis6.常见命令三、redis的配置文件四、redis-string类型1.set/get/del/append/strlen2.incr/decr/incrby/decrby3.getrange/setrange五、redis-list类型1.lpush/rpush/lrange2.lpop/rpop3.lindex4.llen5.lrem key6.ltrim key7.rpoplpush8.lset key index value9.linsert key before/after一、数据库发展历史1.背景

随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务的i/o压力,来解决系统性能上的瓶颈。

2.数据库的发展简史

数据库的发展大致分为5个阶段。

在互联网+大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求。 单数据库实例适用于用户访问量较少的情况,系统直接查询数据库,原理如下:
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求,此时需要缓存(memcache)+单数据库实例: 用户访问量很大时,将常用的数据放到缓存,用户请求时直接访问缓存,当需要访问的数据不存在于缓存中时,再请求数据库,降低了与数据库直接交互的频率,降低了性能要求。 原理示意如下:
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大,此时需要用到缓存+主从数据库+读写分离。 原理如下:
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈,此时要用到缓存+主从数据库集群+读写分离+分库分表。 原理如下:
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据,此时需要用到nosql+主从数据库集群+读写分离+分库分表。 原理如下:
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
二、Redis的介绍和安装1.Redis概念

Redis是一个C语言开发的、高性能的、开源的、键值对存储数据的nosql数据库。

NoSQL not only sql,泛指非关系型数据库,包括Redis、MongoDB、Hbase等。关系型数据库 MySQL、Oracle、SqlServer等。2.Redis特性Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用Redis不仅仅支持简单的key-value类型的数据,同时还提供List、set等数据类型Redis支持数据的备份3.Redis的作用和使用Redis的主要作用:

快速存取。

Redis应用场景

点赞、秒杀、直播平台的在线好友列表、商品排行榜和单点登录等场景。 这些应用在短时间内都有大量的数据交互,都要求数据库有极高的效率。

立即学习Python免费学习笔记(深入)”;

使用官网地址 https://redis.io/命令地址 http://doc.redisfans.com/ http://redis.cn/commands.html#thash

可以根据需要查看。

4.Redis五大数据类型stringListsethashzset5.Redis的安装和启动

主要包括Ubuntu、Kali和Windows的安装。

Ubuntu上安装Redis代码语言:javascript代码运行次数:0运行复制
<code class="javascript"># 安装sudo apt-get install redis-server# 查看帮助命令redis-server --help# 编辑Redis配置文件sudo vim /etc/redis/redis.conf# 将daemonize no改为 daemonize yes保存退出# 启动redis-server# 打开服务sudo service redis start# 关闭服务sudo service redis stop</code>
Kali中安装Redis代码语言:javascript代码运行次数:0运行复制
<code class="javascript"># 下载wget http://download.redis.io/releases/redis-5.0.8.tar.gz# 解压tar xzf redis-5.0.8.tar.gz# 切换目录cd redis-5.0.8# 安装make</code>

Redis服务端开启:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">src/redis-server</code>

显示:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">7088:C 21 Mar 2020 16:39:13.749 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo7088:C 21 Mar 2020 16:39:13.749 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7088, just started7088:C 21 Mar 2020 16:39:13.749 # Warning: no config file specified, using the default config. In order to specify a config file use src/redis-server /path/to/redis.conf7088:M 21 Mar 2020 16:39:13.749 * Increased maximum number of open files to 10032 (it was originally set to 1024).                _._                                                             _.-``__ ''-._                                                   _.-``    `.  `_.  ''-._           Redis 5.0.8 (00000000/0) 64 bit  .-`` .-```.  ```\/    _.,_ ''-._                                    (    '      ,       .-`  | `,    )     Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379 |    `-._   `._    /     _.-'    |     PID: 7088  `-._    `-._  `-./  _.-'    _.-'                                    |`-._`-._    `-.__.-'    _.-'_.-'|                                   |    `-._`-._        _.-'_.-'    |           http://redis.io          `-._    `-._`-.__.-'_.-'    _.-'                                    |`-._`-._    `-.__.-'    _.-'_.-'|                                   |    `-._`-._        _.-'_.-'    |                                    `-._    `-._`-.__.-'_.-'    _.-'                                         `-._    `-.__.-'    _.-'                                                 `-._        _.-'                                                         `-.__.-'                                               7088:M 21 Mar 2020 16:39:13.750 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.7088:M 21 Mar 2020 16:39:13.750 # Server initialized7088:M 21 Mar 2020 16:39:13.750 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.7088:M 21 Mar 2020 16:39:13.750 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.7088:M 21 Mar 2020 16:39:13.750 * DB loaded from disk: 0.000 seconds7088:M 21 Mar 2020 16:39:13.750 * Ready to accept connections</code>

服务端开启成功,出现堵塞,可以再开一个终端使用客户端连接:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">redis-cli</code>

显示并测试:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> set name corleyOK127.0.0.1:6379> get name"corley"127.0.0.1:6379> </code>

可以在配置文件中进行设置取消堵塞: 执行vim redis.conf命令打开配置文件,找到daemoize no处将no改为yes,保存退出,用命令src/redis-server redis.conf即可开启服务,不会堵塞,显示:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">7127:C 21 Mar 2020 16:48:39.111 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo7127:C 21 Mar 2020 16:48:39.111 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7127, just started7127:C 21 Mar 2020 16:48:39.111 # Configuration loaded</code>
Windows中安装Redis

先点击https://download.csdn.net/download/CUFEECR/12260885下载后解压。 在Windows中不需要下载安装包安装,可以直接点击解压后的文件夹中的应用程序进行交互(双击redis-server.exe启动redis服务器,双击redis-cli.exe打开redis客户端),或者在命令行中操作: 命令行切换到redis路径下,命令行输入redis-server即可开启服务,再打开一个命令行输入redis-cli即连接到服务端,可以进行操作,同时还可将redis目录加入环境变量,更方便操作,操作如下:

Phidata
Phidata

Phidata是一个开源框架,可以快速构建和部署AI智能体应用

下载
复制redis路径右键此电脑点击属性点击高级系统设置,如下
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
设置环境变量
Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
逐步点击确定并退出

此时再重新打开一个命令行,不需要切换路径,直接输入redis-sever即可打开redis服务。 但是通过上述方式打开redis服务是临时的,一旦redis-server退出服务即关闭,可以执行redis-server --service-start永久开启服务,此时可以在Windows系统服务中看到Redis正在运行,如下:

Python全栈(六)项目前导之1.Redis介绍及数据类型介绍

还可以通过redis-server --service-stop关闭服务。

6.常见命令dbsize 查看当前数据库的key数量keys * 查看key的内容flushdb 清空当前数据库的key的数量,相当于删库flushall 清空所有库的key(慎用)exists key 判断key是否存在三、Redis的配置文件

Linux中配置文件路径为 /etc/redis/redis.conf,Windows中配置文件即为Redis目录下的redis.windows-service.conf和redis.windows.conf。配置文件中有一些关键的参数说明:

daemonize的进一步说明: daemonize是守护线程,默认为no,启动redis服务端后堵塞,修改为yes后再用命令src/redis-server redis.conf启动,不会发生堵塞 Kali中后台启动redis可以用命令ps -aux | grep redis,停止服务用kill 8975 更多配置文件说明可点击https://www.cnblogs.com/kreo/p/4423362.html查看。

四、Redis-String类型

string是redis最基本的类型,一个key对应一个value,示意如下:

Python全栈(六)项目前导之1.Redis介绍及数据类型介绍

string可以包含任何数据,最大不能超过512M。

1.set/get/del/append/strlen代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> set name corley               OK                                            127.0.0.1:6379> get name                      "corley"# 重复设置会覆盖                                      127.0.0.1:6379> mset name corley1 age 18 sex 1OK                                            127.0.0.1:6379> mget name age sex             1) "corley1"                                  2) "18"                                       3) "1" # 返回的整数表示值的长度                                       127.0.0.1:6379> append name 2                 (integer) 8                                   127.0.0.1:6379> get name                      "corley12"                                    127.0.0.1:6379> del sex                       (integer) 1                                   127.0.0.1:6379> strlen age                    (integer) 2   # 设置过期时间                                127.0.0.1:6379> expire name 3                 (integer) 1                                   127.0.0.1:6379> get name                      "corley12"                                    127.0.0.1:6379> get name                      (nil)                                         127.0.0.1:6379> get name                      (nil)        # 如果有name则3秒后过期,则否先创建name再3秒后过期                                 127.0.0.1:6379> setex name 3 corley           OK                                            127.0.0.1:6379> get name                      (nil)                                         127.0.0.1:6379>                               </code>
2.incr/decr/incrby/decrby代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> set num 1OK127.0.0.1:6379> incr num(integer) 2127.0.0.1:6379> incr num(integer) 3127.0.0.1:6379> incr num(integer) 4127.0.0.1:6379> incr num(integer) 5127.0.0.1:6379> decr num(integer) 4127.0.0.1:6379> decr num(integer) 3127.0.0.1:6379> incrby num 3(integer) 6127.0.0.1:6379> decrby num 2(integer) 4127.0.0.1:6379></code>

decrdecrby命令可以使数减少到负数。

3.getrange/setrange代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> set name CorleyOK127.0.0.1:6379> getrange name 0 2"Cor"127.0.0.1:6379> setrange name 4 a(integer) 6127.0.0.1:6379> get name"Corlay"127.0.0.1:6379> setrange name 4 ang(integer) 7127.0.0.1:6379> get name"Corlang"127.0.0.1:6379> getrange name 0 -1"Corlang"127.0.0.1:6379></code>
五、Redis-List类型

List是单值多value类型。 List(列表)是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。 List的底层实际是链表。

1.lpush/rpush/lrange代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lpush l1 1 2 3 4 5(integer) 5127.0.0.1:6379> rpush l2 1 2 3 4 5(integer) 5127.0.0.1:6379> lrange l1 0 -11) "5"2) "4"3) "3"4) "2"5) "1"127.0.0.1:6379> lrange l2 0 -11) "1"2) "2"3) "3"4) "4"5) "5"127.0.0.1:6379></code>
2.lpop/rpop代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lpop l1"5"127.0.0.1:6379> lrange l1 0 -11) "4"2) "3"3) "2"4) "1"127.0.0.1:6379> rpop l1"1"127.0.0.1:6379> lrange l1 0 -11) "4"2) "3"3) "2"127.0.0.1:6379></code>
3.lindex

按照索引下标获得元素(从左到右)。

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lrange l1 0 21) "4"2) "3"3) "2"127.0.0.1:6379> lindex l1 1"3"127.0.0.1:6379></code>
4.llen

获取列表长度。

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> llen l1(integer) 3127.0.0.1:6379> llen l2(integer) 5127.0.0.1:6379></code>
5.lrem key

删除多个相同值。

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lpush l3 1 3 2 2 3 4 5(integer) 7                           127.0.0.1:6379> lrange l3 0 -1        1) "5"                                2) "4"                                3) "3"                                4) "2"                                5) "2"                                6) "3"                                7) "1"                                127.0.0.1:6379> lrem l3 1 3           (integer) 1                           127.0.0.1:6379> lrange l3 0 -1        1) "5"                                2) "4"                                3) "2"                                4) "2"                                5) "3"                                6) "1"                                127.0.0.1:6379> lrem l3 2 2           (integer) 2                           127.0.0.1:6379> lrange l3 0 -1        1) "5"                                2) "4"                                3) "3"                                4) "1"                                127.0.0.1:6379>                       </code>
6.ltrim key

截取指定范围的值后再赋值给key。

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lpush l4 1 2 3 4(integer) 4                     127.0.0.1:6379> ltrim l4 0 2    OK                              127.0.0.1:6379> lrange l4 0 -1  1) "4"                          2) "3"                          3) "2"                          127.0.0.1:6379>                 </code>
7.rpoplpush代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lrange l1 0 -1 1) "4"                         2) "3"                         3) "2"                         127.0.0.1:6379> lrange l2 0 -1 1) "1"                         2) "2"                         3) "3"                         4) "4"                         5) "5"                         127.0.0.1:6379> rpoplpush l1 l2"2"                            127.0.0.1:6379> lrange l1 0 -1 1) "4"                         2) "3"                         127.0.0.1:6379> lrange l2 0 -1 1) "2"                         2) "1"                         3) "2"                         4) "3"                         5) "4"                         6) "5"                         127.0.0.1:6379>                </code>
8.lset key index value代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lset l1 1 5OK127.0.0.1:6379> lrange l1 0 -11) "4"2) "5"127.0.0.1:6379></code>
9.linsert key before/after代码语言:javascript代码运行次数:0运行复制
<code class="javascript">127.0.0.1:6379> lrange l4 0 -1       1) "4"                               2) "3"                               3) "2"                               127.0.0.1:6379> linsert l4 before 6 7(integer) -1                         127.0.0.1:6379> linsert l4 before 3 7(integer) 4                          127.0.0.1:6379> linsert l4 after 2 5 (integer) 5                          127.0.0.1:6379> lrange l4 0 -1       1) "4"                               2) "7"                               3) "3"                               4) "2"                               5) "5"                               127.0.0.1:6379>                      </code>

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

407

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

632

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

362

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

263

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

625

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

556

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

668

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

616

2023.09.22

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

0

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 838人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号