原文章于此:https://www.cnblogs.com/cnkai/p/7642787.html

有个人修改与改正

Python操作Redis数据库

 

连接数据库

StrictRedis
from redis import StrictRedis

#!/usr/bin/env python
# coding: utf-8 from redis import StrictRedis
from redis import ConnectionPool # 使用默认方式1 链接到数据库
# redis = StrictRedis(host='localhost', port=6397, db=0) # 使用默认方式2 链接到数据库
# pool = ConnectionPool(host='localhost', port=6397, db=0)
# redis = StrictRedis(ConnectionPool) # 使用 url 方法1 链接到数据库
# redis = StrictRedis.from_url(url='redis://localhost:6379/1') # 使用url 方法2 链接到数据库
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 连接
"""

redis 里面具体操作

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
      将数据导入到数据库中
    • redis-dump 将数据导出 (redis-dump 工具是用ruby 写的。所以系统安装完毕ruby后,要用ruby的gem install redis-dump 来导出数据库。  redis-dump -u :passwd@127.0.0.1:6379 >test.json

redis-load 操作如下

# 使用Unix pip 方式导入数据
# cat test.json | redis-load -u :password@127.0.0.1:
# 或者这样 使用Unix 重定向操作
# redis-load -u :password@127.0.0.1:6379 < test.json

redis-dump 操作如下

安装redis-dump[root@bogon ~] yum install ruby rubygems ruby-devel   //安装rubygems 以及相关包 (redhat 系列系统,或者debian用apt等)

[root@bogon ~] gem sources -a http://gems.ruby-china.org/   //源,ruby china加入,外面的源不能访问
http://gems.ruby-china.org/ added to sources [root@bogon ~] gem install redis-dump -V
redis-dump导出数据
[root@bogon ~] telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set test //设置一个值
+OK
get test //取值
$ [root@bogon ~] redis-dump -u :passwd@127.0.0.1: >test.json

这就将数据库内容导出到 test.json 里面了

redis python 操作 Python操作Redis数据库的更多相关文章

  1. Python开发【十一章】:数据库操作Memcache、Redis

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  2. Redis数据库 : python与java操作redis

    redis 包 from redis import * 连接: r = StrictRedis(host='localhost', port='6379') 读写:r.set('key','value ...

  3. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  4. python对缓存(memcached,redis)的操作

    1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  5. Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  7. 十一天 python操作rabbitmq、redis

    1.启动rabbimq.mysql 在""运行""里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd, ...

  8. Python操作memcached及redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

随机推荐

  1. C# 反射调用私有事件

    原文:C# 反射调用私有事件 在 C# 反射调用私有事件经常会不知道如何写,本文告诉大家如何调用 假设有 A 类的代码定义了一个私有的事件 class A { private event EventH ...

  2. Vim 写 iOS App

    Vim 写 iOS App 我们都知道 Vim 和 Emacs 都是文本编辑器中的上古神器,你也许用 ctags,cscopes 配合 Vim 完成过大型 C 或者 C++ 的开发,你也许配合过其他插 ...

  3. 百度2014 Summer Party视频集锦

    博客已经迁移到reetsee.com,在百度或其他搜索引擎搜"吹水小镇"就能够了.要看原版的博客请到:blog.reetsee.com 转载请注明: 吹水小镇 | reetsee. ...

  4. yii2.0获取最后一条ID

    $r_id=Yii::$app->db->getLastInsertID();

  5. WPF Windows背景透明其中的文字保持不透明

    原文:WPF Windows背景透明其中的文字保持不透明 版权声明:本文为博主原创,未经允许不得转载.交流.源码资料加群:161154103 https://blog.csdn.net/mpegfou ...

  6. 怎样正确的理解和解决 ORA-01843:not a valid month

    今天码代码的时候遇到了这个问题,由于oracle用的比較少,所在查询了一下. 顿时傻眼,有非常多的贴子说是由于nls_date_language的问题,还要改会话级的NLS_DATE_LANGUAGE ...

  7. malloc()与calloc差异

    Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slig ...

  8. debian kill 进程等命令

    netstat -antup 查看所有进程   譬如Firefox现在僵死,无法相应请求.打开一个终端,输入: pgrep firefox 会返回数值,譬如是7198.现在输入: kill 7198 ...

  9. MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)

    最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手: ...

  10. jquery多条件选择器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...