redis学习-34-PHP/Python使用Redis

2023-05-16

37.PHP使用Redis

  • 首先需要熟练掌握 PHP 语言,再者是已经安装了 PHP Redis 扩展程序

37.1 安装扩展程序

  • 首先下载 PHP Redis 扩展程序,下载的扩展程序要与 Redis 版本相符合。当下载完成后,将文件解压至 phpredis 目录,然后执行以下安装命令:
$ cd phpredis-5.0.1         # 进入 phpredis 目录
/usr/local/php/bin/phpize   #用phpize生成configure配置文件
./configure --with-php-config=/usr/local/php/bin/php-config
$ suodo make #编译
$ suodo make install #安装

注意,上述安装命令在 Ubuntu 环境下执行。

  • 编辑 php.ini 配置文件,在文件末尾添加如下语句:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20190711"
extension = redis.so
  • 重启 apache 或者 php-fpm,并查看 phpinfo 信息,就能看到 Redis 扩展已经安装完成。

37.2 连接Redis服务器

  • 实例如下
?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "连接成功";
    //检查服务是否运行
   echo "服务器正在运行: " . $redis->ping();
?>
  • 程序运行结果:
连接成功
服务器正在运行:PONG

37.3 PHP Redis字符串

  • 实例如下:
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "服务器连接成功";
   //设置 redis 字符串数据
   $redis->set("webname", "www.baidu.net");
   // 获取存储的数据并输出
   echo "获取网站名: " . $redis->get("webname");
?>
  • 程序运行结果:
服务器连接成功
获取网站名:www.baidu.net

37.4 PHP Redis列表

  • 实例如下:
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "服务器连接成功";
   //存储数据到列表中
   $redis->lpush("course_list", "Python");
   $redis->lpush("course_list", "Java");
   $redis->lpush("course_list", "PHP");
   // 获取存储的数据并输出
   $arList = $redis->lrange("course_list", 0 ,2);
   echo "获取列表元素:";
   print_r($arList);
?>

  • 程序运行结果:
服务器连接成功
获取网站名:
PHP
Java
Python

37.5 PHP Redis哈希

  • 实例如下:
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "服务器连接成功";
   //存储数据到散列
   $hash_value=['username_1'=>'Jack','username_2'=>'Helen']
   $redis->hmset("user", $hash_value);
   // 获取存储的数据并输出
   $result=$redis->hget('user','username_1')
   echo "获取用户名";
   print_r($result);
?>
  • 程序运行结果:
服务器连接成功
获取用户名:
Jack

37.6 PHP Redis键

  • 实例如下:
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "服务器连接成功";
   // 查看所有key
   $arList = $redis->keys("*");
   echo "获取所有键: ";
   print_r($arList);
?>
  • 程序运行结果:
服务器连接成功
获取所有键:
webname
user
course_list

38.Python使用Redis

  • Python 使用 Redis 相对比较简单,Python 专门提供了操作 Redis 的第三方模块,即 redis 模块,该模块可以直接使用 Python 包管理工具pip来安装。

38.1 安装redis模块

  • 以 Windows 系统为例,使用包管理工具安装 redis 模块,命令如下:
python -m pip install redis
  • 若是 Linux 系统,需要执行以下命令来安装:
sudo pip3 install redis

38.2 Python Redis连接

  • redis 模块采用了两种连接模式:直接模式和连接池模式,它们都可以操作 Redis。

  • 1.直连模式

import redis
# 本地连接,创建数据库连接对象
r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')

上述代码中,db 表示当前选择的库,其参数值可以是 0-15;如果设置连接数据库的密码,那么就需要使用 password 进行验证,否则可以省略。

  • 2.连接池模式:redis 模块使用 connection pool(连接池)来管理 redis server 的所有连接,每个 Redis 实例都会维护一个属于自己的连接池,这样做的目的是为了减少每次连接或断开的性能消耗。下面示例,实现了多个 Redis 实例共享一个连接池,代码如下:
