博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-Redis
阅读量:5265 次
发布时间:2019-06-14

本文共 3764 字,大约阅读时间需要 12 分钟。

一、简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

支持的数据类型(5大数据类型)

  • string (字符串)
  • list (列表)
  • set (集合)
  • zset (sorted set --有序集合)
  • hash(哈希类型)
redis={        k1:'123',      字符串        k2:[1,2,3,4],   列表/数组        k3:{1,2,3,4}     集合        k4:{name:lqz,age:12}  字典/哈希表        k5:{('lqz',18),('egon',33)}  有序集合}# 特点:#    -可以持久化#    -单线程,单进程

二、redis安装和使用

Linux下安装

wget http://download.redis.io/releases/redis-3.0.6.tar.gztar xzf redis-3.0.6.tar.gzcd redis-3.0.6make

启动服务端

src/redis-server

启动客户端

src/redis-cliredis> set foo barOKredis> get foo"bar"

三、python安装Redis

pip3 install redis

四、python连接redis

普通连接

import redis#拿到redis的连接对象conn=redis.Redis(host='127.0.0.1',port=6379)conn.set('name','tom')  # 添加一个key-value,key='name',value='tom'name=conn.get('name')   # 取出name的值# redis中存的都是byte格式print(name)

连接池

# 首先新建一个模块conn_pool.py    import redis    POOL=redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=1000)# 使用连接池    from conn_pool import POOL    # 每次执行这句话,从池子中取一个链接    conn=redis.Redis(connection_pool=POOL)    print(conn.get('name'))        # 使用连接池# 在views中导入连接池    from conn_pool import POOL# 每次执行这句话,从池子中取一个链接    conn=redis.Redis(connection_pool=POOL)    print(conn.get('name'))    # 注意:直接在views中使用连接池则不能体现出连接池的效果,需要将连接池设为单例模式,所以新建一个模块建池

五、Redis之String (字符创) 操作

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不存在时,执行设置操作(添加),如果存在,不会修改

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('k1', 'k2')    或    r.mget(['k3', 'k4'])

getset(name, value)

设置新值并获取原来的值

getrange(key, start, end)

# 获取子序列(根据字节获取,非字符)# 参数:    # name,Redis 的 name    # start,起始位置(字节)    # end,结束位置(字节)# 如: "刘清政" ,0-3表示 "刘"

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"

getbit(name, offset)

# 获取name对应的值的二进制表示中的某位的值 (0或1)

bitcount(key, start=None, end=None)

# 获取name对应的值的二进制表示中 1 的个数# 参数:    # key,Redis的name    # start,位起始位置    # end,位结束位置

bitop(operation, dest, *keys)

# 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值 # 参数:    # operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)    # dest, 新的Redis的name    # *keys,要查找的Redis的name # 如:    bitop("AND", 'new_name', 'n1', 'n2', 'n3')    # 获取Redis中n1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中

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, 要追加的字符串

转载于:https://www.cnblogs.com/xueheng36/p/10639168.html

你可能感兴趣的文章
JMS消息
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>
转获取sql维护的表关系
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>