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

CuterCorley 等级 661 0 0

一、数据库发展历史

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应用场景

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

使用

可以根据需要查看。

4.Redis五大数据类型

  • string
  • List
  • set
  • hash
  • zset

    5.Redis的安装和启动

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

    Ubuntu上安装Redis

# 安装
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

Kali中安装Redis

# 下载
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

Redis服务端开启:

src/redis-server

显示:

7088:C 21 Mar 2020 16:39:13.749 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7088:C 21 Mar 2020 16:39:13.749 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7088, just started
7088: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.conf
7088: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 initialized
7088: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 seconds
7088:M 21 Mar 2020 16:39:13.750 * Ready to accept connections

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

redis-cli

显示并测试:

127.0.0.1:6379> set name corley
OK
127.0.0.1:6379> get name
"corley"
127.0.0.1:6379> 

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

7127:C 21 Mar 2020 16:48:39.111 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7127:C 21 Mar 2020 16:48:39.111 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=7127, just started
7127:C 21 Mar 2020 16:48:39.111 # Configuration loaded

Windows中安装Redis

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

  • 复制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.confredis.windows.conf。配置文件中有一些关键的参数说明:

当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。 daemonize no

设置数据库的数目,Redis已默认创建16个数据库,不需要再自己创建,编号0-15 databases 16

根据给定的时间间隔和写入次数将数据保存到磁盘 下面的例子的意思是: 900 秒内如果至少有 1 个 key 的值变化,则保存 300秒内如果至少有 10 个 key 的值变化,则保存 60 秒内如果至少有 10000 个 key 的值变化,则保存
save 900 1 save 300 10 save 60 10000

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。 port 6379

Redis默认只允许本地连接,不允许其他机器连接 bind 127.0.0.1 主从数据库配置 slaveof <masterip> <masterport>

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

set ---- 设置值 get ---- 获取值 mset ---- 设置多个值 mget ---- 获取多个值 append ---- 添加字段 del ---- 删除 strlen ---- 返回字符串长度

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 1
OK                                            
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>                               

2.incr/decr/incrby/decrby

incr ---- 增加 decr ---- 减少 incrby ----- 指定增加多少 decrby ----- 指定减少多少

127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> incr num
(integer) 5
127.0.0.1:6379> decr num
(integer) 4
127.0.0.1:6379> decr num
(integer) 3
127.0.0.1:6379> incrby num 3
(integer) 6
127.0.0.1:6379> decrby num 2
(integer) 4
127.0.0.1:6379>

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

3.getrange/setrange

getrange ---- 获取指定区间范围内的值,类似between....and setrange ---- 从第几位开始替换,下脚本从零开始 0 -1表示全部

127.0.0.1:6379> set name Corley
OK
127.0.0.1:6379> getrange name 0 2
"Cor"
127.0.0.1:6379> setrange name 4 a
(integer) 6
127.0.0.1:6379> get name
"Corlay"
127.0.0.1:6379> setrange name 4 ang
(integer) 7
127.0.0.1:6379> get name
"Corlang"
127.0.0.1:6379> getrange name 0 -1
"Corlang"
127.0.0.1:6379>

五、Redis-List类型

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

1.lpush/rpush/lrange

lpush/rpush/lrange ---- 从左加入元素/从右加入元素/获取指定长度 lpush list01 1 2 3 4 5 ---- 倒序排列 rpush list02 1 2 3 4 5 ---- 正序排列 lrange list01 0 -1 ---- 获取list01中的所有值

127.0.0.1:6379> lpush l1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush l2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379>

2.lpop/rpop

lpop ---- 移除最左的元素 rpop ---- 移除最右的元素

127.0.0.1:6379> lpop l1
"5"
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> rpop l1
"1"
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379>

3.lindex

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

127.0.0.1:6379> lrange l1 0 2
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lindex l1 1
"3"
127.0.0.1:6379>

4.llen

获取列表长度。

127.0.0.1:6379> llen l1
(integer) 3
127.0.0.1:6379> llen l2
(integer) 5
127.0.0.1:6379>

5.lrem key

删除多个相同值。

lrem list01 2 1 在list01中删除2个1

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>                       

6.ltrim key

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

ltrim list01 0 2 截取list01从0到2的数据在赋值给list01

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>                 

7.rpoplpush

rpoplpush list1 list2 将list1中最后一个压入list2中第一位

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>                

8.lset key index value

lset list01 0 x 将list01中第1位换成x

127.0.0.1:6379> lset l1 1 5
OK
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "5"
127.0.0.1:6379>

9.linsert key before/after

linsert list01 before x y 在x之前加字段y

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>                      

本文原文首发来自博客专栏Python全栈(六)项目前导之1.Redis介绍及数据类型介绍,由本人转发至https://www.helloworld.net/p/wG8I57fXKCgb,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/105010792查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

收藏
评论区

相关推荐

