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

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配置项汇总
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值