python 操作redis 各种类型的数据
1 # encoding:utf-8 2 import redis 3 import time 4 5 6 def main(): 7 """ 8 redis-cli -h 127.0.0.1 -a test321 9 """ 10 redis_host = "127.0.0.1" 11 redis_password = "test321" 12 redis_cli = redis.StrictRedis(host=redis_host, password=redis_password) 13 try: 14 key = "TEST_KEY_1484" 15 # string 16 print redis_cli.delete(key) 17 print redis_cli.set(key, "hello") 18 print redis_cli.get(key) 19 print redis_cli.append(key, "world") 20 print redis_cli.get(key) 21 print redis_cli.strlen(key) 22 # timeout 23 print redis_cli.delete(key) 24 print redis_cli.setex(key, 10, "hello") 25 print redis_cli.get(key) 26 print redis_cli.ttl(key) 27 # time.sleep(10) 28 print redis_cli.get(key) 29 # not set 30 print redis_cli.delete(key) 31 print redis_cli.setnx(key, "hello") # 设置key为hello 32 print redis_cli.setnx(key, "world") # 设置key为world,key已经有值,设置失败 33 print redis_cli.get(key) # 只能得到第一次设置的值 34 print redis_cli.setrange(key, 20, "111111") # 从20位置开始替换,若索引值超过原值长度,则补0 35 print redis_cli.getrange(key, 1, -1) # 获取1到-1(最后)的子串 36 print redis_cli.mset({"key1":1, "key2":2, "key3":3}) 37 print redis_cli.mget("key1", "key2", "key3") 38 print redis_cli.msetnx({"key3":7, "key4":8, "key5":9}) # 已经有值的key会设置失败,从而导致整次设置失败 39 print redis_cli.mget("key1", "key2", "key3", "key4", "key5") 40 41 # integer 42 print redis_cli.delete(key) 43 print redis_cli.set(key, 1) 44 print redis_cli.incr(key) # 累加1 45 print redis_cli.incr(key, 2) # 累加2 46 print redis_cli.incrby(key, 5) # 累加5 47 print redis_cli.decr(key) # 累减1 48 print redis_cli.decr(key, 3) # 累减3 49 print redis_cli.getset(key, 0) #获取旧值,并获取新值,一次原子操作 50 51 # list 52 print redis_cli.delete(key) # 删除key 53 print redis_cli.lpush(key, 1,2,3,4,5) # 从左添加元素,若key不存在添加key 54 print redis_cli.lpushx(key, 6) # 从左添加元素,返回添加后元素个数,若key不存在不做任何操作,返回0, 只能添加一个元素 55 print redis_cli.lpop(key) # 弹出left头部元素 56 print redis_cli.llen(key) # 获取链表长度 57 print redis_cli.lrange(key, 0, -1) # 取从位置0开始到位置-1(最后)结束的元素。 58 print redis_cli.lrem(key, 1, 1) # 从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。 59 print redis_cli.lrem(key, 1, 1) # 从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。 60 print redis_cli.lset(key, 1, 2) # 将左起索引值为1的元素值设置为新值2。 61 print redis_cli.lindex(key, 1) # 查看左起索引值为1的元素值 62 print redis_cli.ltrim(key, 0, 2) # 保留左起索引值0到2之间的3个元素,注意第0个和第2个元素均被保留。 63 ele1 = redis_cli.lindex(key, 1) # 获取左起索引值为1的元素值 64 print redis_cli.linsert(key, "after", ele1, 88) # 在1号元素后插入元素88 65 print redis_cli.lrange(key, 0, -1) 66 print redis_cli.linsert(key, "before", ele1, 99) # 在1号元素前插入元素99 67 print redis_cli.lrange(key, 0, -1) 68 # r 69 print redis_cli.delete(key) 70 print redis_cli.rpush(key, 1,2,3,4,5) 71 print redis_cli.lrange(key, 0, -1) 72 print redis_cli.rpushx(key, 6) 73 print redis_cli.lrange(key, 0, -1) 74 print redis_cli.rpop(key) # 从最右po出元素 75 print redis_cli.lrange(key, 0, -1) 76 newkey = key+"new" 77 print redis_cli.lpush(key, 1,1) 78 print redis_cli.rpoplpush(key, newkey) # 从key尾部po出元素到newkey头部 79 print redis_cli.lrange(key, 0, -1) 80 print redis_cli.lrange(newkey, 0, -1) 81 82 # set 83 print redis_cli.delete(key) 84 print redis_cli.sadd(key, 1,2,3,4,5) # 添加、设置成员 85 print redis_cli.smembers(key) # 获取成员 86 print redis_cli.scard(key) # 获取成员数量 87 print redis_cli.sismember(key, 4) # 判断是否包含该成员 88 print redis_cli.srandmember(key) # 随机获取一个成员,成员依然在Set中存在 89 print redis_cli.smembers(key) # 查看成员 90 print redis_cli.spop(key) # 从尾部弹出一个元素,由于是Set所以得到并不是之前插入的第一个或最后一个成员。 91 print redis_cli.smembers(key) # 查看成员 92 print redis_cli.srem(key, 1) # 删除一个成员 93 print redis_cli.smembers(key) # 查看成员 94 key1 = key+"B" 95 print redis_cli.sadd(key1, 9,8,7) 96 print redis_cli.smove(key, key1, 2) # 将2从key移到key1 97 print redis_cli.smove(key, key1, 2) # 将2从key移到key1, 由于此时key中没有2,移动失败 98 print redis_cli.smembers(key) # 查看成员 99 print redis_cli.smembers(key1) # 查看成员 100 # 与、或、非 101 key2 = key+"C" 102 print redis_cli.delete(key) 103 print redis_cli.sadd(key, 1,2,3) # 添加、设置成员 104 print redis_cli.sadd(key1, 1,4,5) # 添加、设置成员 105 print redis_cli.sadd(key2, 3,6,9) # 添加、设置成员 106 print redis_cli.sinter(key, key1, key2) # 取交集 107 interkey = key+"inter" 108 print redis_cli.sinterstore(interkey, key, key1, key2) # 取交集并存储 109 print redis_cli.delete(interkey) 110 print redis_cli.sunion(key, key1, key2) # 取并集 111 unionkey = key+"unionkey" 112 print redis_cli.sinterstore(unionkey, key, key1, key2) # 取并集并存储 113 print redis_cli.delete(unionkey) 114 print redis_cli.sdiff(key, key1, key2) # 取非,key和key1相比,再用这个结果继续和key2进行差异比较 115 notkey = key+"not" 116 print redis_cli.sdiffstore(unionkey, key, key1, key2) # 取非,并存储 117 print redis_cli.delete(notkey) 118 # Sorted-Sets和Sets类型极为相似,各种操作命令也相似 119 print redis_cli.delete(key) 120 print redis_cli.zadd(key, 1, "one", 2, "two", three=3, four=4) # 添加、设置成员 121 print redis_cli.zcard(key) # 获取成员数量 122 print redis_cli.zcount(key, 1, 2) # 获取分数满足表达式1 <= score <= 2的成员的数量 123 print redis_cli.zscan(key, match="*o*") # 查看匹配的成员 124 print redis_cli.zrange(key, 0, -1) # 查看所有成员。 125 print redis_cli.zrange(key, 0, -1, withscores=True) # WITHSCORES选项表示返回的结果中包含每个成员及其分数,否则只返回成员。 126 print redis_cli.zrank(key, "one") # 查看成员one的索引位置 127 # print redis_cli.zrem(key, "one", "two") # 删除成员one和two,返回实际删除成员的数量。 128 print redis_cli.zscore(key, "one") # 获取成员one的分数。返回值是字符串形式。 129 print redis_cli.zincrby(key, "one", 2) # 将成员one的分数增加2,并返回该成员更新后的分数。 130 print redis_cli.zincrby(key, "one", -1) # 将成员one的分数增加-1,并返回该成员更新后的分数。 131 print redis_cli.zrange(key, 0, -1, withscores=True) 132 print redis_cli.zrangebyscore(key, 1, 3, start=1, num=2, withscores=True) # 获取分数满足表达式1 <= score <= 3的成员。 133 print redis_cli.zrangebyscore(key, 1, 3, 1, 2, True) # 获取分数满足表达式1<= score<= 3的成员。从1开始取2个,同时返回分数 134 # dict 135 print redis_cli.delete(key) 136 except Exception as e: 137 print e.message 138 finally: 139 print redis_cli.delete(key) 140 return None 141 142 143 if __name__ == "__main__": 144 main()
github:https://github.com/luohuaizhi/test/blob/master/testRedisData.py