Redis数据库是一种Key-Value数据库,它支持string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)5种数据类型。
1.string
String是Redis的基本类型,Redis的一个键对应一个string类型的值,相关命令格式如下:
set key value # 添加数据,value为string类型
get key # 根据键获取数据
例如,向Redis数据库中存入键为username、值为itcast的数据,使用get命令读取键为username的数据:
2.hash
Redis中的hash类型存储一张记录字段(field)和string类型值(value)关系的映射表,相关命令格式如下:
hmset key field1 value1 field2 value2 ... # 添加数据key
hget key field1 # 获取key的第一个字段
例如,向Redis中存入一个字段name的goods,并访问该数据的字段:
存入包含两个字段name、price的数据goods,并访问该数据的字段:
3.list
Redis中的list用于存储一组字符串,元素按顺序从list头部或尾部插入,列表元素可以重复,相关命令格式如下:
lpush key value1 value2 value3 ... # 存储数据(头部插入)
rpush key value4 ... # 尾插法添加数据
# 按从头至尾的顺序,获取索引[index1,index2]之间的数据
lrange key index1 index2
例如,向Redis中存入list类型的数据brands,代码如下:
继续添加数据:
4.set
set 是集合,它与list类似,但其中的元素无序且唯一。相关命令如下:
sadd key menber # 添加一些 string 元素到key 对应的 set 集合中,成功返回添加的数量,如果元素已经在集合中返回0,key 对应的 set 不存在返回错误。
smembers key # 获取数据
例如,向Redis中存入set类型的数据course,代码如下:
5.zset
zset是有序集合,它的元素有序,且每个元素都关联一个double类型的分数,这个分数是排序的标准,Redis会将集合中的元素按这个分数从小到大排序,命令格式如下:
zadd key score member # 添加
smembers key # 获取数据
案例分析:
项目尝试利用一种数据类型去存储购物车数据,需要存储的数据为用户ID、商品ID、商品购买数量、勾选的商品4个数据,但会遇到以下问题:
① string无法将购物车记录存储在一条记录中
② hash可以保存用户、商品、数量,但是无法保存已勾选的商品
③ list无法对重复的数据去重
④ set与zset无法标识出商品和数量的对应关系
综上所述,我们很难将这4条数据存储在一条记录中,因此考虑以用户ID作为键,将购物车的商品ID、数量、已勾选的商品作为值分开存储。