一、前言

不同程序之间实现通信的方法?

A.通过不同程序之间建立socket,实现通信。实际应用适用于使用broker,如RabbitMQ,ZeroMQ.

B.通过Json,Pickle,利用文件的写入和读取实现不同程序之间的通信,但是效率低。

C.通过在不同的程序之间加入一个中间代理程序,中间代理程序在内存中开辟一块独立的内存,程序和broker通过socket建立连接,将broker的内存通过socket共享给连接它的程序。如:memcached,redis等Key-value nosql数据库。

二、Redis介绍

1.Redis介绍

redis是业界主流的key-value nosql数据库之一。和Memcached类似,它支持存储的value类型相对更多。

支持的数据类型:字符串string,链表list,集合set,有序集合zset和哈希类型hash,这些数据类型都支持push/pop,add/remove,取交集并集和差集以及更丰富的操作。这些操作都是原子性的,从而确保两个客户同时访问redis服务器得到的是更新后的值。

支持的排序方式:redis支持各种不同方式的排序。

存储位置:与memcached一样,为了保证效率,数据都缓存在内存中。

读取速度:Redis是单线程的,通过epoll实现了高并发,异常快速,每秒可以执行大约110000设置操作,81000个/秒的读取操作。

redis与memcached的区别:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础桑实现了master-slave(主从)同步。

MultiUtility工具:Redis是一个多功能实用工具。在应用程序中,如Web应用程序会话,网站页面点击数等任何短暂的数据;缓存,消息传递队列中使用(Redis原生支持发布/订阅)。

2.Redis的API使用

redis和python之间的API使用可以分类为:

  • 连接方式
  • 连接池
  • 操作
    • String 操作
    • Hash 操作
    • List 操作
    • Set 操作
    • Sort Set 操作
  • 管道
  • 发布订阅

2.1 连接方式

Python中下载redis包,调用redis模块。

2.1.1 Redis,StrictRedis

redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

 import redis

 r = redis.Redis(host='10.211.55.4', port=6379)
r.set('foo', 'Bar')
print r.get('foo')

2.1.2 连接池

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

 import redis

 pool=redis.ConnectionPool('localhost')
r=redis.Redis(connection_pool=pool) r.set('name','zoe')
print(r.get('name'))

2.2 操作

2.2.1 字符串String操作

redis中的String在在内存中按照一个name对应一个value来存储。

set(name, value, ex=None, px=None, nx=False, xx=False)

在Redis中设置值,默认,不存在则创建,存在则修改

参数:

      ex,过期时间(秒)

     px,过期时间(毫秒)

     nx,如果设置为True,则只有name不存在时,当前set操作才执行

     xx,如果设置为True,则只有name存在时,岗前set操作才执行

 
setnx(name, value)

设置值,只有name不存在时,执行设置操作(添加)

实际上等价于 set(name,value,nx=True)

setex(name, value, time)
设置值

参数:time,过期时间(数字秒 或 timedelta对象)

 
psetex(name, time_ms, value)
设置值

参数:

   time_ms,过期时间(数字毫秒 或 timedelta对象)

 
mset(*args, **kwargs)
批量设置值
mset(k1='v1',k2='v2')

mget({'k1':'v1','k2':'v2'})

  

get(name)

获取值

mget(keys,*args)

批量获取

mget('ylr','peipei')

r.get(['ylr','peipei'])

 

getset(name,value)

设置新值并获取原来的值

getrange(key,start,end)

获取子序列(根据字节获取,非字符)

参数:

  name,Redis的name

  start,起始位置(字节)

  end,结束位置(字节)

setrange(name,offset,value)

修改字符串内容,从指定字符串索引开始向后替换(新值太长,则向后添加)

参数:

  offset,字符串的索引,字节(一个汉字三个字节)

  value,要设置的值

setbit(name, offset, value)
对name对应值得二进制表示的位进行操作
参数:
  name,Redis的name
  offset,位的索引(将值变换成二进制后再进行索引)
  value,值只能是1或0
注:
  如果在Redis中有一个对应:n1="foo",
那么字符串foo的二进制表示为:01100110 01101111 01101111,所以,如果执行setbit('n1',7,1),则就会将第7位设置为1,那么最终二进制则变成:01100111 01101111 01101111 ,即:“goo”
拓展,转换二进制表示:
  

source='foo'
for i in source:
num=ord(i)
print(bin(num).replace('b',''))

  特别地,如果source是汉字,怎么办?对于utf-8,每一个汉字占3个字节,那么“美少女战士”就有15个字节,对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制。

