Redis 开发

1.源码安装Python环境

Python官网:https://www.python.org/

#下载Python3.6.4安装包
[root@db03 ~]# wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
#生成Python环境安装文件
[root@db03 ~]# ./configure --prefix=/usr/local/python3.6.4 --with-ssl
#编译
[root@db03 ~]# make
#安装
[root@db03 ~]# make install
#软链接python3命令
[root@db03 ~]# ln -s /usr/local/python3.6.4/bin/python3 /usr/bin/
#软链接pip3命令
[root@db03 ~]# ln -s /usr/local/python3.6.4/bin/pip3 /usr/bin/

2.安装python连接redis驱动

Python连接redis驱动网站:http://www.redis.cn/clients



打开github仓库,然后可以下载驱动器的包



也可以使用pip安装redis驱动

[root@db01 Python-3.6.4]# pip3 install redis
Collecting redis
Downloading https://files.pythonhosted.org/packages/ac/a7/cff10cc5f1180834a3ed564d148fb4329c989cbb1f2e196fc9a10fa07072/redis-3.2.1-py2.py3-none-any.whl (65kB)
100% |████████████████████████████████| 71kB 120kB/s
Installing collected packages: redis
Successfully installed redis-3.2.1
You are using pip version 9.0.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

3.Python连接单台Redis API

安装redis

#下载
[root@db01 src]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
#解压
[root@db01 src]# tar xf redis-3.2.12.tar.gz
#移动到指定目录
[root@db01 src]# mv redis-3.2.12 /application/
#做软链接
[root@db01 src]# ln -s /application/redis-3.2.12 /application/redis
#进入redis目录
[root@db01 src]# cd /application/redis
#编译
[root@db01 redis]# make
#添加环境变量
[root@db01 redis]# vim /etc/profile.d/redis.sh
export PATH="/application/redis/src:$PATH"
#创建配置文件存放目录
[root@db01 ~]# mkdir -p /data/6379
#编辑redis配置文件
[root@db01 ~]# vim /data/6379/redis.conf
port 6379
daemonize yes
pidfile /data/6379/redis.pid
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no
appendonly yes
requirepass zls
#启动redis
[root@db01 ~]# redis-server /data/6379/redis.conf
#连接redis
[root@db01 ~]# redis-cli -a zls
#设置key
127.0.0.1:6379> set name zls
OK

使用Python连接redis

#连接Python终端
[root@db01 ~]# python3
Python 3.6.4 (default, Apr 8 2019, 17:12:35)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> #导入redis模块
>>> import redis
#设置redis连接变量
>>> r = redis.StrictRedis(host='localhost', port=6379, db=0,password='zls')
#获取刚才创建的key
>>> r.get('name')
b'zls'
#创建一个key
>>> r.set('age', '18')
True
#退出Python终端
>>> quit()
#连接redis
[root@db01 ~]# redis-cli -a zls
#查看是否有刚才创建的key
127.0.0.1:6379> KEYS *
#查看age的值
127.0.0.1:6379> get age
"18"

4.Python连接Redis Sentinel API

一般在企业中,Redis是不会使用单台,大部分企业都是以集群的形式存在的,所以我们需要知道,Python如何连接Redis集群的API,当然我们讲的集群,有Sentinel和Redis Cluster。

#启动Redis多实例
[root@db01 ~]# redis-server /data/6380/redis.conf
[root@db01 ~]# redis-server /data/6381/redis.conf
[root@db01 ~]# redis-server /data/6382/redis.conf
#启动Redis Sentinel
[root@db01 ~]# redis-sentinel /data/26380/sentinel.conf &
#连接python终端
[root@db01 ~]# python3
Python 3.6.4 (default, Apr 8 2019, 17:12:35)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information. #导入Redis Sentinel模块
>>> from redis.sentinel import Sentinel
#设置连接信息变量
>>> sentinel = Sentinel([('localhost', 26380)], socket_timeout=0.1)
#获取主库,从库信息
>>> sentinel.discover_master('mymaster')
>>> sentinel.discover_slaves('mymaster')
#配置读写分离,写节点
>>> master = sentinel.master_for('mymaster', socket_timeout=0.1,password="zls")
#配置读写分离,读节点
>>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1,password="zls")
#读写分离测试key
>>> master.set('zls', 'handsome')
>>> slave.get('zls')
'handsome'

5.Python连接Redis Cluster

Redis Cluster的连接并操作(python2.7.2以上版本才支持redis cluster,我们选择的是3.6.4)

https://github.com/Grokzen/redis-py-cluster

