Redis自学笔记:5.实践
第5章实践
5.3 python与redis
5.3.1安装
pip install redis
5.3.2使用方法
- 自己补充内容:Ubuntu下redis开启远程连接
- 打开redis配置:sudo vi /etc/redis/redis.conf
- 注释掉"bind 127.0.0.1",或者修改为"bind 0.0.0.0"
- 重启redis服务:sudo /etc/init.d/redis-server restart
import redis
r = redis.StrictRedis('176.216.1.139',6379,0)
r.set('foo','Hello Python')
print(r.get('foo'))
其他教程
博客地址:http://www.cnblogs.com/cnkai/p/7642787.html
博客地址:https://www.cnblogs.com/clover-siyecao/p/5600078.html
key操作
exists(name)
判断一个key是否存在,返回值1或0In [1]: import redis
In [2]: r = redis.StrictRedis('176.216.1.139',6379,0)
In [3]: r.exists('book')
Out[3]: 1
In [4]: r.exists('bok')
Out[4]: 0
delete(name)
删除一个key,返回值1或0In [5]: r.delete('dict')
Out[5]: 1
In [6]: r.delete('dict')
Out[6]: 0
type(name)
判断key类型In [7]: r.type('book')
Out[7]: b'list'
keys(pattern)
获取所有符合规则的key,以列表形式返回库内所有的key.In [8]: r.keys()
Out[8]:
[b'book:Sanguo',
b'book.view',
b'bok:Sanguo',
b'book:Python',
b'bok:Python',
b'bok:Tangshi',
b'foo',
b'book',
b'book:Tangshi'] In [9]: r.keys('book:*')
Out[9]: [b'book:Sanguo', b'book:Python', b'book:Tangshi']
randomkey()
随机获取一个keyIn [10]: r.randomkey()
Out[10]: b'book:Sanguo'
In [11]: r.randomkey()
Out[11]: b'bok:Tangshi'
rename(src, dst)
将key重命名,修改成功返回True.In [15]: r.rename('dict','dictt')
Out[15]: True
dbsize()
获取当前数据库可以的数目In [23]: r.dbsize()
Out[23]: 10
expire(name, time)
设定key的过程时间,单位是秒,设置成功返回TrueIn [27]: r.expire('dictt',300)
Out[27]: True
ttl(name)
获取key的过程时间,单位秒.-2表示该键不存在,-1表示未设置过期时间In [28]: r.ttl('dictt')
Out[28]: 247
In [29]: r.ttl('dict')
Out[29]: -2
In [30]: r.ttl('book')
Out[30]: -1
move(name, db)
将key移动到其他数据库,成功返回TrueIn [31]: r.move('dictt',1)
Out[31]: False
In [32]: r.move('foo',1)
Out[32]: True
flushdb()
删除删除当前选择数据库中的所有key,成功返回Trueflushall()
删除所有数据库中的所有key,成功返回True
String操作
set(name, value)
给key赋值为value或者创建key赋值为valueIn [33]: r.set('foo','春江潮水连海平')
Out[33]: True
get(name)
返回数据库中key为name的string的valueIn [35]: r.get('foo')
Out[35]: b'\xe6\x98\xa5\xe6\xb1\x9f\xe6\xbd\xae\xe6
\xb0\xb4\xe8\xbf\x9e\xe6\xb5\xb7\xe5\xb9\xb3'
In [36]: r.get('foo').decode()
Out[36]: '春江潮水连海平
getset(name, value)
给数据库中key为name的string赋予值value并返回上次的valueIn [39]: r.getset('foo','海上明月共潮生').decode()
Out[39]: '春江潮水连海平'
In [40]: r.get('foo').decode()
Out[40]: '海上明月共潮生'
mget(keys, *args)
以列表形式返回多个key对应的valueIn [41]: r.set('bar','滟滟随波千万里')
Out[41]: True
In [42]: r.mget('foo','bar')
Out[42]:
[b'\xe6\xb5\xb7\xe4\xb8\x8a\xe6\x98\x8e\xe6\x9c\x88
\xe5\x85\xb1\xe6\xbd\xae\xe7\x94\x9f',
b'\xe6\xbb\x9f\xe6\xbb\x9f\xe9\x9a\x8f\xe6\xb3\xa2
\xe5\x8d\x83\xe4\xb8\x87\xe9\x87\x8c']
setnx(name, value)
如果key不存在才设置valueIn [44]: r.setnx('foo','何处春江无月明')
Out[44]: False
setrange(name, offset, value)
设置指定key的value值的子字符串In [60]: r.set('fred','book')
Out[60]: True
In [61]: r.setrange('fred',4,'Sanguo')
Out[61]: 10
mset(mapping)
批量赋值In [45]: r.mset({'foo':'good','bar':'book','baz':'look'})
Out[45]: True
msetnx(mapping)
key均不存在时才批量赋值incr(name, amount=1)
key为name的value增值操作,默认1,key不存在则被创建并设为amountdecr(name, amount=1)
key为name的value减值操作,默认1,key不存在则被创建并设置为-amountIn [48]: r.incr('count',100)
Out[48]: 100
n [52]: r.incr('count')
Out[52]: 101
In [53]: r.incr('count')
Out[53]: 102
append(key, value)
key为name的string的值附加valueIn [57]: r.set('foo','0123')
Out[57]: True
In [58]: r.append('foo','456')
Out[58]: 7
substr(name, start, end=-1)
返回key为name的string的value的子串In [65]: r.substr('foo',0,-1)
Out[65]: b'0123456'
getrange(key, start, end)
获取key的value值从start到end的子字符串In [63]: r.getrange('fred',0,-1)
Out[63]: b'bookSanguo'
List操作
rpush(name, *values)
在key为name的list尾添加值为value的元素,可以传多个In [66]: r.rpush('lst',0,1,2,3)
Out[66]: 4
lpush(name, *values)
在key为name的list头添加值为value的元素,可以传多个In [67]: r.lpush('lst',-2,-1)
Out[67]: 6
llen(name)
返回key为name的list的长度In [68]: r.llen('lst')
Out[68]: 6
lrange(name, start, end)
返回key为name的list中start至end之间的元素In [69]: r.lrange('lst',0,-1)
Out[69]: [b'-1', b'-2', b'0', b'1', b'2', b'3']
ltrim(name, start, end)
截取key为name的list,保留索引为start到end的内容In [70]: r.ltrim('lst',3,-1)
Out[70]: True
lindex(name, index)
返回key为name的list中index位置的元素In [72]: r.lindex('lst',-1)
Out[72]: b'3'
lset(name, index, value)
给key为name的list中index位置的元素赋值,越界则报错In [73]: r.lset('lst',0,0)
Out[73]: True
lrem(name, count, value)
删除count个key的list中值为value的元素In [74]: r.lrem('lst',1,3)
Out[74]: 1
lpop(name)
返回并删除key为name的list中的首元素In [75]: r.lpop('lst')
Out[75]: b'0'
rpop(name)
返回并删除key为name的list中的尾元素In [76]: r.rpop('lst')
Out[76]: b'2'
blpop(keys, timeout=0)
返回并删除名称为在keys中的list中的首元素,如果list为空,
则会一直阻塞等待brpop(keys, timeout=0)
返回并删除key为name的list中的尾元素,如果list为空,
则会一直阻塞等待rpoplpush(src, dst)
返回并删除名称为src的list的尾元素,并将该元素添加到名称
为dst的list的头部In [82]: r.rpoplpush('lst','book')
Out[82]: b'1'
In [83]: r.lrange('book',0,-1)
Out[83]: [b'1', b'Python', b'Tangshi', b'Sanguo']
Set操作
sadd(name, *values)
向key为name的set中添加元素In [84]: r.sadd('set',0,1,2,10,520,1314)
Out[84]: 6
srem(name, *values)
从key为name的set中删除元素In [88]: r.srem('set',0)
Out[88]: 1
spop(name)
随机返回并删除key为name的set中一个元素In [89]: r.spop('set')
Out[89]: b'1314'
smove(src, dst, value)
从src对应的set中移除元素并添加到dst对应的set中In [90]: r.smove('set','gather',1)
Out[90]: True
scard(name)
返回key为name的set的元素个数In [91]: r.scard('gather')
Out[91]: 1
sismember(name, value)
测试member是否是key为name的set的元素In [92]: r.sismember('set',1314)
Out[92]: False
sinter(keys, *args)
返回所有给定key的set的交集In [93]: r.sadd('gather',2,520,1314)
Out[93]: 3
In [94]: r.sinter('set','gather')
Out[94]: {b'2', b'520'}
sinterstore(dest, keys, *args)
求交集并将交集保存到dest的集合In [95]: r.sinterstore('collection','set','gather')
Out[95]: 2
sunion(keys, *args)
返回所有给定key的set的并集sunionstore(dest, keys, *args)
求并集并将并集保存到dest的集合sdiff(keys, *args)
返回所有给定key的set的差集sdiffstore(dest, keys, *args)
求差集并将差集保存到dest的集合smembers(name)
返回key为name的set的所有元素In [96]: r.smembers('collection')
Out[96]: {b'2', b'520'}
srandmember(name)
随机返回key为name的set的一个元素,但不删除元素In [97]: r.srandmember('collection')
Out[97]: b'2'
Sorted Set操作
zadd(name, mapping)
向key为name的zset中添加元素In [9]: r.zadd('grade',{'Bob':80,'Mike':61})
Out[9]: 2
zrem(name, *values)
删除key为name的zset中的元素In [11]: r.zrem('grade','Bob')
Out[11]: 1
zincrby(name, value, amount=1)
如果在key为name的zset中已经存在元素value,则该元素的score增加amount,
否则向该集合中添加该元素,其score的值为amountIn [12]: r.zincrby('garde',9,'Mike')
Out[12]: 9.0
zrank(name, value)
返回key为name的zset中元素的排名(按score从小到大排序)即下标In [14]: r.zrank('grade','Mike')
Out[14]: 0
zrevrank(name, value)
返回key为name的zset中元素的倒数排名(按score从大到小排序)即下标In [15]: r.zrevrank('grade','Mike')
Out[15]: 1
zrevrange(name, start, end, withscores=False)
返回key为name的zset(按score从大到小排序)中的index从start到end的所有元素In [18]: r.zrevrange('grade',0,-1)
Out[18]: [b'Joy', b'Mike']
In [19]: r.zrevrange('grade',0,-1,True)
Out[19]: [(b'Joy', 100.0), (b'Mike', 61.0)]
zrangebyscore(name, min, max, start=None, num=None,withscores=False)
返回key为name的zset中score在给定区间的元素In [21]: r.zadd('grade',{'Bob':80,'Tom':59,'Alice':89})
Out[21]: 3
In [22]: r.zrangebyscore('grade',60,90,withscores=True)
Out[22]: [(b'Mike', 61.0), (b'Bob', 80.0), (b'Alice', 89.0)]
zcount(name, min, rmax)
返回key为name的zset中score在给定区间的数量In [25]: r.zcount('grade',60,90)
Out[25]: 3
zcard(name)
返回key为name的zset的元素个数In [26]: r.zcard('grade')
Out[26]: 5
zremrangebyrank(name, min, max)
删除key为name的zset中排名在给定区间的元素zremrangebyscore(name, min, max)
删除key为name的zset中score在给定区间的元素
Hash操作
hset(name, key, value)
向key为name的hash中添加映射In [27]: r.hset('car','color','red')
Out[27]: 1
hsetnx(name, key, value)
向key为name的hash中添加映射,如果映射键名不存在.In [28]: r.hsetnx('car','color','black')
Out[28]: 0
In [29]: r.hsetnx('car','price',200000)
Out[29]: 1
hget(name, key)
返回key为name的hash中field对应的valueIn [30]: r.hget('car','color')
Out[30]: b'red'
hmget(name, keys, *args)
返回key为name的hash中各个键对应的valueIn [31]: r.hmget('car',('color','price'))
Out[31]: [b'red', b'200000']
hmset(name, mapping)
向key为name的hash中批量添加映射In [33]: r.hmset('car',{'name':'BWM','origin':'Germany'})
Out[33]: True
hincrby(name, key, amount=1)
将key为name的hash中映射的value增加amountIn [38]: r.hincrby('car','price',2)
Out[38]: 200002
In [39]: r.hincrby('car','price')
Out[39]: 200003
hexists(name, key)
key为namehash中是否存在键名为key的映射In [41]: r.hexists('car','color')
Out[41]: True
hdel(name, *keys)
key为namehash中删除键名为key的映射In [42]: r.hdel('car','origin')
Out[42]: 1
hlen(name)
从key为name的hash中获取映射个数In [43]: r.hlen('car')
Out[43]: 3
hkeys(name)
从key为name的hash中获取所有映射键名In [44]: r.hkeys('car')
Out[44]: [b'color', b'price', b'name']
hvals(name)
从key为name的hash中获取所有映射键值In [45]: r.hvals('car')
Out[45]: [b'red', b'200004', b'BWM']
hgetall(name)
从key为name的hash中获取所有映射键值对In [46]: r.hgetall('car')
Out[46]: {b'color': b'red', b'name': b'BWM', b'price': b'200004'}
Redis自学笔记:5.实践的更多相关文章
- Redis自学笔记:3.6入门-有序集合类型
3.6有序集合类型 3.6.1介绍 在集合类型基础上,为集合中每个元素都关联了一个分数,故可以获得 分数最高(最低)的前N个元素,可以获得指定范围内的元素等 有序集合中每个元素不同,但它们的分数却可以 ...
- Redis自学笔记:3.5入门-集合类型
3.5集合类型 3.5.1介绍 在集合中的每个元素都是不同的,且没有顺序 表3-4集合类型和列表类型的对比 - 集合类型 列表类型 存储内容 至多232-1个字符串 至多232-1个字符串 有序性 否 ...
- Redis自学笔记:3.4入门-列表类型
3.4列表类型 3.4.1介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者 获得列表的某一片段. 优点:内部使用的是双向链表,所以向列表两端添加元素的时间复杂度为O(1 ...
- Redis自学笔记:3.3入门-散列类型
3.3散列类型 3.3.1介绍 散列类型不能嵌套其他数据类型,一个散列类型可以包含至多232-1个字段 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的数据, 而字段值则存储属性值 ...
- Redis自学笔记:3.2入门-字符串类型
3.2字符串类型 实际上redis不只是数据库,更多的公司和团队将redis用作缓存和 队列系统 3.2.1介绍 字符串类型是redis最基本的数据类型,它能存储任何形式的字符串, 包括二进制数据.你 ...
- Redis自学笔记:4.4进阶-消息通知
4.4消息通知 4.4.1任务队列 传递任务的队列.与任务队列进行交互的实体有两类,一类是生产者,一类是消费者. 生产者将需要处理的任务放入任务队列中,二消费者不断从任务队列中读入任务 信息并执行. ...
- Redis自学笔记:4.3进阶-排序
4.3排序 4.3.1有序集合的集合操作 有序集合没有zinter和zunion命令,使用其他命令实现方法: multi zinterstore tempKey ... zrange tempKey ...
- Redis自学笔记:4.2进阶-过期时间
4.2过期时间 **4.2.1命令介绍* 在redis中使用 expire 命令设置一个键的过期时间后redis会自动删除它. expire key seconds (seconds单位是秒,必须是整 ...
- Redis自学笔记:4.1进阶-事务
第4章:进阶 4.1事务 4.1.1概述 redis中的事务是一组命令的集合 事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行, 要么都不执行 事务的原理是先将一个事务的命令发送 ...
随机推荐
- 用不用lambda,这是一个问题
用不用lambda,这是一个问题 mp.weixin.qq.com Sun在2009年开启了代号为“dolphin”的工程,计划在JDK1.7中加入lambda表达式.虚拟机模块化支持.动态语言支持 ...
- JS 防抖函数和节流函数
文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...
- 洛谷P1108 低价购买题解
看到"你必须用低于你上次购买它的价格购买它",有没有想到什么?没错,又是LIS,倒过来的LIS,所以我们只要把读入的序列倒过来就可以求LIS了,第一问解决. 首先要厘清的是,对于这 ...
- javascript: Element.getBoundingClientRect() 获取元素在网页上的坐标位置
来自:https://blog.csdn.net/weixin_42895400/article/details/81811095?utm_source=blogxgwz1 Element.getBo ...
- HTML-Note
<meta>在 HTML 5 中,有一个新的 charset 属性,它使字符集的定义更加容易. charset character encoding 定义文档的字符编码. e.g. < ...
- vue---mixins的用法
相信大家都用过less.sass等预编译器.它们中也有mixins,用法也很简单,例如Less中: .box{ border:1px solid red; padding:10px; } .mixin ...
- 剑指Offer_编程题_25
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- C#设计模式(17)——观察者模式
1.观察者模式介绍 观察者模式又叫发布-订阅模式,它定义了对象间的一种一对多关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并被自动更新.观察者模式就四个角色:抽象主题,具体主题,抽象 ...
- JS的基础知识回顾
前言:JS应用在浏览器端,基于浏览器事件执行,功能十分强大,不容错过
- SpringBoot系列: 所有配置属性和官方文档
Spring Boot 通用配置参数https://docs.spring.io/spring-boot/docs/current/reference/html/common-application- ...