import redis
#创建连接池并连接到redis,并设置最大连接数量;
conn_pool = redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=10)
# 第一个客户端访问
re_pool = redis.Redis(connection_pool=conn_pool)
# 第二个客户端访问
re_pool2 = redis.Redis(connection_pool=conn_pool)
...

连接池的作用:当有新的客户端请求连接时,只需要去连接池获取一个连接即可,实际上就是把一个连接共享给多个客户端使用,这样就节省了每次连接所耗费的时间。

38.3 Python Redis通用操作

  • 下面是 Python 操作 Redis 数据库的通用命令。
import redis
r = redis.Redis(host='127.0.0.1',port=6379,db=0)
print(r.keys('*'))
key_list = r.keys('*')
#转换为字符串
for key in key_list:
  print(key.decode())
#查看key类型
print(r.type('webname'))
# 返回值: 0 或者 1
print(r.exists('username'))
# 删除key
r.delete('webname')
if "age"  in key_list:
    print("删除失败")
else:
    print("删除成功")

  • 输出结果:
['username', 'webname', 'age', 'password']
username
webname
age
password
'string'
1
删除成功

38.4 Python Redis字符串

  • 示例如下:
import redis
#连接redis服务器
r = redis.Redis(host='127.0.0.1',port=6379,db=0)
​#key为database
r.set('webname','www.baidu.com')
print(r.get('webname'))
#mset参数为字典
r.mset({'username':'jacak','password':'123'})
print(r.mget('username','password'))
#查看value长度
print(r.strlen('username'))
​
#数值操作
r.set('age','15')
r.incrby('age',5)
r.decrby('age',5)
r.incr('age')
r.decr('age')
r.incrbyfloat('age',5.2)
r.incrbyfloat('age',-10.5)
print(r.get('age'))
​#删除key
r.delete('username')

  • 输出结果如下:
'www.baidu.com'
['jacak', '123']
5
'9.69999999999999929'

注意:输出结果为 bytes 形式,需要使用 decode() 方法进行转换。

38.5 Python Redis列表

  • 示例如下:
import redis
#建立redis连接
r = redis.Redis(host='127.0.0.1',port=6379,db=0)
r.lpush('database','sql','mysql','redis')
r.linsert('database','before','mysql',',mongodb')
print(r.llen('database'))
print(r.lrange('database',0,-1))
print(r.rpop('database'))
#保留指定区间内元素,返回True
print(r.ltrim('database',0,1))
while True:
  # 如果列表中为空时,则返回None
  result = r.brpop('database',1)
  if result:
      print(result)
  else:
      break
r.delete('database')

  • 输出结果如下:
4
['redis', 'mongodb', 'mysql', 'sql']
'sql'
True
('database', 'mongodb')
('database', 'redis')

38.6 Python Redis散列

  • Python 操作 Hash 散列常用方法如下:
# 1、更新一条数据的value,若不存在时,则新建这条数据
hset(key, field, value)
# 2、读取数据的指定字段属性,返回值为字符串类型
hget(key, field)
# 3、批量更新字段属性,参数mapping为字典类型
hmset(key, mapping)
# 4、批量读取数据的字段属性
hmget(key, fields)
# 5、获取这条数据的所有属性字段和对应的值,返回值为字典类型
hgetall(key)
# 6、获取这条数据的所有属性字段,返回值为列表类型
hkeys(key)
# 7、删除这条数据的指定字段
hdel(key, field)

  • 命令演示:
import redis
r = redis.Redis(host='127.0.0.1',port=6379,db=0)
# 设置一条数据
r.hset('user1','name','www.baidu.com')
# 更新数据
r.hset('user1','name','www.biancheng.net')
# 获取数据
print(r.hget('user1','name'))
# 一次性设置多个field和value
user_dict = {
  'password':'123',
  'gender':'M',
  'height':'175cm'
}
r.hmset('user1',user_dict)
# 获取所有数据,字典类型
print(r.hgetall('user1'))
# 获取所有fields字段和所有values值
print(r.hkeys('user1'))
print(r.hvals('user1'))

  • 输出结果:
'www.biancheng.net'
{'name': 'www.biancheng.net', 'password': '123', 'gender': 'M', 'height': '175cm'}
['name', 'password', 'gender', 'height']
['www.biancheng.net', '123', 'M', '175cm']