getbit(name, offset)
获取name对应的值的二进制表示中的某位的值(0或1)
 
bitcount(key, start=None, end=None)

获取name对应的值的二进制表示中1的个数

参数:

  key,Redis的name

  start,位起始位置

  end,位结束位置

 
strlen(name)
返回name对应值得字节长度(一个汉字3个字节)
 
incr(self, name, amount=1)

自增name对应的值,当name不存在时,则创建name=amount,否则,则自增。

参数:

  name,Redis的name

  amount,自增数(必须是整数)

注:同incrby

 
incrbyfloat(self, name, amount=1.0)
自增name对应的值,当name不存在时,则创建name=amount,否则,则自增。

参数:

  name,Redis的name

  amount,自增数(浮点数)

  

decr(self, name, amount=1)

自减name对应的值,当name不存在时,则创建name=amount,否则,则自减。

参数:

  name,Redis的name

  amount,自减数(整数)

 
append(key, value)

在redis name对应的值后面追加内容

参数:

  key,redis的name

  value,要追加的字符串

 

Redis介绍及字符串操作的更多相关文章

  1. 如何使用RedisTemplate访问Redis数据结构之字符串操作

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  2. 字符串操作 — Google Guava

    前言 Java 里字符串表示字符的不可变序列,创建后就不能更改.在我们日常的工作中,字符串的使用非常频繁,熟练的对其操作可以极大的提升我们的工作效率,今天要介绍的主角是 Google 开源的一个核心 ...

  3. Redis介绍及Jedis基础操作

    1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes ...

  4. 基于Python操作redis介绍

    (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 毕业前的最后一个学期(2016.03),龙哥结婚了.可是总有些人喜欢嘲笑别人,调侃我.当时我就理直气壮的告诉他们,等龙哥孩子 ...

  5. Redis介绍、安装部署、操作

    学习连接:http://www.runoob.com/redis/redis-tutorial.html 一.Redis介绍 Redis是NoSql的一种. NoSql,全名:Not Only Sql ...

  6. go语言之进阶篇字符串操作常用函数介绍

    下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 一.字符串操作常用函数介绍 1.Contains func Contains(s, substr st ...

  7. PHP操作redis之String(字符串)、List(列表)(一)

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key – value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  8. redis 介绍与操作

    参考连接:  https://www.cnblogs.com/wupeiqi/articles/5132791.html redis 是什么? redis是一个软件,帮助开发者对一台机器的内存进行操作 ...

  9. redis 字符串操作

    redis 字符串创建SET操作 127.0.0.1:6379> set number "10086" OK 127.0.0.1:6379> set book &quo ...

随机推荐

  1. python:<class 'numpy.ndarray'>的学习

    在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2 ...

  2. LeetCode 题解 | 面试题57 - II. 和为s的连续正数序列

    题目描述 面试题57 - II. 和为s的连续正数序列 难度简单37收藏分享切换为英文关注反馈 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内 ...

  3. MTK Android MCC(移动国家码)和 MNC(移动网络码)

    国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别一个移动用户所分配的号码. 从技术上讲,IMSI可以彻底解决国际漫游问 ...

  4. "段落"组件:<p> —— 快应用组件库H-UI

     <import name="p" src="../Common/ui/h-ui/text/c_p"></import> <te ...

  5. python3(二十) module

    # 在Python中,一个.py文件就称之为一个模块(Module) # 1.最大的好处是大大提高了代码的可维护性. # 2.可以被其他地方引用 # 3.python内置的模块和来自第三方的模块 # ...

  6. python3(二)

    # 布尔值和Java一样不做验证了 # 空值None是一个特殊的空值 # 变量 变量名必须是大小写英文.数字和_的组合,且不能用数字开头,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以 ...

  7. AJ学IOS 之CoreLocation反地理编码小Demo输入经纬度得到城市

    AJ分享,必须精品 一:效果 输入经纬度,可以得到相应的地名 二:思路 跟地里编码差不多 1.获取用户输入的经纬度 2.根据用户输入的经纬度创建CLLocation对象 3.根据CLLocation对 ...

  8. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings

    Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...

  9. Sprint1规划暨first stand up meeting

    实际上,我们关于工程分配和接口实现的讨论已经好几周了,队(shen)长(xian)大人三令五申,先把接口确定下来,数据格式很重要云云~顺便accent一下,utf-8[虽然我并不太明白为什么要这么干但 ...

  10. 9.回文数-LeetCode

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, ...