设置数据get/hset/hmset,获取数据hget/hmget/hgetall
- pool = redis.ConnectionPool(host='121.40.96.93', port=6379, db=0, password='123456')
- r = redis.Redis(connection_pool=pool)
- r = redis.Redis(host='127.0.0.1', port=6379, db=0)
- #插入key-value
- o = r.set(
- name="name",
- value="我是来及湖南的小明同学", # value可以是字符串,也可以是任意一个byte字节数组
- ex=60, # 设置当前加入的key ex秒后过期(删除)
- # px=10000, # 设置当前加入的key px毫秒后过期;不能和ex同时给定
- nx=False, # 当设置为True的时候,当却仅当name(key)在redis中不存在的时候,才会插入
- xx=False # 当设置为True的时候,当却仅当name(key)在redis中存在的时候,才会插入;不能和nx同时给定为True
- )
- # get就是获取String类型的key对应的value值
- o = r.get(name="name")
- # 设置key对应数据过期时间
- r.expire(name='user:1001', time=10000) # 过期秒数
- # 让hash结构的value中添加数据
- o = r.hset(name="user:1001", key="id", value="1001")
- # 建议添加数据的写法(从redis理论上来讲)
- o = r.hmset(name="user:1002", mapping={
- "id": "1002",
- "name": "小明1111",
- "age": 17,
- "sex": "男",
- "address": "上海",
- "address2": "北京"
- })
- # 一次性获取所有field的value数据 --> hgetall返回结果是一个字典,如果key不存在,那么返回字典为空{}
- o = r.hgetall(name='user:1001')
- # 针对我们需要的field可以采用(单一field),只要key(name)或者field不存在,返回就是None
- o = r.hget(name='user:1001', key='address')
- # 针对我们需要的field可以采用(多个field),返回一个list列表,如果field存在对应位置为bytes,如果field不存在,那么对应位置为None
- o = r.hmget(name='user:1002', keys=['name', 'age', 'address', 'address2'])
可以用pipeline的方法进行加速
- def t2():
- pool = redis.ConnectionPool(host='121.40.96.93', port=6379, db=0, password='123456', max_connections=100)
- with redis.Redis(connection_pool=pool) as r:
- _t1 = time.time()
- n = 10000
- _pipeline = r.pipeline()
- for i in range(n):
- _pipeline.set(name=f'l:{i}', value=i, ex=220)
- _pipeline.execute()
- print(time.time() - _t1)
