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相关推荐

  1. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  2. [python教程入门学习]python学习笔记(CMD执行文件并传入参数)

    本文章向大家介绍python学习笔记(CMD执行文件并传入参数),主要包括python学习笔记(CMD执行文件并传入参数)使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋 ...

  3. python学习笔记之编写readConfig读写配置文件

    python学习笔记之编写readConfig读写配置文件_weixin_34055910的博客-CSDN博客

  4. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  5. Python学习笔记一简介及安装配置

    Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...

  6. Python学习笔记(二):标准流与重定向

    Python学习笔记(二):标准流与重定向 - SamWei - 博客园 Python学习笔记(二):标准流与重定向 Posted on 2012-02-19 22:36 SamWei 阅读(176) ...

  7. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  8. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  9. python基本语法语句-python学习笔记:基本语法

    原标题:python学习笔记:基本语法 缩进:必须使用4个空格来表示每级缩进,支持Tab字符 if语句,经常与else, elif(相当于else if) 配合使用. for语句,迭代器,依次处理迭代 ...

  10. 廖Python学习笔记一

    1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...

最新文章

  1. MySQL单表恢复方法
  2. Box2D教程3-刚体绑定外观
  3. 【Linux】安装x11vnc和xrdp,使用windows远程deepin
  4. 深度学习笔记(38) 非极大值抑制
  5. android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...
  6. selenium常用定位方式
  7. python雷达图的相似度_Python教程:matplotlib实现雷达图和柱状图
  8. 易语言 安装目录没有VC98linker 编译不成功 VC98linker静态连接器(迷你版),易语言VC98linker破解工具,修复静态编译。
  9. 计算机装系统常用单词,电脑bios中英文对照表大全,安装系统再也不怕英文了...
  10. 南开大学校园邮箱pop3地址
  11. Jmeter01 -mac下的安装
  12. 如何将程序打包成exe
  13. 基于Java毕业设计校园社团管理平台源码+系统+mysql+lw文档+部署软件
  14. 虚拟人乱战,技术才是王道
  15. js预编译 GO 和AO
  16. 数据分析师常用的 Linux 命令总结
  17. 【诗经】之《秦风·无衣》
  18. 基础篇:ios开发概述
  19. Linux 和 RTOS 有什么区别?
  20. 注册kaggle人机验证没有验证码

热门文章

  1. 手机验证码免费10条\java、C#、html....
  2. Jquery 强大的表单验证操作
  3. JMeter——JMeter如何进行汉化
  4. java学习class5
  5. HDU 2841 容斥 或 反演
  6. scala-协变、逆变、上界、下界
  7. sql语句中【模糊查询like的使用】
  8. memcpy函数的使用方法
  9. Zend_Db_Table-insert ()和zend_db_adapter::insert方法返回值不同
  10. 求出字符“2013-9-8”与“2013-10-1”相差的天数