Redis安装及教程:

  redis教程

安装Python的redis接口模块

redis-py requires a running Redis server. See redis教程 for installation instructions.

To install redis-py, simply:

$ sudo pip install redis

or alternatively (you really should be using pip though):

$ sudo easy_install redis

or from source:

$ sudo python setup.py install

连接数据库

  • StrictRedis
from redis import StrictRedis

# 使用默认方式连接到数据库
redis = StrictRedis(host='localhost', port=6379, db=0) # 使用url方式连接到数据库
redis = StrictRedis.from_url('redis://@localhost:6379/1')
  • ConnectionPool
from redis import StrictRedis,ConnectionPool

# 使用默认方式连接到数据库
pool = ConnectionPool(host='localhost', port=6379, db=0)
redis = StrictRedis(connection_pool=pool) # 使用url方式连接到数据库
pool = ConnectionPool.from_url('redis://@localhost:6379/1')
redis = StrictRedis(connection_pool=pool)

构造url方式连接到数据库,有以下三种模式:

redis://[:password]@host:port/db    # TCP连接
rediss://[:password]@host:port/db # Redis TCP+SSL 连接
unix://[:password]@/path/to/socket.sock?db=db # Redis Unix Socket 连接

String操作

方法 作用 示例 示例结果
set(name, value) 给name赋值为value redis.set('name', 'Bob') True
get(name) 返回数据库中key为name的string的value redis.get('name') b'Bob'
getset(name, value) 给数据库中key为name的string赋予值value并返回上次的value redis.getset('name', 'Mike') b'Bob'
mget(keys, *args) 返回多个key对应的value redis.mget(['name', 'nickname']) [b'Mike', b'Miker']
setnx(name, value) 如果key不存在才设置value redis.setnx('newname', 'James') 第一次运行True,第二次False
setex(name, time, value) 设置可以对应的值为string类型的value,并指定此键值对应的有效期 redis.setex('name', 1, 'James') True
setrange(name, offset, value) 设置指定key的value值的子字符串 redis.set('name', 'Hello') redis.setrange('name', 6, 'World') 11,修改后的字符串长度
mset(mapping) 批量赋值 redis.mset({'name1': 'Durant', 'name2': 'James'}) True
msetnx(mapping) key均不存在时才批量赋值 redis.msetnx({'name3': 'Smith', 'name4': 'Curry'}) True
incr(name, amount=1) key为name的value增值操作,默认1,key不存在则被创建并设为amount redis.incr('age', 1) 1,即修改后的值
decr(name, amount=1) key为name的value减值操作,默认1,key不存在则被创建并设置为-amount redis.decr('age', 1) -1,即修改后的值
append(key, value) key为name的string的值附加value redis.append('nickname', 'OK') 13,即修改后的字符串长度
substr(name, start, end=-1) 返回key为name的string的value的子串 redis.substr('name', 1, 4) b'ello'
getrange(key, start, end) 获取key的value值从start到end的子字符串 redis.getrange('name', 1, 4) b'ello'

Key操作

方法 作用 示例 示例结果
exists(name) 判断一个key是否存在 redis.exists('name') True
delete(name) 删除一个key redis.delete('name') 1
type(name) 判断key类型 redis.type('name') b'string'
keys(pattern) 获取所有符合规则的key redis.keys('n*') [b'name']
randomkey() 获取随机的一个key randomkey() b'name'
rename(src, dst) 将key重命名 redis.rename('name', 'nickname') True
dbsize() 获取当前数据库中key的数目 dbsize() 100
expire(name, time) 设定key的过期时间,单位秒 redis.expire('name', 2) True
ttl(name) 获取key的过期时间,单位秒,-1为永久不过期 redis.ttl('name') -1
move(name, db) 将key移动到其他数据库 move('name', 2) True
flushdb() 删除当前选择数据库中的所有key flushdb() True
flushall() 删除所有数据库中的所有key flushall() True

List操作

