• Python 常规操作 Redis


    今日分享主题:Python 常规操作 redis 的内容

    Part1:五种数据类型

    Redis 支持5种数据类型:

    string(字符串)

    hash(哈希)

    list(列表)

    set(集合)

    zset(sorted set:有序集合)

    1.String 字符串数据类型

    String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类,即可以完全实现目前 Memcached 的功能,并且效率更高。

    还可以享受 Redis 的定时持久化,操作日志及 Replication 等功能。

    常用命令:

    get

    set

    incr

    decr

    mget

    2.Hash哈希数据类型

    Redis hash 是一个键值(key => value)对集合。

    Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

    常用命令:

    hget

    hset

    hgetall

    应用场景:

    举个实例来描述下 hash 的应用场景,比如我们要存储一个用户信息对象数据,就可以使用 Redis hash。

    3.List数据类型

    Redis list 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    常用命令:

    lpush(添加左边元素)

    rpush(添加右边元素)

    lpop(移除左边第一个元素)

    rpop(移除右边第一个元素)

    lrange(获取列表片段,LRANGE key start stop)

    应用场景:

    Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一。

    比如 twitter 的关注列表,粉丝列表等都可以用 Redis 的 list 结构来实现。

    4.Set 数据类型

    Redis set 是 string 类型的无序集合。集合是通过 hashtable 实现的,概念和数学中的集合基本类似,可以交集,并集,差集等等,set中的元素是没有顺序的。

    常用命令:

    sadd

    spop

    smembers

    sunion

    应用场景:

    Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的。

    当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。

    5.zset 有序集合数据类型

    Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。

    zadd 命令:添加元素到集合,元素在集合中存在则更新对应score。

    常用命令:

    zadd

    zrange

    zrem

    zcard

    使用场景:

    Redis sorted set 的使用场景与 set 类似,区别是 set 不是自动有序的,而 sorted set 可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。

    Part2:代码内容

     1 import redis
     2 #使用连接池方式连接redis
     3 redis_pool=redis.ConnectionPool(host="127.0.0.1",port=6379,db=15,decode_responses=True)
     4 redis_conn=redis.Redis(connection_pool=redis_pool)
     5  
     6 #2.1 String字符串
     7 #字符串数据类型的相关命令用于管理 redis 字符串值
     8 #设置指定 key 的值
     9 redis_conn.set("name","tony")
    10 redis_conn.set("age",33)
    11 redis_conn.set('strtest','{"addr":"北京good","phone":13300000000}')
    12 #Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值
    13 redis_conn.setnx("job","computer")
    14 #获取指定 key 的值
    15 print(redis_conn.get('name'))
    16 print(redis_conn.get('age'))
    17 print(redis_conn.get('strtest'))
    18 #Incr 命令将 key 中储存的数字值增一
    19 # 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
    20 # 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
    21 print(redis_conn.incr("age"))
    22 # Decr 命令将 key 中储存的数字值减一
    23 # 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作
    24 # 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
    25 print(redis_conn.decr("age"))
    26 print(redis_conn.get("job"))
    27 #Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误
    28 print(redis_conn.strlen("strtest"))
    29 print("*"*10)
     1 #2.2 Hash哈希
     2 #hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
     3 #Hmget 命令用于返回哈希表中,一个或多个给定字段的值
     4 redis_conn.hset('myhash','f1','v1')
     5 redis_conn.hset('myhash','f2','v2')
     6 #Hget 命令用于返回哈希表中指定字段的值,如果给定的字段或 key 不存在时,返回 None
     7 print(redis_conn.hget("myhash","testhash"))
     8 print(redis_conn.hmget('myhash','f1','f2'))
     9 #Hgetall 命令用于返回哈希表中,所有的字段和值
    10 redis_conn.hset("hashstrtest","student2",'idcard:123456,sex:man,age:33')
    11 print(redis_conn.hgetall("hashstrtest"))
    12 # Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中
    13 redis_conn.hmset('hashjsontest', {'student3': '{"perform": "game","num":123456789}'})
    14 redis_conn.hmset('jsontest',{"id":1,"name":"张三丰","birth":"2000-07-07","age":17,"clazz":"一年1班","createTm":1504856483000})
    15 print(redis_conn.hgetall("hashjsontest"))
    16 print(redis_conn.hgetall("jsontest"))
    17 #获取所有哈希表中的字段
    18 print(redis_conn.hkeys("jsontest"))
    19 #Hvals 命令返回哈希表所有的值
    20 print(redis_conn.hvals("jsontest"))
    21 #获取哈希表中字段的数量
    22 print(redis_conn.hlen("jsontest"))
    23 print("*"*20)
     1 #2.3 List列表
     2 # 是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边
     3 # 将一个或多个值插入到列表头部
     4 redis_conn.lpush("teachkey","redis")
     5 redis_conn.lpush("teachkey","mysql")
     6 redis_conn.lpush("teachkey","mongodb")
     7 redis_conn.lpush("teachkey","mq")
     8 redis_conn.lpush("teachkey","job")
     9 #获取列表指定范围内的元素
    10 print(redis_conn.lrange('teachkey',1,10))
    11 #Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
    12 #列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回None
    13 print(redis_conn.lindex("teachkey",-1))
    14 #获取列表长度
    15 print(redis_conn.llen("teachkey"))
    16 #移出并获取列表的第一个元素
    17 print(redis_conn.lpop("teachkey"))
    18 #将一个或多个值插入到列表头部
    19 print(redis_conn.lpush("teachkey","goodjob"))
    20 print(redis_conn.lrange('teachkey',1,10))
    21 print("*"*30)
     1 #2.4 Set集合
     2 #Set是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
     3 #向集合添加一个或多个成员
     4 redis_conn.sadd('lovekey','booking')
     5 redis_conn.sadd('lovekey','booking')
     6 redis_conn.sadd('lovekey','eating')
     7 redis_conn.sadd('lovekey','runing')
     8 redis_conn.sadd('lovekey','jumping','fishing')
     9  
    10 redis_conn.sadd("dokey","working","thinking","runing","doing","fishing")
    11  
    12 #Scard 命令返回集合中元素的数量,当集合 key 不存在时,返回 0
    13 print(redis_conn.scard("lovekey"))
    14 #Sdiff 命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集
    15 print(redis_conn.sdiff("lovekey","dokey"))
    16 #Sinter 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集
    17 print(redis_conn.sinter("lovekey","dokey"))
    18 #Sismember 命令判断成员元素是否是集合的成员
    19 print(redis_conn.sismember("lovekey","eating"))
    20 #Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合
    21 print(redis_conn.smembers("dokey"))
    22 #Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素
    23 print(redis_conn.spop("dokey",2))
    24 #Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略,被成功移除的元素的数量,不包括被忽略的元素
    25 print(redis_conn.srem("dokey","ok","isok","doing"))
    26 #Sunion 命令返回给定集合的并集。不存在的集合 key 被视为空集
    27 print(redis_conn.sunion("dokey","lovekey"))
    28 #Sunionstore 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖,结果集中的元素数量
    29 print(redis_conn.sunionstore("destkey","dokey","lovekey"))
    30 print("*"*40)
     1 #2.5  sorted set有序集合
     2 # 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员
     3 # 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序
     4 # 有序集合的成员是唯一的,但分数(score)却可以重复
     5 dict1=dict(lenovo=1)
     6 redis_conn.zadd('computerkey',dict1)
     7 dict2=dict(dell=2)
     8 dict3=dict(asus=2)
     9 redis_conn.zadd('computerkey',dict2)
    10 redis_conn.zadd('computerkey',dict3)
    11 dict4=dict(asustest=4,goodjob=3)
    12 redis_conn.zadd('computerkey',dict4)
    13 #通过索引区间返回有序集合指定区间内的成员
    14 print(redis_conn.zrange('computerkey',0,10))
    15 #Zcard 命令用于计算集合中元素的数量
    16 print(redis_conn.zcard("computerkey"))
    17 #Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil
    18 print(redis_conn.zscore("computerkey","dell"))
    19 #Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列
    20 print(redis_conn.zrank("computerkey","goodjob"))
    21 # Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误, 当key存在时,返回被成功移除的成员的数量,不包括被忽略的成员
    22 print(redis_conn.zrem("computerkey","goodjob"))

    Part3:控制台输出内容
    tony

    33

    {"addr":"北京good","phone":13300000000}

    34

    33

    computer

    41

    None

    ['v1', 'v2']

    {'student2': 'idcard:123456,sex:man,age:33'}

    {'student3': '{"perform": "game","num":123456789}'}

    {'id': '1', 'name': '张三丰', 'birth': '2000-07-07', 'age': '17', 'clazz': '一年1班', 'createTm': '1504856483000'}

    ['id', 'name', 'birth', 'age', 'clazz', 'createTm']

    ['1', '张三丰', '2000-07-07', '17', '一年1班', '1504856483000']

    6

    ['mq', 'mongodb', 'mysql', 'redis']

    redis

    5

    job

    5

    ['mq', 'mongodb', 'mysql', 'redis']

    5

    {'eating', 'booking', 'jumping'}

    {'fishing', 'runing'}

    True

    {'fishing', 'runing', 'doing', 'thinking', 'working'}

    ['thinking', 'working']

    1

    {'jumping', 'fishing', 'runing', 'booking', 'eating'}

    5

    ['lenovo', 'asus', 'dell', 'goodjob', 'asustest']

    5

    2.0

    3

    1

    欢迎关注【无量测试之道】公众号,回复【领取资源】

    Python+Unittest框架API自动化、

    Python+Unittest框架API自动化、

    Python+Pytest框架API自动化、

    Python+Pandas+Pyecharts大数据分析、

    Python+Selenium框架Web的UI自动化、

    Python+Appium框架APP的UI自动化、

    Python编程学习资源干货、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。

    包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。

    微信搜索公众号:“无量测试之道”,或扫描下方二维码:

    添加关注,让我们一起共同成长!

  • 相关阅读:
    RabbitMQ介绍
    idea根据Ctrl和滑轮改变字体大小
    com.fasterxml.jackson.databind.exc.InvalidDefinitionException
    Git出现Push rejected: Push to origin/master was rejected
    java单机操作redis3.2.10和集群操作增删改查
    java操作hbase1.3.1的增删改查
    Gobblin采集kafka数据
    使用连接池和缓存机制,处理连接数据库操作
    用cmd导入oracle的.dmp文件和修改oracle管理员密码
    oracle to_date函数和mysql DATE_FORMAT函数用法
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15775131.html
Copyright © 2020-2023  润新知