Redis学习(一)
1、指令
String类型
赋值
语法:SET key value
取值
语法:GET key
取值并赋值
语法:GETSET key value
数值增减
前提条件:
- 当value为整数数据时,才能使用以下命令操作数值的增减。
- 数值增减都是原子操作
增加指定的整数
递减同理:
仅当不存在时赋值
注:该命令可以实现分布式锁的功能,后续讲解!!!!
语法:setnx key value
向尾部追加值
注:APPEND命令,向键值的末尾追加value。如果键不存在则该键的值设置为value,即相当于set key value。返回值是追加后字符串的总长度。
获取字符串长度
注:strlen命令,返回键值的长度,如果键不存在则返回0
语法:STRLEN key
语法:
- MSET key value [key value ....]
- MGET key [key ....]
应用场景之自增主键
需求:商品编号、订单号采用INCR命令生成。
设计:key明明要有一定的设计
实现:定义商品编号key:items:id
Hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其他类型。
赋值
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
一次只能设置一个字段值
语法:HSET key field value
一次设置多个字段值
语法:HMSET key field value [field value ...]
当字段不存在时
类似HSET,区别在于如何字段存在,该命令不执行任何操作
语法:HSETNX key field value
取值
一次只能获取一个字段值
语法:HGET key field
一次可以获取多个字段值
语法:HMGET key field [field ....]
获取所有字段值
语法:HGETALL key
删除字段
可以删除一个或多个字段,返回值是被删除的字段个数
语法:HDEL key field [field ...]
增加数字
语法:HINCRBY key field increment
判断字段是否存在
语法:HEXISTS key field 存在返回1,不存在返回0
只获取字段名或字段值
语法:
- HKEYS key
- HVALS key
获取字段数量
语法:HLEN key
应用之存储商品信息
注意事项:存在哪些对象数据,特别是对象属性经常发生增删改操作的数据。
商品信息字段
【商品id,商品名称,商品描述,商品库存,商品好评】
定义商品信息的key
商品id为1001的信息在Redis中的key为:[items.1001]
List类型
ArrayList使用数组方式存储数据,所以根据索引查询数据速度快,而新增或者删除元素时需要涉及到位移操作,所以比较慢。
LinkedList使用双向链表方式存储数据,每个元素都记录前后元素的指针,所以插入、删除数据时只是更改前后元素的指针即可,
速度非常快。然后通过下标查询元素时需要从头开始索引,所以比较慢,但是如果查询前几个元素或后几个元素速度比较快。
List介绍
Redis的列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0/1,获取越接近两端的元素速度就越快。意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
向列表两端添加元素
向列表左边添加元素
可以看出这个是双向链表
从列表两端弹出元素
LPOP命令从列表左边弹出一个元素,会分两步完成:
- 将列表左边的元素从列表中移除
- 返回被移除的元素值
语法:
- LPOP key
- RPOP key
获取列表中元素的个数
语法:LLEN key
删除列表中指定个数的值
LREM命令会删除列表中前count个数为value的元素,返回实际删除的元素个数。根据count值不同,该命令的执行方式会有所不同。
语法:LREM key count value
- 当count>0时,LREM会从列表左边开始删除
- 当count<0时,LREM会从列表右边开始删除
- 当count=0时,LREM会删除所有值为value的元素
获取/设置指定索引的元素值
获取指定索引的元素值
语法:LINDEX key index
设置指定索引的元素值
语法:LSET key index value