文档章节

Python 学习笔记 - Redis

乐搏学院
 乐搏学院
发布于 2017/04/11 10:40
字数 1221
阅读 12
收藏 1

Redis 和Memcached类似 也是一个开源的内存存储系统,存储格式也是通过键值对的方式。不过和memcached比起来,memcached的value只支持字符串,而redis支持字符串,列表,集合,hash等等;这些数据类型都支持push/pop,add/remove等操作,而且都是原子性的,也就是类似数据库的事物特征一样,所有的操作要么全部完成,要么全部失败,然后回滚到之前的状态。

 

现在来看看他的简单使用和发布订阅的功能。

 

服务器安装

1

2

3

4

[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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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/064 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

然后别忘记打开防火墙端口

1

2

3

[root@sydnagios ~]# firewall-cmd --add-port=6379/tcp --permanent

success

[root@sydnagios ~]# systemctl restart firewalld

 

 

接下来用同一个目录下的客户端程序测试一下,成功设置和获取数据

1

2

3

4

5

6

[root@sydnagios redis-3.0.6]# src/redis-cli

127.0.0.1:6379set foo bar

OK

127.0.0.1:6379> get foo

"bar"

127.0.0.1:6379>

 

现在看看Python下如何调用。

 

首先安装redis模块

1

2

3

4

5

C:\WINDOWS\system32>pip install redis

Collecting redis

  Using cached redis-2.10.5-py2.py3-none-any.whl

Installing collected packages: redis

Successfully installed redis-2.10.5

 

第一个例子:

1

2

3

4

5

6

import redis

r=redis.Redis(host='sydnagios',port=6379)

r.set('name','John')

print(r.get('name'))

-------

b'John'

除了直接连接 也可以通过连接池连接,默认每个redis实例有自己的连接池,通过这种方式,可以多个实例共享一个连接池

1

2

3

4

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

 

批量设置,批量获取

1

2

3

4

5

6

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']

 

自增

1

2

3

4

5

6

7

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'

 

删除

1

2

3

import  redis

r=redis.Redis(host='sydnagios',port=6379)

r.delete('set1')

Hash批量操作

1

2

3

4

5

6

7

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操作

1

2

3

4

5

6

7

8

9

10

11

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操作,集合的元素不可以重复

1

2

3

4

5

6

7

8

9

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在执行一次操作请求的时候会自动连接,然后断开;我们可以通过管道,一次性传入多条操作然后执行。

1

2

3

4

5

6

7

8

9

10

# !/usr/bin/env python

# -*- coding:utf-8 -*-

import redis

pool = redis.ConnectionPool(host='sydnagios', port=6379)

= 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

1

2

3

4

5

6

7

8

9

10

11

12

import redis

class RedisHelper:

    def __init__(self):

        self.__conn = redis.Redis(host='sydnagios')

    def publish(self, msg, chan):

        self.__conn.publish(chan, msg)

        return True

    def subscribe(self, chan):

        pub = self.__conn.pubsub()

        pub.subscribe(chan)

        pub.parse_response()

        return pub

 

s4.py(订阅者)

1

2

3

4

import s3

obj = s3.RedisHelper()

data = obj.subscribe('fm111.7')

print(data.parse_response())

 

s5.py(发布者)

1

2

3

import s3

obj = s3.RedisHelper()

obj.publish('alex db''fm111.7')

 

先执行订阅者的代码,进入等待状态,然后执行发布者的程序,对指定的channel发送数据‘alex db’,订阅者一方会收到以下数据

1

[b'message', b'fm111.7', b'alex db']

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1870139

© 著作权归作者所有

共有 人打赏支持
乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
《Redis in action》读书笔记

https://www.gitbook.io/book/abcfy2/redis-in-action-reading-notes 最近在学习redis,正在看这本书,以笔记的形式记录下这本书,方便以后翻阅。 这本书介绍很不错,入门很值得参考,图文并...

Feng_Yu
2014/09/27
0
0
免费的计算机编程类中文书籍

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

justjavac
2014/08/13
2.8K
10
《 Head First 》学习笔记:观察者模式 (python实现)

病殃殃的还是来记录一下学习笔记,不然的话过几天可能就忘了,白学了。 observer mode 在java 用得很多,咱也试一下用python来实现,由于python没有接口,就只能继承一个类来用用了。 先撸一...

Jbryan
2013/06/18
0
0
免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

modernizr
2014/04/08
7.3K
24
python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson
2016/04/15
175
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
今天
6
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
6
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
10
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部