方法 作用 示例 示例结果
rpush(name, *values) 在key为name的list尾添加值为value的元素,可以传多个 redis.rpush('list', 1, 2, 3) 3,list大小
lpush(name, *values) 在key为name的list头添加值为value的元素,可以传多个 redis.lpush('list', 0) 4,list大小
llen(name) 返回key为name的list的长度 redis.llen('list') 4
lrange(name, start, end) 返回key为name的list中start至end之间的元素 redis.lrange('list', 1, 3) [b'3', b'2', b'1']
ltrim(name, start, end) 截取key为name的list,保留索引为start到end的内容 ltrim('list', 1, 3) True
lindex(name, index) 返回key为name的list中index位置的元素 redis.lindex('list', 1) b'2'
lset(name, index, value) 给key为name的list中index位置的元素赋值,越界则报错 redis.lset('list', 1, 5) True
lrem(name, count, value) 删除count个key的list中值为value的元素 redis.lrem('list', 2, 3) 1,即删除的个数
lpop(name) 返回并删除key为name的list中的首元素 redis.lpop('list') b'5'
rpop(name) 返回并删除key为name的list中的尾元素 redis.rpop('list') b'2'
blpop(keys, timeout=0) 返回并删除名称为在keys中的list中的首元素,如果list为空,则会一直阻塞等待 redis.blpop('list') [b'5']
brpop(keys, timeout=0) 返回并删除key为name的list中的尾元素,如果list为空,则会一直阻塞等待 redis.brpop('list') [b'2']
rpoplpush(src, dst) 返回并删除名称为src的list的尾元素,并将该元素添加到名称为dst的list的头部 redis.rpoplpush('list', 'list2') b'2'

Set操作

方法 作用 示例 示例结果
sadd(name, *values) 向key为name的set中添加元素 redis.sadd('tags', 'Book', 'Tea', 'Coffee') 3,即插入的数据个数
srem(name, *values) 从key为name的set中删除元素 redis.srem('tags', 'Book') 1,即删除的数据个数
spop(name) 随机返回并删除key为name的set中一个元素 redis.spop('tags') b'Tea'
smove(src, dst, value) 从src对应的set中移除元素并添加到dst对应的set中 redis.smove('tags', 'tags2', 'Coffee') True
scard(name) 返回key为name的set的元素个数 redis.scard('tags') 3
sismember(name, value) 测试member是否是key为name的set的元素 redis.sismember('tags', 'Book') True
sinter(keys, *args) 返回所有给定key的set的交集 redis.sinter(['tags', 'tags2']) {b'Coffee'}
sinterstore(dest, keys, *args) 求交集并将交集保存到dest的集合 redis.sinterstore('inttag', ['tags', 'tags2']) 1
sunion(keys, *args) 返回所有给定key的set的并集 redis.sunion(['tags', 'tags2']) {b'Coffee', b'Book', b'Pen'}
sunionstore(dest, keys, *args) 求并集并将并集保存到dest的集合 redis.sunionstore('inttag', ['tags', 'tags2']) 3
sdiff(keys, *args) 返回所有给定key的set的差集 redis.sdiff(['tags', 'tags2']) {b'Book', b'Pen'}
sdiffstore(dest, keys, *args) 求差集并将差集保存到dest的集合 redis.sdiffstore('inttag', ['tags', 'tags2']) 3
smembers(name) 返回key为name的set的所有元素 redis.smembers('tags') {b'Pen', b'Book', b'Coffee'}
srandmember(name) 随机返回key为name的set的一个元素,但不删除元素 redis.srandmember('tags')  

Sorted Set操作

