当前位置: 首页 > news >正文

Redis与Python交互

一、Python库安装

1、联网安装

yum install epel-release -y
yum install python2-pip -y
pip install redis

2、使用源码安装

到中文官网查找客户端代码:

unzip redis-py-master.zip
cd redis-py-master
python setup.py install

3、检查python的redis扩展

python
import redis

二、Python与Redis交换

1、Python操作Redis单例

import redis

# 1.连接 Redis 服务器
try:
    r=redis.StrictRedis(host='localhost', port=6379)
    //r = redis.Redis(host='localhost', port=6379, password='', db=0)
except Exception as e:
    print(e.message)

# 2.读写数据
# 方式一:根据数据类型的不同,调用相应的方法,完成读写
r.set('name','hello')  # 设置 string 数据
r.get('name')  # 读取 string 数据

# 方式二:使用 pipline
# 缓冲多条命令,然后一次性执行,减少数据传输频率,从而提高效率
pipe = r.pipeline()
pipe.set('name', 'world')
pipe.get('name')
pipe.execute()

2、Python操作Redis集群

 python安装扩展用来操作redis集群:

pip install redis-py-cluster

操作集群的代码:

# -*- coding: utf-8 -*-
from rediscluster import StrictRedisCluster
redis_nodes =  [{'host':'10.5.96.3','port':7000},
                    {'host':'10.5.96.3','port':7001},
                    {'host':'10.5.96.3','port':7002},
                    {'host':'10.5.96.3','port':8000},
                    {'host':'10.5.96.3','port':8001},
                    {'host':'10.5.96.3','port':8002}
                   ]
redisconn = StrictRedisCluster(startup_nodes=redis_nodes)
redisconn.set('name100','shijiange')
print(redisconn.get('name100'))

三、数据操作

1、字符串相关操作

import redis

class TestString(object):
	def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130',port=6379)
    设置值
    def test_set(self):
        res = self.r.set('user1','juran-1')
        print(res)
    取值
	def test_get(self):
        res = self.r.get('user1')
        print(res)
    设置多个值
    def test_mset(self):
        d = {
            'user2':'juran-2',
            'user3':'juran-3'
        }
        res = self.r.mset(d)
    取多个值
    def test_mget(self):
        l = ['user2','user3']
        res = self.r.mget(l)
        print(res)
    删除
	def test_del(self):
        self.r.delete('user2')

2、列表相关操作

class TestList(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130',port=6379)
	插入记录
    def test_push(self):
        res = self.r.lpush('common','1')
        res = self.r.rpush('common','2')
        # res = self.r.rpush('jr','123')
	弹出记录
    def test_pop(self):
        res = self.r.lpop('common')
        res = self.r.rpop('common')
	范围取值
    def test_range(self):
        res = self.r.lrange('common',0,-1)
        print(res)

3、集合相关操作

class TestSet(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130', port=6379)
	添加数据
    def test_sadd(self):
        res = self.r.sadd('set01','1','2')
        lis = ['Cat','Dog']
        res = self.r.sadd('set02',lis)
	删除数据
    def test_del(self):
        res = self.r.srem('set01',1)
	随机删除数据
    def test_pop(self):
        res = self.r.spop('set02')

4、哈希相关操作

class TestHash(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130', port=6379)
	
	批量设值
    def test_hset(self):
        dic = {
            'id':1,
            'name':'huawei'
        }
        res = self.r.hmset('mobile',dic)
	批量取值
    def test_hgetall(self):
        res = self.r.hgetall('mobile')
	判断是否存在	存在返回1  不存在返回0
    def test_hexists(self):
        res = self.r.hexists('mobile','id')
        print(res)

四、Redis 操作封装

连接 Redis 服务器部分是一致的,以String类型的读写进行封装为例:

import redis

# Redis 工具类
class RedisTool():

    # 初始化连接 Redis
    def __init__(self, host='localhost', port=6379):
        self.__redis = redis.StrictRedis(host, port)

    # 读取 String 值
    def get(self, key):
        if self.__redis.exists(key):  # 如果键存在
            return self.__redis.get(key)
        else:  # 否则返回空值
            return ""

    # 设置 String 键值
    def set(self, key, value):
        self.__redis.set(key, value)

用户登录业务过程如下:

  1. 输入用户名、密码

  2. 密码加密

  3. 判断 Redis 中是否记录了用户名,如果有则成功

  4. 如果 Redis 中没有用户名,则到 Mysql 中查询

  5. 从 Mysql 中查询成功后,将用户名记录到 Redis 中

from t2 import RedisTool
from t3 import MysqlTool
import hashlib

name=input("请输入用户名:")
pwd=input("请输入密码:")

# 密码加密
sha1=hashlib.sha1()
sha1.update(pwd)
pwd1=sha1.hexdigest()

# 判断 Redis 中是否存在该用户信息的缓存数据
try:
    redis=RedisTool()
    if redis.get('uname') == name:
        print('ok')
    # 不存缓存,则走数据库进行用户信息校验
    else:
        mysql = MysqlTool('localhost', 3306, 'test1', 'root', 'mysql')
        upwd = mysql.get_one('select upwd from userinfos where uname=%s', [name])
        if upwd == None:
            print('用户名错误')
        elif upwd[0] == pwd1:
            redis.set('uname', name)  # 用户信息校验通过,则写入缓存
            print('登录成功')
        else:
            print("密码错误")
except Exception as e:
    print(e.message)

相关文章:

  • 算法基础: 位运算
  • 记录一次坑 | 包版本不一致产生的问题的排查过程
  • SmartX Everoute 如何通过微分段技术实现 “零信任” | 社区成长营分享回顾
  • “相信美好,即将发生”——天泽智云
  • 面试阿里技术专家岗,对答如流,这些面试题你能答出多少
  • Spring AOP与事务
  • 时序与空间结构
  • 一幅长文细学TypeScript(一)——上手
  • DM JDBC
  • hadoop2.2.0开机启动的后台服务脚本(请结合上一篇学习)
  • java基于springboot+vue的学生成绩管理系统 elementui
  • 测试与开发环境网址hosts配置
  • MogDB企业应用 之 Rust驱动
  • html css面试题
  • 密码学 | RC4算法Native层分析
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【技术性】Search知识
  • 2018一半小结一波
  • CSS 提示工具(Tooltip)
  • rc-form之最单纯情况
  • Selenium实战教程系列(二)---元素定位
  • vue-router的history模式发布配置
  • Wamp集成环境 添加PHP的新版本
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 老板让我十分钟上手nx-admin
  • 理清楚Vue的结构
  • 浅谈Golang中select的用法
  • 网页视频流m3u8/ts视频下载
  • 我建了一个叫Hello World的项目
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ionic入门之数据绑定显示-1
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​什么是bug?bug的源头在哪里?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (南京观海微电子)——I3C协议介绍
  • (十五)使用Nexus创建Maven私服
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Google的Objective-C编码规范
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net CHARTING图表控件下载地址
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @ModelAttribute使用详解
  • @Query中countQuery的介绍
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解