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/