#安装Python连接Redis Cluster驱动
[root@db01 ~]# pip3 install redis-py-cluster
Collecting redis-py-cluster
Downloading https://files.pythonhosted.org/packages/6d/02/b2458f900496d1e573ada7ffd882efe62aeee992eab1222411fe08aa5f75/redis-py-cluster-1.3.6.tar.gz
Collecting redis==2.10.6 (from redis-py-cluster)
Downloading https://files.pythonhosted.org/packages/3b/f6/7a76333cf0b9251ecf49efff635015171843d9b977e4ffcf59f9c4428052/redis-2.10.6-py2.py3-none-any.whl (64kB)
100% |████████████████████████████████| 71kB 26kB/s
Installing collected packages: redis, redis-py-cluster
Found existing installation: redis 3.2.1
Uninstalling redis-3.2.1:
Successfully uninstalled redis-3.2.1
Running setup.py install for redis-py-cluster ... done
Successfully installed redis-2.10.6 redis-py-cluster-1.3.6
You are using pip version 9.0.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
#启动Redis Cluster集群
[root@db01 ~]# redis-server /data/7000/redis.conf
[root@db01 ~]# redis-server /data/7001/redis.conf
[root@db01 ~]# redis-server /data/7002/redis.conf
[root@db01 ~]# redis-server /data/7003/redis.conf
[root@db01 ~]# redis-server /data/7004/redis.conf
[root@db01 ~]# redis-server /data/7005/redis.conf
#连接Python终端
[root@db01 ~]# python3
Python 3.6.4 (default, Apr 8 2019, 17:12:35)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
#导入Redis Cluster模块
>>> from rediscluster import StrictRedisCluster
#设置登录redis集群变量
>>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]
#设置连接变量
>>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
#测试设置key
>>> rc.set("foo", "bar")
True
#查询key
>>> print(rc.get("foo"))
bar

6.Redis缓存故障概念

缓存穿透

概念:

访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

解决方案:

采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;

访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。

缓存雪崩

概念:

大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

解决方案:

可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。

缓存击穿

概念:

一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。

解决方案:

在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。

第八章· Redis API 开发的更多相关文章

  1. Redis多API开发实践

    一.Redis API支持 Redis提供了各类开发语言的API,方便开发语言连接使用Redis. https://redis.io/clients 官方网站提供了不同开发语言的API程序. Pyth ...

  2. Redis多API开发

    目录 Redis API支持 redis-py安装方式 Python 连接redis 直接连接 使用连接池连接 Windows 连接redis数据库 一.下载Redis Desktop Manager ...

  3. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

  4. 循序渐进学.Net Core Web Api开发系列【12】:缓存

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...

  5. FusionInsight大数据开发---Redis应用开发

    Redis应用开发 要求: 了解Redis应用场景 掌握Redis二次开发环境搭建 掌握Redis业务开发 Redis简介 Redis是一个基于网络的,高性能key-value内存数据库 Redis根 ...

  6. 第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南

    欢迎查看第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南,该处理器可为开发人员和最终用户提供领先的 CPU 和图形性能增强.各种新特性和功能以及显著提高的性能. 本指南旨在帮助软件开发人员 ...

  7. 天气预报API开发

    天气预报API开发 一.        寻觅篇 最近想要跟着视频练习一下利用API开发一个天气预报系统,就在网上找了一下可以用的API,结果好多都已经失效了... 1.       百度车联网天气预报 ...

  8. NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介

    一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些第三方的开源类库.目前最流行的就是Se ...

  9. 高性能PHP框架thinkphp5.0.0 Beta发布-为API开发而设计

    ThinkPHP V5.——为API开发而设计的高性能框架 ThinkPHP5..0版本是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载 ...

随机推荐

  1. Heartbeat实现web服务器高可用

    一.Heartbeat概述: Heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报 ...

  2. Docker知识点总结

    一. docker介绍: 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不 ...

  3. 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题

    参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...

  4. Fabric Raft机制理解

    为了不被无缘无故甩锅锅,这个我要好好理解下.

  5. PHP读取TXT中文乱码的解决方法

    //$fname文件名称 if ($fname = $_FILES['nickname']['tmp_name']) { //file_get_contents() 函数把整个文件读入一个字符串中. ...

  6. Spring之一:IoC容器体系结构

    温故而知心. Spring IoC概述 常说spring的控制反转(依赖反转),看看维基百科的解释: 如果合作对象的引用或依赖关系的管理要由具体对象来完成,会导致代码的高度耦合和可测试性降低,这对复杂 ...

  7. VIM 介绍

    gedit  a.txt  是一个图形界面的文本编辑器.  需要安装图形界面才会有. nano a.txt  也是一样的 vi  是一种文本界面的编辑器. vim  是 vimsual interfa ...

  8. 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠

    LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...

  9. Java实现循环队列

    一.分析 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.允许插入的一端称为队尾,允许删除的一端称为队头. 循环队列是一种以顺序存储结构表示的队列,为了解决“假溢出”问题而 ...

  10. ARST第二周打卡

    Algorithm : 做一个 leetcode 的算法题 题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数.如何找出这个缺失的整数? int FindOneMissNum ...