Redis使用1
Redis使用1
一、python操作Redis
# 安装redis模块
pip3 install redis
# python 连接Redis数据库
# redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py
import redis
r = redis.Redis(host='127.0.0.1', port=6379)
r.set('key1', 'value1')
print(r.get('key1'))
django项目中使用:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "123",
}
}
}
二、Redis连接池
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
r = redis.Redis(connection_pool=pool)
三、string操作
set(name, value, ex=None, px=None, nx=False, xx=False)
"""
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
"""
conn.set('name', 'zhangsan', ex=5) #
# setnx(name, value) # 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改
conn.setnx('name1', 'zhangsan1')
# -----------------------------------------------------------------------------
# setex(name, time, value) # 参数: time,过期时间(数字秒 或 timedelta对象)
conn.setex('name2', 4, 'zhangsan2')
# -----------------------------------------------------------------------------
# psetex(name, time_ms, value) # time_ms,过期时间(数字毫秒 或 timedelta对象
conn.psetex('name3', 5000, 'zhangsan3') # time->ms
# -----------------------------------------------------------------------------
# mset(*args, **kwargs) # mget({'k1': 'v1', 'k2': 'v2'})
conn.mset({'name4': 'zhangsan4', 'name5': 'zhangsan5'}) # 字典
# -----------------------------------------------------------------------------
# get(name) # 获取值
print(conn.get('name4')) # b'zhangsan4'
# -----------------------------------------------------------------------------
# mget(keys, *args) # mget('k1', 'k2') 或 r.mget(['k3', 'k4'])
conn.mget('name1', 'name4') # [b'zhangsan1', b'zhangsan4']
# -----------------------------------------------------------------------------
# getset(name, value) # 设置新值并获取原来的值
conn.getset('name1', 'new zhangsan1') # 获取原值, 并赋新值
# -----------------------------------------------------------------------------
# getrange(key, start, end)
# 获取子序列(根据字节获取,非字符)
# 参数:
# name,Redis 的 name
# start,起始位置(字节)
# end,结束位置(字节)
# 如: "张三张三" ,0-3表示 "张"
conn.getrange('name1', 0, 4) # b'new z'
# -----------------------------------------------------------------------------
# setrange(name, offset, value)
conn.setrange('name4', 3, '1234567') # zha1234567 redis中起始位置为0
# -----------------------------------------------------------------------------
setbit(name, offset, value)
conn.setbit('name4', 3, '011111') # 根据位来修改value
"""
# 对name对应值的二进制表示的位进行操作
# 参数:
# name,redis的name
# offset,位的索引(将值变换成二进制后再进行索引)
# value,值只能是 1 或 0
# 注:如果在Redis中有一个对应: n1 = "foo",
那么字符串foo的二进制表示为:01100110 01101111 01101111
所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
那么最终二进制则变成 01100111 01101111 01101111,即:"goo"
"""
# -----------------------------------------------------------------------------
strlen(name) # 返回name对应值的字节长度(一个汉字3个字节)
# -----------------------------------------------------------------------------
incr(self, name, amount=1)
"""
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
# 参数:
# name,Redis的name
# amount,自增数(必须是整数)
# 注:同incrby
"""
# -----------------------------------------------------------------------------
incrbyfloat(self, name, amount=1.0)
"""
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
# 参数:
# name,Redis的name
# amount,自增数(浮点型)
"""
# -----------------------------------------------------------------------------
decr(self, name, amount=1)
"""
# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
# 参数:
# name,Redis的name
# amount,自减数(整数)
"""
# -----------------------------------------------------------------------------
# append(key, value)
conn.append('name4', 'new line')
"""
# 在redis name对应的值后面追加内容
# 参数:
key, redis的name
value, 要追加的字符串
"""
四、Hash操作
hset(name, key, value)
# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
# 参数:
# name,redis的name
# key,name对应的hash中的key
# value,name对应的hash中的value
# 注:
# hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)
conn.hset('name10', 'key1', 'value1')
hmset(name, mapping)
# 在name对应的hash中批量设置键值对
# 参数:
# name,redis的name
# mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
# 如:
# r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
conn.hmset('name10', {'key3': 'value3', 'key4': 'value4'})
-- hget(name,key)
# 在name对应的hash中获取根据key获取value
-- hmget(name, keys, *args)
# 在name对应的hash中获取多个key的值
# 参数:
# name,reids对应的name
# keys,要获取key集合,如:['k1', 'k2', 'k3']
# *args,要获取的key,如:k1,k2,k3
# 如:
# r.mget('xx', ['k1', 'k2'])
# 或
# print r.hmget('xx', 'k1', 'k2')
print(conn.hget('name10', 'key2')) # b'value2'
print(conn.hmget('name10', ['key1', 'key2'])) # [b'value1', b'value2']
print(conn.hmget('name10', 'key2', 'key3')) # [b'value2', b'value3']
hgetall(name)
# 获取name对应hash的所有键值
print(conn.hgetall('name10')) # {b'key4': b'value4', b'key3': b'value3', b'key2': b'value2', b'key1': b'value1'}
hlen(name)
# 获取name对应的hash中键值对的个数
print(conn.hlen('name10')) # 4
hkeys(name)
# 获取name对应的hash中所有的key的值
print(conn.hkeys('name10')) # [b'key1', b'key2', b'key4', b'key3']
hvals(name)
# 获取name对应的hash中所有的value的值
print(conn.hvals('name10')) # [b'value1', b'value2', b'value4', b'value3']
hexists(name, key)
# 检查name对应的hash是否存在当前传入的key
print(conn.hexists('name10', 'value2')) # False
hdel(name,*keys)
# 将name对应的hash中指定key的键值对删除
print(conn.hdel('name10', 'key1')) # 1
hincrby(name, key, amount=1)
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
# 参数:
# name,redis中的name
# key, hash对应的key
# amount,自增数(整数)
print(conn.hincrby('num1', 'key1', 10)) # 20
hscan(name, cursor=0, match=None, count=None)
# 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
# 参数:
# name,redis的name
# cursor,游标(基于游标分批取获取数据)
# match,匹配指定key,默认None 表示所有的key
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
# 如:
# 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
# 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
# ...
# 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕
hscan_iter(name, match=None, count=None)
# 利用yield封装hscan创建生成器,实现分批去redis中获取数据
# 参数:
# match,匹配指定key,默认None 表示所有的key
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
# 如:
# for item in r.hscan_iter('xx'):
# print item

浙公网安备 33010602011771号