python redis操作

1、redis连接

  • redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
  • redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现select命令。

2. 安装redis

pip install redis

3. 连接redis

连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。

import redis   
sr = StrictRedis(host='192.168.4.222', port=6379, db=6, decode_responses=True)

4、redis基本命令 --  String

1. set 

set(name, value, ex=None, px=None, nx=False, xx=False)

在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,当前set操作才执行
 sr.set('age', 18)
 sr.get('age')
 sr.set('sex', 'man', ex=5)
 sr.mset(k1='v1',k2='v2')
 sr.mget('k1', 'k2')

2. 

setex(name, value, time)
设置值
参数:
time,过期时间(数字秒 或 timedelta对象)
r.setex("fruit2", "orange", 5)
print(r.get('fruit2'))  # 5秒后,取值就从orange变成None

3. 

mset(*args, **kwargs)
批量设置值
r.mset(k1="v1", k2="v2") # 这里k1 和k2 不能带引号 一次设置对个键值对
print(r.mget("k1", "k2"))   # 一次取出多个键对应的值
print(r.mget("k1"))

4.

getrange(key, start, end)
获取子序列(根据字节获取,非字符)
参数:
name,Redis 的 name
start,起始位置(字节)
end,结束位置(字节)
127.0.0.1:6379[6]> set aa wewewrwetwetwet
OK
127.0.0.1:6379[6]> getrange aa 0 -1
"wewewrwetwetwet"
127.0.0.1:6379[6]> getrange aa 0 2
"wew"

5. 

setrange(name, offset, value)
修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
参数:
offset,字符串的索引,字节(一个汉字三个字节)
value,要设置的值
127.0.0.1:6379[6]> setrange aa 3 xxxxx
(integer) 15
127.0.0.1:6379[6]> get aa
"wewxxxxxtwetwet"

6. 

strlen(name)
返回name对应值的字节长度(一个汉字3个字节)
127.0.0.1:6379[6]> strlen aa
(integer) 15

7. 

append(key, value)
在redis name对应的值后面追加内容
参数:
key, redis的name
value, 要追加的字符串
127.0.0.1:6379[6]> append aa yyyyy
(integer) 20
127.0.0.1:6379[6]> get aa
"wewxxxxxtwetwetyyyyy"

 5. redis基本命令 -- hash

1. 

hset(name, key, value)
r.hset("hash1", "k1", "v1")
r.hset("hash1", "k1", "v1")
r.hset("hash1", "k2", "v2")
print(r.hkeys("hash1")) # 取hash中所有的key
print(r.hget("hash1", "k1"))    # 单个取hash的key对应的值
print(r.hmget("hash1", "k1", "k2")) # 多个取hash的key对应的值
r.hsetnx("hash1", "k2", "v3") # 只能新建
print(r.hget("hash1", "k2"))

2. 

hmset(name, mapping)
在name对应的hash中批量设置键值对
参数:
name,redis的name
mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
r.hmset("hash2", {"k2": "v2", "k3": "v3"})

3. 

hget(name,key)
在name对应的hash中获取根据key获取value
hmget(name, keys, *args)
在name对应的hash中获取多个key的值
参数:
name,reids对应的name
print(r.hget("hash2", "k2"))  # 单个取出"hash2"的key-k2对应的value
print(r.hmget("hash2", "k2", "k3"))  # 批量取出"hash2"的key-k2 k3对应的value --方式1
print(r.hmget("hash2", ["k2", "k3"]))  # 批量取出"hash2"的key-k2 k3对应的value --方式2

4. 

hgetall(name)
获取name对应hash的所有键值
a = sr.hgetall('hash2')
print(a)
{'k2': 'v2', 'k3': 'v3'}

5. 

hlen(name)
获取name对应的hash中键值对的个数
print(sr.hlen('hash2'))

6. 

hkeys(name)
获取name对应的hash中所有的key的值
print(sr.hkeys('hash2'))
['k3', 'k2']

