Python 学习笔记 - Redis
Redis 和Memcached类似 也是一个开源的内存存储系统,存储格式也是通过键值对的方式。不过和memcached比起来,memcached的value只支持字符串,而redis支持字符串,列表,集合,hash等等;这些数据类型都支持push/pop,add/remove等操作,而且都是原子性的,也就是类似数据库的事物特征一样,所有的操作要么全部完成,要么全部失败,然后回滚到之前的状态。
现在来看看他的简单使用和发布订阅的功能。
服务器安装
[root@sydnagios ~]# wget http://download.redis.io/releases/redis-3.0.6.tar.gz [root@sydnagios ~]# tar xzf redis-3.0.6.tar.gz [root@sydnagios ~]# cd redis-3.0.6/ [root@sydnagios redis-3.0.6]# make
装好的界面如下,使用默认的配置文件,他的访问端口是6379
make[1]: Leaving directory `/root/redis-3.0.6/src'
[root@sydnagios redis-3.0.6]# src/redis-server
24344:C 07 Nov 10:40:21.763 # Warning: no config file specified, using the default confif
24344:M 07 Nov 10:40:21.764 * Increased maximum number of open files to 10032 (it was or._.__.-``__ ''-.__.-`` `. `_. ''-._ Redis 3.0.6 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._( ' , .-` | `, ) Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379| `-._ `._ / _.-' | PID: 24344`-._ `-._ `-./ _.-' _.-'|`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' | http://redis.io`-._ `-._`-.__.-'_.-' _.-'|`-._`-._ `-.__.-' _.-'_.-'|| `-._`-._ _.-'_.-' |`-._ `-._`-.__.-'_.-' _.-'`-._ `-.__.-' _.-'`-._ _.-'`-.__.-'
24344:M 07 Nov 10:40:21.766 # WARNING: The TCP backlog setting of 511 cannot be enforced.
24344:M 07 Nov 10:40:21.766 # Server started, Redis version 3.0.6
24344:M 07 Nov 10:40:21.766 # WARNING overcommit_memory is set to 0! Background save may.
24344:M 07 Nov 10:40:21.766 # WARNING you have Transparent Huge Pages (THP) support enab.
24344:M 07 Nov 10:40:21.766 * The server is now ready to accept connections on port 6379
然后别忘记打开防火墙端口
[root@sydnagios ~]# firewall-cmd --add-port=6379/tcp --permanent
success
[root@sydnagios ~]# systemctl restart firewalld
接下来用同一个目录下的客户端程序测试一下,成功设置和获取数据
[root@sydnagios redis-3.0.6]# src/redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379>
现在看看Python下如何调用。
首先安装redis模块
C:\WINDOWS\system32>pip install redis Collecting redisUsing cached redis-2.10.5-py2.py3-none-any.whl Installing collected packages: redis Successfully installed redis-2.10.5
第一个例子:
import redis
r=redis.Redis(host='sydnagios',port=6379)
r.set('name','John')
print(r.get('name'))
-------
b'John'
除了直接连接 也可以通过连接池连接,默认每个redis实例有自己的连接池,通过这种方式,可以多个实例共享一个连接池
import redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
print(r.get('name'))
redis和memcached比起来,因为他支持多种数据结构,因此对应的操作函数也很多,几乎是memcached的10倍
下面是一些常见的,具体的函数使用可以参考 http://www.cnblogs.com/wupeiqi/articles/5132791.html
批量设置,批量获取
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.mset(name='kevin',age=14)
print(r.mget('name','age'))
-----------
[b'kevin', b'14']
自增
import redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.incrby('age',10)
print(r.get('age'))
-------
b'24'
删除
import redis
r=redis.Redis(host='sydnagios',port=6379)
r.delete('set1')
Hash批量操作
import redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.hmset('computer',{'Macbook':20000,'Surface3':5000,'iPhone7':9000})
print(r.hmget('computer','Macbook'))
--------
[b'20000']
list操作
import redis
r=redis.Redis(host='sydnagios',port=6379)
r.lpush('list1','apple')
r.lpush('list1','pear')
print(r.llen('list1'))
print(r.lpop('list1'))
print(r.llen('list1'))
------
2
b'pear'
1
set操作,集合的元素不可以重复
import redis
r=redis.Redis(host='sydnagios',port=6379)
r.sadd('set1','orange')
r.sadd('set1','mango')
print(r.scard('set1'))
print(r.smembers('set1'))
---------
2
{b'mango', b'orange'}
管道
默认redis-py在执行一次操作请求的时候会自动连接,然后断开;我们可以通过管道,一次性传入多条操作然后执行。
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='sydnagios', port=6379)
r = redis.Redis(connection_pool=pool)
# pipe = r.pipeline(transaction=False)
pipe = r.pipeline(transaction=True)
r.set('name', 'alex')
r.set('age', 16)
pipe.execute()
因为redis的函数实在太多 这里就不一一赘述了。
现在来看一个redis的使用场景,发布和订阅。
简单的说,发布者可以对一个频道发布数据,然后凡是订阅了这个频道的人都可以收到信息。
s3.py
import redis
class RedisHelper:def __init__(self):self.__conn = redis.Redis(host='sydnagios')def publish(self, msg, chan):self.__conn.publish(chan, msg)return Truedef subscribe(self, chan):pub = self.__conn.pubsub()pub.subscribe(chan)pub.parse_response()return pub
s4.py(订阅者)
import s3
obj = s3.RedisHelper()
data = obj.subscribe('fm111.7')
print(data.parse_response())
s5.py(发布者)
import s3
obj = s3.RedisHelper()
obj.publish('alex db', 'fm111.7')
先执行订阅者的代码,进入等待状态,然后执行发布者的程序,对指定的channel发送数据‘alex db’,订阅者一方会收到以下数据
[b'message', b'fm111.7', b'alex db']
Python 学习笔记 - Redis相关推荐
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- [python教程入门学习]python学习笔记(CMD执行文件并传入参数)
本文章向大家介绍python学习笔记(CMD执行文件并传入参数),主要包括python学习笔记(CMD执行文件并传入参数)使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋 ...
- python学习笔记之编写readConfig读写配置文件
python学习笔记之编写readConfig读写配置文件_weixin_34055910的博客-CSDN博客
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记一简介及安装配置
Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...
- Python学习笔记(二):标准流与重定向
Python学习笔记(二):标准流与重定向 - SamWei - 博客园 Python学习笔记(二):标准流与重定向 Posted on 2012-02-19 22:36 SamWei 阅读(176) ...
- Redis学习笔记~Redis在windows环境下的安装
Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...
- python 学习笔记 12 -- 写一个脚本获取城市天气信息
近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...
- python基本语法语句-python学习笔记:基本语法
原标题:python学习笔记:基本语法 缩进:必须使用4个空格来表示每级缩进,支持Tab字符 if语句,经常与else, elif(相当于else if) 配合使用. for语句,迭代器,依次处理迭代 ...
- 廖Python学习笔记一
1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...
最新文章
- MySQL单表恢复方法
- Box2D教程3-刚体绑定外观
- 【Linux】安装x11vnc和xrdp,使用windows远程deepin
- 深度学习笔记(38) 非极大值抑制
- android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...
- selenium常用定位方式
- python雷达图的相似度_Python教程:matplotlib实现雷达图和柱状图
- 易语言 安装目录没有VC98linker 编译不成功 VC98linker静态连接器(迷你版),易语言VC98linker破解工具,修复静态编译。
- 计算机装系统常用单词,电脑bios中英文对照表大全,安装系统再也不怕英文了...
- 南开大学校园邮箱pop3地址
- Jmeter01 -mac下的安装
- 如何将程序打包成exe
- 基于Java毕业设计校园社团管理平台源码+系统+mysql+lw文档+部署软件
- 虚拟人乱战,技术才是王道
- js预编译 GO 和AO
- 数据分析师常用的 Linux 命令总结
- 【诗经】之《秦风·无衣》
- 基础篇:ios开发概述
- Linux 和 RTOS 有什么区别?
- 注册kaggle人机验证没有验证码
热门文章
- 手机验证码免费10条\java、C#、html....
- Jquery 强大的表单验证操作
- JMeter——JMeter如何进行汉化
- java学习class5
- HDU 2841 容斥 或 反演
- scala-协变、逆变、上界、下界
- sql语句中【模糊查询like的使用】
- memcpy函数的使用方法
- Zend_Db_Table-insert ()和zend_db_adapter::insert方法返回值不同
- 求出字符“2013-9-8”与“2013-10-1”相差的天数