Python全栈(六)项目前导之1.Redis介绍及数据类型介绍
一、数据库发展历史 1.背景 随着互联网大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务的I/O压力,来解决系统性能上的瓶颈。 2.数据库的发展简史 数据库的发展大致分为5个阶段。 在互联网大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就
Python初学者必备书籍《Python入门经典》高清PDF版|百度网盘免费下载|Python初学者,自学Python必读
提取码:1028以及前文提到的学习路线图内容简介Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python可以用于很多的领域,从科学计算到游戏开发。《Python入门经典》是面向Python初学者的学习指南,详细介绍了Python编程基础,以及一些高级概念,如面向对象编程。全书分为24章。第1章介绍了Python的背景和安装方法。第2章
怎么学python,学习python的正确姿势
Python是一门相对来说比较简单的编程语言,自学是非常轻松的。首先得明白python有哪些发展方向 需要了解这个这门语言 而不是听说 这个高薪资 容易学习最好的学习状态就是出于兴趣 兴趣是最好的老师 当然对钱感兴趣也是可以的。一、人工智能二、大数据三、网络爬虫工程师四、Python web全栈工程师五、Python自动化运维六、Python自动化测试再来说
想抓住大数据时代?小众数据库不可小觑
大家好,我是Python进阶者,今天给大家来送书啦 随着大数据时代的发展,诞生了一大批大数据时代下的新数据库产品,如今MongoDB、Redis、HBase这些NoSQL数据库已经成为了互联网开发的新标配,SQL一统江湖的时代不复存在了。 然而,如果你觉得只要学习了上边这几种NoSQL你就抓住了大数据时代的话,你可就大错特错了!大数据时代发展速度之快
PDF下载!《Python十大基础专题》《247个Python综合案例》《Pandas 20页学习笔记》
**Python 技术栈** **完整学习路线** 如今书籍汗牛充栋,如何从零、循序渐进地掌握Python技术栈,成为很多读者朋友们关心的问题。最近,我特意按照Python技术栈的学习逻辑,把它划分为六个阶段,并且给出每个阶段的学习资料。 **六个阶段**: ![](https://oscimg.oschina.ne
Python 全栈开发
**如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python。具体如何创建,部署和运行生产 Python Web 应用程序,参考 [Full Stack Python](https://www.oschina.net/action/GoToLink?url=https%
Python 开发:制作一个简易的点菜系统(附源码)
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于海唤鱼杂记客栈 ,作者:海唤鱼杂记客栈 ![Python GUI编程:制作一个简易的点菜系统(附源码)](https://oscimg.oschina.net/oscnet/up-7f6390bf0f7f63953f8c28
Python全栈快餐教程(1)
Python全栈快餐教程(1) - 用Flask处理HTTP请求 ================================ 初识Flask ------- Flask是最流行的Python web框架之一。 我们来写个最小的web应用,只有一个路由先跑进来玩玩吧。 from flask import Flask #
Python快速入门(一)
**引言** Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业。它易学好懂,拥有着丰富的库,功能齐全。人生苦短,就用Python。 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇阅读时间不长,且内容含量高。大家最好亲自码一遍代码,这样可以更有收获。 **概要**
Python快速入门(四)
**引言** Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业。它易学好懂,拥有着丰富的库,功能齐全。人生苦短,就用Python。 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇阅读时间不长,但内容含量高。大家最好亲自码一遍代码,这样可以更有收获。 **概要**
Python操作redis数据库
前言:这两天的事情不多,为了避免之前学习的一点点Python知识遗忘,我在Github上找了一些小项目跟着实践。之前的工作有写过相关的Python处理redis处理数据的脚本,但之前没有养成记录积累的习惯,所以~~~~(遗忘了),所以趁此机会学习一下Python操作redis。 安装: # pip install redis>>> import
Python爬虫人工智能大数据全栈视频史上最全合辑教程分享!
Python爬虫人工智能大数据全栈视频史上最全合辑教程分享! ============================== 毫无疑问Python是这两年最火的编程语言,不仅容易上手,且在多个行业都可应用。尤其今年人工智能及大数据的发展,Python将会展现更多的实用性! 如果你是小白想改变自己的职业方向,抓紧时间上车…精心整理的资料和课程都在下面! P
Python进阶丨如何创建你的第一个Python元类?
> **摘要:**通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类的行为和规则。元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一。通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。本文介绍以下概念: * * 什么是Python元类?
SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍
今天给大家介绍一下SpringBoot中Redis的set、map、list、value等基本操作的具体使用方法 想学习分布式、微服务、JVM、多线程、架构、java、python的童鞋,千万不要扫码,否则后果自负~ 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对于Redis的具体操作进行介绍
SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍
今天给大家介绍一下SpringBoot中Redis的set、map、list、value等基本操作的具体使用方法 想学习分布式、微服务、JVM、多线程、架构、java、python的童鞋,千万不要扫码,否则后果自负~ 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对于Redis的具体操作进行介绍