使用Python读写Redis字符串

1、简介

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

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。磁盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

2、安装 Python 的 redis-py库

 [root@redis-120-20 ~]# pip3 install redis

3、连接

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

redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现select命令。

 # 第一种方式:普通
 importredis
 redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 0)
 # 第二种方式:连接池
 importredis
 redis_pool= redis.ConnectionPool(host='127.0.0.1', port= 6379, password= 'rds6301_paswd', db= 0)
 redis_conn= redis.Redis(connection_pool= redis_pool)

4、向字符串中写入数据

 # redis_conn.set(key,value)
 redis_conn.set('ywm', 'test1')

5、设置多个键值

 # hmset key FIELD1 VALUE1 ...FIELDN VALUEN  
 redis_conn.hmset('ywm6', {'k1':'v1', 'k2': 'v2'})

6、按字节截取字符串

 r.set('book','Mastering Redis')
 r.getrange('book',0,5)  # 结果 Master
 r.getrange('book',-5,-1)  # 结果 Redis
 r.getrange('book',0,-7)  # 结果 Mastering

7、向字符串中读取数据

 # redis_conn.get(key)
 redis_conn.get('ywm')

8、获取多个值

 # hmset key FIELD1 ...FIELDN
 redis_conn.hmget('ywm6', 'k1', 'k2')

9、设置字符串的过期时间

 # set(name, value, ex=None, px=None, nx=False, xx=False)
 ex:过期时间(秒),时间到了后redis会自动删除
 px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
 nx:如果设置为True,则只有name不存在时,当前set操作才执行
 xx:如果设置为True,则只有name存在时,当前set操作才执行
 redis_conn.set('ywm', 'test2', ex=10)

10、如果字符串的值为数字,可以自增和自减

 # redis_conn.set(key,n)
 redis_conn.set('ywm', '5')
 redis_conn.incr('ywm', '1') #自增1
 redis_conn.decr('ywm', '3') #自减3

11、向redis中添加一个字符串,key为kingname,value为现在时间

 importredis
 importdatetime
 redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 1)
 now= datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
 redis_conn.set('ywm',now)

12、按字节替换字符串指定位置的内容

 redis_conn.set('book','Mastering Redis')
 redis_conn.setrange('book',10,'MongoDB') # Redis替换后为MongoDB
 redis_conn.setrange('book',20,'2017') # 空白处被"\x00"填充

13、获取hash中键值对的个数

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hlen("dic_name")

14、获取hash中所有的key的值

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hkeys("dic_name")

15、获取hash中所有的value的值

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hvals("dic_name")

16、检查name对应的hash是否存在当前传入的key

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hexists("dic_name","a1") #输出:True

17、删除指定name对应的key所在的键值对

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hdel("dic_name","a1")

18、自增hash中key对应的值,不存在则创建key=amount(amount为整数)

 redis_conn.hincrby("demo","a",amount=2)

如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家Orchis饰品店,喜欢的小伙伴欢迎????前来下单。

扫描二维码

获取更多精彩

运维猫公众号

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

扫描二维码

添加私人微信

运维猫博主

扫码加微信

最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。

点击阅读原文  查看更多精彩内容!!!

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

运维猫(运维开发)

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值