7. 

hvals(name)
获取name对应的hash中所有的value的值
print(sr.hvals('hash2'))
['v3', 'v2']

8. 

判断成员是否存在(类似字典的in)
hexists(name, key)
检查name对应的hash是否存在当前传入的key
print(r.hexists("hash1", "k4"))  # False 不存在
print(r.hexists("hash1", "k1"))  # True 存在

9.

删除键值对
hdel(name,*keys)
将name对应的hash中指定key的键值对删除
sr.hdel("hash2", "k2")

6 . redis基本命令 -- list

1. 

增加(类似于list的append,只是这里是从左边新增加)--没有就新建
lpush(name,values)
在name对应的list中添加元素,每个新的元素都添加到列表的最左边
r.lpush("list1", 11, 22, 33)
print(r.lrange('list1', 0, -1))
r.rpush("list2", 11, 22, 33)  # 表示从右向左操作
print(r.llen("list2"))  # 列表长度
print(r.lrange("list2", 0, 3))  # 切片取出值,范围是索引号0-3

 2. 

往已经有的name的列表的左边添加元素,没有的话无法创建
lpushx(name,value)
在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
r.lpushx("list10", 10)   # 这里list10不存在
print(r.llen("list10"))  # 0
print(r.lrange("list10", 0, -1))  # []

3. 

往已经有的name的列表的右边添加元素,没有的话无法创建
r.rpushx("list2", 99)   # 这里"foo_list1"之前已经存在,往列表最右边添加一个元素,一次只能添加一个
print(r.llen("list2"))  # 列表长度
print(r.lrange("list2", 0, -1)) # 切片取出值,范围是索引号0到-1(最后一个元素)

4.

.新增(固定索引号位置插入元素)
linsert(name, where, refvalue, value))
在name对应的列表的某一个值前或后插入一个新值
参数:
name,redis的name
where,BEFORE或AFTER
refvalue,标杆值,即:在它前后插入数据
value,要插入的数据
r.linsert("list2", "before", "11", "00")   # 往列表中左边第一个出现的元素"11"前插入元素"00"
print(r.lrange("list2", 0, -1))   # 切片取出值,范围是索引号0-最后一个元素

5. 

.修改(指定索引号进行修改)
r.lset(name, index, value)
对name对应的list中的某一个索引位置重新赋值
参数:
name,redis的name
index,list的索引位置
value,要设置的值
r.lset("list2", 0, -11)    # 把索引号是0的元素修改成-11
print(r.lrange("list2", 0, -1))

6.

删除(指定值进行删除)
r.lrem(name, value, num)
在name对应的list中删除指定的值
参数:
name,redis的name
value,要删除的值
num, num=0,删除列表中所有的指定值;
num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个
num=-2,从后向前,删除2个
r.lrem("list2", "11", 1)    # 将列表中左边第一次出现的"11"删除
print(r.lrange("list2", 0, -1))
r.lrem("list2", "99", -1)    # 将列表中右边第一次出现的"99"删除
print(r.lrange("list2", 0, -1))
r.lrem("list2", "22", 0)    # 将列表中所有的"22"删除
print(r.lrange("list2", 0, -1))

7.

删除并返回
lpop(name)
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
更多:
rpop(name) 表示从右向左操作
r.lpop("list2")    # 删除列表最左边的元素,并且返回删除的元素
print(r.lrange("list2", 0, -1))
r.rpop("list2")    # 删除列表最右边的元素,并且返回删除的元素
print(r.lrange("list2", 0, -1))

8.

取值(根据索引号取值)
lindex(name, index)
在name对应的列表中根据索引获取列表元素
print(r.lindex("list2", 0))  # 取出索引号是0的值

7. redis基本命令 -- Set

参考:https://www.jianshu.com/p/2639549bedc8

http://python.jobbole.com/87305/

 

转载于:https://www.cnblogs.com/yuqiangli0616/p/9909398.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值