redis常用数据类型及操作
在之前的文章介绍了redis的安装,本篇一起来看看怎么用python来操作redis,并对redis支持的常用数据结构进行进一步的认识
python redis库
官方文档
安装
pip3 install redis
基本使用
import redis
db = redis.Redis('10.15.45.60') # 默认本地6379的0号库
print(db.keys('*')) # 查看所有匹配keys
db.set('test', 0b01100010) # 0x62
print(db.get('test'))
db.set(0b11, 0x63)
print(db.get(0b11))
print(db.get(3))
print(db.get('3'))
print(db.keys('*')) # 查看所有匹配keys
常用数据结构
redis key
- 键值key需要一个二进制值,可以用任何二进制序列作为key值,可以是简单字符串,也可以是个JPEG文件的二进制序列。空字符串也是有效key值
- 键值不需要太长,消耗内存,而且查找这类键值的计算成本较高,键值不宜过短,可读性较差
命令
- 帮助命令
127.0.0.1:6379 > Help 查看帮助
127.0.0.1:6379 > Help <tab> 使用tab键切换帮助
127.0.0.1:6379 > Help set 查看set命令帮助
127.0.0.1:6379 > Help @string 查看命令组帮助
- 库操作
$ redis-cli --help
$ redis-cli -n 2 # 登陆不同的库
127.0.0.1:6379 > SELECT n # 选择不同库
$ FLUSHDB # 清除当前库数据
$ FLUSHALL # 清除所有库中的数据
用python操作redis与命令行基本一致,直接
redis.Redis
类实例的函数调用即可,这里不在举例
class Redis(object):
def __init__(self, host='localhost', port=6379,
db=0, password=None, socket_timeout=None,
socket_connect_timeout=None,
socket_keepalive=None, socket_keepalive_options=None,
connection_pool=None, unix_socket_path=None,
encoding='utf-8', encoding_errors='strict',
charset=None, errors=None,
decode_responses=False, retry_on_timeout=False,
ssl=False, ssl_keyfile=None, ssl_certfile=None,
ssl_cert_reqs='required', ssl_ca_certs=None,
ssl_check_hostname=False,
max_connections=None, single_connection_client=False,
health_check_interval=0, client_name=None, username=None):
......
字符串
字符串设置
SET key value [EX seconds][PX milliseconds] [NX|XX]
设置字符串值
- EX 设置过期时间,秒,等同于 SETEX key seconds value
- PX 设置过期时间,毫秒,等同于 PSETEX key milliseconds value
- NX 键不存在,才能设置,等同于 SETNX key value
- XX 键存在时,才能设置
MSET key value [key value ...]
设置多个键的字符串值 - key存在则覆盖,key不存在则增加
MSETNX key value [key value ...]
设置多个键的字符串值 - key不存在则设置,key存在则设置失败。nx指不存在
- 该命令是原子操作
过期操作与生存时间
EXPIRE key seconds
和PEXPIRE key milliseconds
设置多少秒或者毫秒后过期
EXPIREAT key timestamp
和PEXPIREAT key milliseconds-timestamp
设置在指定Unix时间戳过期
PERSIST key
持久key,即取消过期
TTL key
和PTTL key
- key存在但没有设置TTL,返回-1
- key存在,但还在生存期内,返回剩余的秒或者毫秒
- key曾经存在,但已经消亡,返回-2(redis 2.8版本之前返回-1)
key操作
keys pattern
*
任意长度字符;?
任意一个字符;[]
字符集合,表示一个字符
TYPE key
key类型
EXISTS key
key是否存在
RENAME key newkey
、RENAMENX key newkey
键重命名
DEL key [key ...]
键删除
字符串获取
GET key
获取值
MGET key [key ...]
获取多个给定的键的值
GETSET key value
返回旧值并设置新值,如果键不存在,就创建并赋值
STRLEN key
字符串长度
字符串操作
APPEND key value
追加字符串
- 如果键存在就追加;如果不存在就等同于
SET key value
GETRANGE key start end
索引值从0开始,支持负索引,-1表示最后一个字符。范围是[start, end],start必须在end的左边,否则返回空串
SETRANGE key offset value
从指定索引处开始覆盖字符串,返回覆盖后字符串长度。key不存在会创建新的
自增和自减
INCR key
和 DECR key
步长1的增减
INCRBY key decrement
和 DECRBY key decrement
步长增减
位图bitmap
位图不是真正的数据类型,它是定义在字符串类型上,只不过把字符串按位操作
SETBIT key offset value
设置某一位上的值
- offset偏移量,从0开始
- value不写,默认是0
GETBIT key offset
获取某一位上的值
BITPOS key bit [start][end]
返回指定值0或者1在指定区间上第一次出现的位置
BITCOUNT key [start][end]
统计指定位区间上值为1的个数 - 从左向右从0开始,从右向左从-1开始
位操作
对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上
- operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
BITOP AND destkey key [key ...]
,对一个或多个 key 求位与,并将结果保存到 destkey
BITOP OR destkey key [key ...]
,对一个或多个 key 求位或,并将结果保存到 destkey
BITOP XOR destkey key [key ...]
,对一个或多个 key 求位异或,并将结果保存到 destkey
BITOP NOT destkey key
,对给定 key 求逻辑非,并将结果保存到 destkey,除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入
list列表
- 列表是基于双向链表实现,列表头尾增删快,中间增删慢
- 元素是字符串类型,元素可以重复出现
- 索引支持正索引和负索引,从左至右从0开始,从右至左从-1开始
LLEN key
返回列表元素个数
LPUSH key value [value ...]
从左边向队列中压入元素
LPUSHX key value
从左边向队列加入元素,要求key必须存在
RPUSH key value [value ...]
从右边向队列中压入数据
RPUSHX key value
要求key存在
LPOP key
从左边弹出列表中一个元素
RPOP key
从右边弹出列表中一个元素
RPOPLPUSH source destination
从源列表中右边pop一个元素,从左边加入到目标列表
LRANGE key start stop
返回列表中指定访问的元素,例如LRANGE user 0 -1
LINDEX key index
返回列表中指定索引的元素
LSET key index value
设置列表中指定索引位置的元素值,index不能超界
B:Block阻塞;L:Left 左起,或指列表;R:Right 右起;X:exist 存在
LREM key count value
从左边删除列表中与value相等的元素
-
count > 0 从左至右搜索,移除与 value 相等的元素,数量至多为 count 次
-
count < 0 从右至左搜索,移除与 value 相等的元素,数量至多为 -count次
-
count = 0 移除列表中所有value值
LTRIM key start stop
去除指定范围外的元素
LINSERT key BEFORE|AFTER lst_val value
在列表中某个存在的值(lst_val)前或后插入元素一次,key或不存在,不进行任何操作 -
阻塞
- 如果弹出的列表不存在或者为空,就会阻塞
- 如果多个客户端阻塞在同一个列表上,则先到先服务原则
BLPOP key [key ...] timeout
列表左边阻塞弹出元素。timeout是超时秒数,为0为永久阻塞。
BRPOP key [key ...] timeout
列表右边阻塞弹出元素
BRPOPLPUSH source destination timeout
从一个列表尾部阻塞弹出元素压入到另一个列表的头部
hash散列
值是由field和value组成的map键值对,field和value都是字符串类型
HSET key field value
设置单个字段。field不存在创建,存在覆盖value
HSETNX key field value
设置单个字段,要求field不存在。如果key不存在,相当于field也不存在
HMSET key field value [field value ...]
设置多个字段
HLEN key
返回字段个数
HEXISTS key field
判断字段是否存在。key或者field不存在,返回0
HGET key field
返回字段值
HMGET key field [field ...]
返回多个字段值
HGETALL key
返回所有的键值对
HKEYS key
返回所有字段名
HVALS key
返回所有值
HINCRBY key field increment
在字段对应的值上进行整数的增量计算
HINCRBYFLOAT key field increment
在字段对应的值上进行浮点数的增量计算
HDEL key field [field ...]
删除指定的字段
set集合
集合的元素是无序的、去重的,元素是字符串类型
SADD key member [member ...]
增加一个或多个元素,元素已存在将忽略
SREM key member [member ...]
移除一个或多个元素,元素不存在自动忽略
SCARD key
返回集合中元素的个数。不需要遍历。
SMEMBERS key
返回集合中的所有元素。注意,如果集合中元素过多,应当避免使用该方法
SISMEMBER key member
元素是否是在集合中
SRANDMEMBER key [count]
随机返回集合中指定个数的元素
- 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合
- 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值
- 如果 count 为 0,返回空
- 如果 count 不指定,随机返回一个元素
SPOP key
从集合中随机移除一个元素并返回该元素
SMOVE source destination member
把元素从源集合移动到目标集合 - 差集
SDIFF key [key ...]
从第一个key的集合中去除其他集合和自己的交集部分
SDIFFSTORE destination key [key ...]
将差集结果存储在目标key中 - 交集
SINTER key [key ...]
取所有集合交集部分
SINTERSTORE destination key [key ...]
将交集结果存储在目标key中 - 并集
SUNION key [key ...]
取所有集合并集
SUNIONSTORE destination key [key ...]
将并集结果存储在目标key中
sortedset有序集合
类似Set集合,有序的集合
ZADD key score member [score member ...]
增加一个或多个元素。如果元素已经存在,则使用新的score
ZCARD key
返回集合的元素个数
ZCOUNT key min max
返回指定score范围元素的个数
ZSCORE key member
显示分值
ZINCRBY key increment member
增加或减少分值。increment为负数就是减少
ZRANGE key start stop [WITHSCORES]
返回指定索引区间元素
- 如果score相同,则按照字典序lexicographical order 排列
- 默认按照score从小到大,如果需要score从大到小排列,使用ZREVRANGE
ZREVRANGE key start stop [WITHSCORES]
返回指定索引区间元素 - 如果score相同,则按照字典序lexicographical order 的 逆序 排列
- 默认按照score从大到小,如果需要score从小到大排列,使用ZRANGE
ZRANK key member
返回元素的排名(索引)
ZREVRANK key member
返回元素的逆序排名(索引)
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
返回指定分数区间的元素
ZREVRANGEBYSCORE key max min [WITHSCORES][LIMIT offset count]
降序返回指定分数区间的元素
ZREM key member [member ...]
移除一个或多个元素。元素不存在,自动忽略
ZREMRANGEBYRANK key start stop
移除指定排名范围的元素
ZREMRANGEBYSCORE key min max
移除指定分值范围的元素 - 并集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
- 交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
更多
更多常用操作请参考redis官方文档