方法 作用 示例 示例结果
zadd(name, args, *kwargs) 向key为name的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序 redis.zadd('grade', 100, 'Bob', 98, 'Mike') 2,即添加的元素个数
zrem(name, *values) 删除key为name的zset中的元素 redis.zrem('grade', 'Mike') 1,即删除的元素个数
zincrby(name, value, amount=1) 如果在key为name的zset中已经存在元素value,则该元素的score增加amount,否则向该集合中添加该元素,其score的值为amount redis.zincrby('grade', 'Bob', -2) 98.0,即修改后的值
zrank(name, value) 返回key为name的zset中元素的排名(按score从小到大排序)即下标 redis.zrank('grade', 'Amy') 1
zrevrank(name, value) 返回key为name的zset中元素的倒数排名(按score从大到小排序)即下标 redis.zrevrank('grade', 'Amy') 2
zrevrange(name, start, end, withscores=False) 返回key为name的zset(按score从大到小排序)中的index从start到end的所有元素 redis.zrevrange('grade', 0, 3) [b'Bob', b'Mike', b'Amy', b'James']
zrangebyscore(name, min, max, start=None, num=None, withscores=False) 返回key为name的zset中score在给定区间的元素 redis.zrangebyscore('grade', 80, 95) [b'Amy', b'James']
zcount(name, min, max) 返回key为name的zset中score在给定区间的数量 redis.zcount('grade', 80, 95) 2
zcard(name) 返回key为name的zset的元素个数 redis.zcard('grade') 3
zremrangebyrank(name, min, max) 删除key为name的zset中排名在给定区间的元素 redis.zremrangebyrank('grade', 0, 0) 1,即删除的元素个数
zremrangebyscore(name, min, max) 删除key为name的zset中score在给定区间的元素 redis.zremrangebyscore('grade', 80, 90) 1,即删除的元素个数

Hash操作

方法 作用 示例 示例结果
hset(name, key, value) 向key为name的hash中添加映射 hset('price', 'cake', 5) 1,即添加的映射个数
hsetnx(name, key, value) 向key为name的hash中添加映射,如果映射键名不存在 hsetnx('price', 'book', 6) 1,即添加的映射个数
hget(name, key) 返回key为name的hash中field对应的value redis.hget('price', 'cake') 5
hmget(name, keys, *args) 返回key为name的hash中各个键对应的value redis.hmget('price', ['apple', 'orange']) [b'3', b'7']
hmset(name, mapping) 向key为name的hash中批量添加映射 redis.hmset('price', {'banana': 2, 'pear': 6}) True
hincrby(name, key, amount=1) 将key为name的hash中映射的value增加amount redis.hincrby('price', 'apple', 3) 6,修改后的值
hexists(name, key) key为namehash中是否存在键名为key的映射 redis.hexists('price', 'banana') True
hdel(name, *keys) key为namehash中删除键名为key的映射 redis.hdel('price', 'banana') True
hlen(name) 从key为name的hash中获取映射个数 redis.hlen('price') 6
hkeys(name) 从key为name的hash中获取所有映射键名 redis.hkeys('price') [b'cake', b'book', b'banana', b'pear']
hvals(name) 从key为name的hash中获取所有映射键值 redis.hvals('price') [b'5', b'6', b'2', b'6']
hgetall(name) 从key为name的hash中获取所有映射键值对 redis.hgetall('price') {b'cake': b'5', b'book': b'6', b'orange': b'7', b'pear': b'6'}

RedisDump

  • redis-load
    将数据导入到数据库中
redis-load -h   # 获取帮助信息

< redis_data.json redis-load -u redis://@localhost:6379  # 将json数据导入数据库中
  • redis-dump
    将数据库信息导出
redis-dump -h  # 获取帮助信息

redis-dump -u redis://@localhost:6379 -d 1 > ./redis.data.jl  # 导出到json文件
redis-dump -u redis://@localhost:6379 -f adsl:* > ./redis.data.jl # 导出adsl开头的数据
 
 
 

