文章目录
python-Django-redis 数据操作
数据类型
1. 数据类型
Redis 数据库中没有表的概念,存储的数据都是 Key-Value 数据结构,每条数据都是一个键值对,Key都是字符串,具体 Value 分为 5 种数据类型:
1)string:字符串
# 结构类似于 Python 中的字符串
Key: "字符串值"
2)list:列表
# 结构类似于 Python 中的列表
Key:["元素1", "元素2", ...]
3)hash:哈希
# 结构类似于 Python 中的字典
Key: {"字段名1": "值1", "字段名2": "值2", ...}
4)set:集合
# 元素无序,且唯一
Key: ("元素1", "元素2", ...)
5)zset:有序集合
# 元素有序,且唯一
Key: ("元素1", "元素2", ...)
针对于上面的每一种 Redis 数据类型,Redis 都提供了相应的增、删、改、查的指令。
string-字符串
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是以二进制存储的,这便意味着该类型可以接受任何格式的数据,如:JPEG 图像数据 或 Json 对象描述信息等。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M。
# 设置键值,如果设置的键不存在则为添加,如果设置的键已经存在则修改
set key value
# 获取指定 key 对应的 value 值
get key
# 设置键值及过期时间,以秒为单位
setex key seconds value
# 一次设置多个 key-value 数据
mset key1 value1 key2 value2 ...
# 一次获取指定多个 key 对应的 value 值
mget key1 key2 ...
# 向指定 key 对应的 value 值后追加内容
append key value
list-列表
列表 value 中的每个元素的值都为 string,不能为其他类型,元素按照插入顺序排序。
# 从列表左侧插⼊数据
lpush key value1 value2 ...
# 从列表右侧插⼊数据
rpush key value1 value2 ...
# 在列表指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
# 获取列表里指定范围内的元素
# 命令说明:
# start、stop为元素的下标索引
# 索引从左侧开始,第⼀个元素为0
# 索引可以是负数,表示从尾部开始计数,如 -1 表示最后⼀个元素的索引
lrange key start stop
# 设置列表指定索引位置的元素值
lset key index value
# 删除列表中的指定元素
# 将列表中前 count 次出现的值为 value 的元素移除
# count > 0:从头往尾移除
# count < 0:从尾往头移除
# count = 0:移除所有
lrem key count value
hash-字典
hash⽤于存储对象数据,对象的结构为属性、值,类似 Python 中的字典结果,但值的类型只能为 string。
# 设置 hash 中单个属性和值
hset key field value
# 一次设置 hash 中多个属性和值
hmset key field1 value1 field2 value2 ...
# 获取指定 hash 键所有的属性
hkeys key
# 获取 hash 中指定单个属性的值
hget key field
# 一次获取 hash 中指定的多个属性的值
hmget key field1 field2 ...
# 获取指定 hash 键所有属性的值
hvals key
# 删除 hash 指定的属性,属性对应的值会被⼀起删除
hdel key field1 field2 ...
set-无序集合
⽆序集合数据,每个元素类型为 string,集合中的元素具有唯⼀性,对于集合没有修改操作。
# 向指定 set 集合中添加元素
sadd key member1 member2 ...
# 获取指定 set 集合中的所有元素
smembers key
# 删除 set 集合中的指定元素
srem key member1 member2 ...
zset-有序集合
# 向指定 zset 集合中添加元素
zadd key score1 member1 score2 member2 ...
# 获取 zset 集合中指定范围内的数据
# start、stop为元素的下标索引
# 索引从左侧开始,第⼀个元素为0
# 索引可以是负数,表示从尾部开始计数,如 -1 表示最后⼀个元素的索引
zrange key start stop
# 获取 zset 集合中 score 在 min 和 max 之间的元素
zrangebyscore key min max
# 获取 zset 集合中指定元素的 score
zscore key member
# 删除 zset 集合中的指定元素
zrem key member1 member2 ...
# 删除 zset 集合中 score 在 min 和 max 之间的元素
zremrangebyscore key min max
key 操作
Key 命令是针对于 Redis 中各种数据类型的 Key 进行操作的命令。
# 显示当前 Redis 数据库中有哪些 key,pattern 支持正则表达式
keys pattern
# 判断 key 是否存在,存在返回1,不存在返回0
exists key
# 查看 key 对应的 value 的类型
type key
# 删除指定 key 及其对应的 value
del key1 key2 ...
# 设置指定 key 的过期时间
# 如果没有指定过期时间则⼀直存在,直到使⽤ del 删除
expire key seconds
# 查看指定 key 的剩余有效时间
ttl key
# 清空库的键值
flushall
python 操作redis
hash
-
hincrby(key,filed,value)
根据对应的键,给对应的filed添加值,若filed不存在,则为添加,若filed存在,则为累加
# 给hash中field属性值累加一个value,如果field不存在,新建一个属性和值,例如
# 如果用户的购物车记录中已经添加过该商品,数量需要进行累加
# 如果用户的购物车记录中没有添加过该商品,设置一个新的属性和值
# hincrby(key, field, value): 给hash中field属性值累加一个value,如果field不存在,新建一个属性和值
redis_conn.hincrby(cart_key, sku_id, count) # sku_id商品的id,count商品的数量
-
hgetall(key)
以字典的形式
{ filed : value }
返回 hash 中所有的 filed 和 value
# 返回hash中所有属性和值
cart_redis = redis_conn.hgetall(cart_key) # dict
-
hset(key,filed,value)
将 hash 数据中指定的 filed 属性设置为 value
# hset(key, field, value): 将hash中指定属性field的值设置为value
pl.hset(cart_key, sku_id, count)
-
hdel(key, *fileds)
删除hash中对应的属性和值,有则删除,无则忽略
# hdel(key, *fields): 删除hash中对应的属性和值,有则删除,无则忽略
pl.hdel(cart_key, sku_id)
-
hkeys(key)
返回 hash 中所有的属性filed
# hkeys(key): 返回hash中所有属性
# [b'<sku_id>', b'<sku_id>', ...]
sku_ids = redis_conn.hkeys(cart_key) # list
-
hvals(key)
返回 hash 中所有属性的值values
# hkeys(key): 返回hash中所有属性
# [b'<sku_id>', b'<sku_id>', ...]
sku_ids = redis_conn.hvals(cart_key) # list
set
-
sadd(key, *members)
向set中添加元素,元素唯一
# 向set中添加元素,不需要关注是否重复,set中元素唯一
# sadd(key, *values): 向set中添加元素,不需要关注是否重复,set中元素唯一
redis_conn.sadd(cart_selected_key, sku_id) # sku_id商品的id
-
smembers(key)
获取set中所有的元素
# 获取set中所有元素
sku_ids = redis_conn.smembers(cart_selected_key)
srem(key,*members)
# srem(key, *members): 从set中移除元素,如果元素不存在,直接忽略
pl.srem(cart_selected_key, sku_id)
django-redis 中文官方文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/
redis-py 官方文档:https://redis-py.readthedocs.io/en/stable/