38.7 Python Redis集合

  • Python 操作 Set 集合常用方法如下:
#1、给name对应的集合中添加元素
sadd(name,values)
e.g.
r.sadd("set_name","tom")
r.sadd("set_name","tom","jim")
​
#2、获取name对应的集合的所有成员
smembers(name)
e.g.
r.smembers('set_name')
​
#3、获取name对应的集合中的元素个数
scard(name)
e.g.
r.scard("set_name")
​
#4、检查value是否是name对应的集合内的元素,返回值为True或False
sismember(name, value)
e.g.
r.sismember('set_name','tom')
​
#5、随机删除并返回指定集合的一个元素
spop(name)
e.g.
member = r.spop('set_name')
​
#6、删除集合中的某个元素
srem(name, value)
r.srem("set_name", "tom")
​
#7、获取多个name对应集合的交集
sinter(keys, *args)
e.g.​
r.sadd("set_name","a","b")
r.sadd("set_name1","b","c")
r.sadd("set_name2","b","c","d")
​
print(r.sinter("set_name","set_name1","set_name2"))
#输出:{b'b'}
​
#8、获取多个name对应的集合的并集
sunion(keys, *args)
e.g.
r.sunion("set_name","set_name1","set_name2")

下一篇:redis学习-35-Redis配置项汇总

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis学习-34-PHP/Python使用Redis 的相关文章

  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • 是否可以强制浮点数的指数或有效数匹配另一个浮点数(Python)?

    这是我前几天试图解决的一个有趣的问题 是否可以强制一个的有效数或指数float与另一个人一样float在Python中 出现这个问题是因为我试图重新调整一些数据 以便最小值和最大值与另一个数据集匹配 然而 我重新调整后的数据略有偏差 大约小
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • Nginx 安全链接模块不适用于 php 文件,但适用于静态文件

    我在用http nginx org en docs http ngx http secure link module html http nginx org en docs http ngx http secure link module
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • /etc/profile文件简单介绍

    什么是 etc profile文件 etc profile文件为系统的每个用户设置环境变量信息 此文件的修改会影响到所有用户 想了解更多细节内容可以用 xff1a vi etc profile 命令进行查看 etc profile文件和 b
  • 五月再不跳槽,就晚了

    从时间节点上来看 xff0c 3月 4月是每年跳槽的黄金季 xff01 之后的五月也会放出一些岗位 以 BAT 为代表的互联网大厂 xff0c 无论是薪资待遇 还是平台和福利 xff0c 都一直是求职者眼中的香饽饽 xff0c 大厂经历 在
  • I2C通信协议详解和通信流程分析

    1 I2C通信特征 1 1 物理接口 xff1a SCL 43 SDA 1 SCL serial clock xff1a 时钟线 xff0c 传输CLK信号 xff0c 一般是I2C主设备向从设备提供时钟的通道 2 SDA serial d
  • 用LED驱动框架注册led设备的示例代码

    1 LED驱动框架分析 参考博客 xff1a 内核LED驱动框架讲解以及led设备注册示例代码 xff1b 2 简单的用LED驱动框架注册led设备的代码 span class token macro property span class
  • 【C++入门】静态成员详解(定义、实现原理、使用注意事项)

    1 类的静态成员 1 在类中用static修饰成员 xff0c 则该成员是静态成员 xff1b 2 静态成员是属于类本身的 xff0c 所有类的对象共享 xff1b 3 类的对象都可以访问静态成员 xff0c 但是所有类的成员访问的静态成员
  • pci总线协议学习笔记——PCI总线基本概念

    1 pci总线概述 1 PCI xff0c 外设组件互连标准 Peripheral Component Interconnection xff0c 是一种由英特尔 xff08 Intel xff09 公司1991年推出的用于定义局部总线的标
  • RK3568芯片开发笔记——调试pwm控制红外功能

    1 PWM介绍 参考博客 xff1a ARM芯片开发 xff08 S5PV210芯片 xff09 定时器 看门狗 RTC xff1b 2 配置pwm功能的方法 1 内核层 xff1a 内核代码里有pwm子系统 xff0c 里面有pwm相关函
  • 海思芯片(hi3536av100)启动模式选择

    1 支持多种模式可配置 1 支持BootRom启动 2 支持从 SPI NOR Flash 启动 3 支持从 SPI NAND Flash 启动 4 支持从 eMMC 启动 5 支持 PCIe 从片启动 2 启动方式的选择 BOOT SEL
  • C语言头文件详解

    1 include的作用 简单一句话 xff1a 在include的地方 xff0c 把头文件里的内容原封不动的复制到引用该头文件的地方 2 头文件的引用 头文件引用有两种形式 xff1a include lt stdio h gt 和 i
  • wps云文档 wps自动备份怎么设置和取消

    转载请说明来源于 34 厦门SEO 34 本文地址 xff1a http www 96096 cc Article 169633 html wps云文档 WPS 为用户提供了自动备份的功能 xff0c 这为用户带来了方便的同时也给用户带来了
  • IDEA中Spring的配置使用

    IDEA中Spring的配置使用 1 首先创建JavaEE Web Application项目 xff0c 勾选Spring xff0c Libraries选择Set up library later xff08 有spring jar包的
  • content-type类型总结

    content type content type是http请求的响应头和请求头的字段 当作为响应头时 xff0c 告诉客户端实际返回的内容的内容类型 作为请求头时 xff0c 客户端告诉服务器实际发送的数据类型 前端开发过程中 xff0c
  • 外包干了6年,寄了

    前两天有读者想我资讯 xff1a 我是一名Android工程师 xff0c 工作已经四年多快五年了 现在正在找工作 xff0c 由于一直做的都是外包的项目 技术方面都不是很深入 xff0c 现在找工作都是会问一些 xff0c 四大组件 xf
  • java.lang.RuntimeException: Unable to instantiate activity ComponentInfo(不能实例化)异常解决

    java lang RuntimeException Unable to instantiate activity ComponentInfo xff08 不能实例化 xff09 异常解决 一 可能出现的原因及解决方法 xff1a xff0
  • Error:java: Compilation failed: internal java compiler error 的解决过程

    1 错误描述 xff1a IDEA导入一个新的项目 xff0c 运行时包编译失败 2 错误原因 这个错误的原因是因为 JDK 版本问题 xff0c 有两个原因 xff0c 一个是编译器版本不匹配 xff0c 一个是当前项目 JDK 版本不支
  • SpringCloud-21-Hystrix全局降级和解耦降级逻辑

    8 6 全局降级方法 通过上面的方式实现服务降级时 xff0c 需要针对所有业务方法都配置降级方法 xff0c 这极有可能会造成代码的急剧膨胀 为了解决该问题 xff0c 我们还可以为所有业务方法指定一个全局的回退方法 xff0c 具体步骤
  • Linux学习-61-Linux系统服务管理

    14 Linux系统服务管理 系统服务 xff1a 服务是在后台运行的应用程序 xff0c 并且可以提供一些本地系统或网络的功能 Linux 中常见的服务有那些 xff0c 这些服务怎么分类 xff0c 服务如何启动 xff0c 服务如何自
  • Linux学习-84-安装PHP

    17 13 安装PHP PHP xff08 PHP xff1a Hypertext Preprocessor递归缩写 xff09 中文名字是 xff1a 超文本预处理器 xff0c 是一种广泛使用的通用开源脚本语言 xff0c 适合于Web
  • redis学习-33-SpringBoot整合redis

    36 SpringBoot整合redis SpringBoot操作数据 xff1a 使用spring data项目 例如 xff1a jpa jdbc mongodb redis SpringData也是和SpringBoot齐名的项目 x
  • redis学习-34-PHP/Python使用Redis

    37 PHP使用Redis 首先需要熟练掌握 PHP 语言 xff0c 再者是已经安装了 PHP Redis 扩展程序 37 1 安装扩展程序 首先下载 PHP Redis 扩展程序 xff0c 下载的扩展程序要与 Redis 版本相符合