redis的Python接口调用的更多相关文章

  1. 【redis】redis实现API接口调用调用次数的限制

    redis实现API接口调用调用次数的限制 参考地址:https://bbs.csdn.net/topics/391856106?page=1 参考地址:https://www.cnblogs.com ...

  2. 十分钟搭建redis单机版 & java接口调用

    本次单机版redis服务器搭建采用的包为redis-3.0.0.tar.gz,主要是记录下安装的心得,不喜勿喷! 一.搭建redis服务器单机版 1.上传redis-3.0.0.tar.gz到服务器上 ...

  3. python接口调用把执行结果追加到测试用例中

    python操作excel的三个工具包如下,注意,只能操作.xls,不能操作.xlsx. xlrd: 对excel进行读相关操作 xlwt: 对excel进行写相关操作 xlutils: 对excel ...

  4. 咏南中间件开始支持redis client接口调用

    咏南中间件开始支持redis client接口调用 咏南中间件封装了redis client接口,可以支持REDIS了. 如下图,将数据集写入REDIS缓存,和从REDIS缓存获取数据: proced ...

  5. 【python】调用sm.ms图床api接口,实现上传图片并返回url

    图床简介 sm.ms网站提供免费的图床服务.单图上传大小限制5MB,每次最多上传10张,支持多种图片链接格式和api接口调用. 获取令牌 注册账号并登录,点击User-Dashboard 点击API ...

  6. 使用Nginx Lua实现redis高性能http接口

    使用Nginx Lua实现redis高性能http接口 时间 -- :: 峰云就她了 原文 http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http ...

  7. Redis的Python客户端redis-py说明文档(转)

    add by zhj: 对Publish / Subscribe,LUA Scripting,Sentinel support,Scan Iterators等部分没有翻译,需要的用户参见英文原文吧.另 ...

  8. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  9. caffe中python接口的使用

    下面是基于我自己的接口,我是用来分类一维数据的,可能不具通用性: (前提,你已经编译了caffe的python的接口) 添加 caffe塻块的搜索路径,当我们import caffe时,可以找到. 对 ...

随机推荐

  1. 巨蟒python全栈开发数据库前端5:JavaScript1

    1.js介绍&变量&基础数据类型 2.类型查询&运算符&if判断&for循环 3.while循环&三元运算符 4.函数 5.今日总结 1.js介绍&am ...

  2. 程序运行时 0xC0000005: 读取位置 0x00000000 时发生访问冲突 ,可能是 com 组件引入各种问题

    在使用com组件事,可能引入很多不是问题的问题,比如CString 定义出运行时出错等等,这些问题解决的办法就是初始化组件 然后释放组件, 在使用组件时,如果仅仅用在按钮事件或者别的mfc 对话框类里 ...

  3. 使用ADO如何获得SQLSERVER 2K的数据库名的列表

    打开数据库连接_ConnectionPtr m_pConn;_RecordsetPtr m_pRs;m_pConn.CreateInstance(__uuidof(Connection));m_pRs ...

  4. submit按钮修改宽高的坑

    近些天对h5非常感兴趣,边工作边学习,虽然比较累,但过得很踏实.每天都要学习一点东西,这样才能对得起自己.好了,废话不多说,进入今天的主题. 今天遇到了一个非常有趣的东西,就是在修改submit按钮的 ...

  5. scrapy 原理,结构,基本命令,item,spider,selector简述

    原理,结构,基本命令,item,spider,selector简述 原理 (1)结构 (2)运行流程 实操 (1) scrapy命令: 注意先把python安装目录的scripts文件夹添加到环境变量 ...

  6. Codeforces Round#251(Div 2)D Devu and his Brother

    --你以为你以为的.就是你以为的? --有时候还真是 题目链接:http://codeforces.com/contest/439/problem/D 题意大概就是要求第一个数组的最小值要不小于第二个 ...

  7. Mysql学习笔记—索引

    一.什么是索引 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  8. Linux的进程/线程通信方式总结(转)

    Linux系统中的进程通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通 ...

  9. Visual Studio Code 配合 Node.js 轻松实现JS断点调试

    一直喜欢vscode这个编辑器,今天看在liaoxuefeng.com学习nodejs时,看到上面 讲了使用vscode配合nodejs调试JS代码,原来这么简单,现在分享如下: 本人环境: Visu ...

  10. [Spring ] RequestParam VS PathVariable

    仔细一想,感觉没啥需要区分的呢.就是简单明确了两种url定义的背景. PathVariable这种,主要是针对restful类型的url.这种path的定义就要根据restful的规范了. 根据昨天开 ...