Hash
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储字典数据。
插入哈希
# 设置单个 hset key field value 127.0.0.1:6379> hset user:123 name jack (integer) 1 # 设置多个 hmset key field value [field2 value2] # 同时将多个 field-value (域-值)对设置到哈希表中; #键和字段存在时,属于更新 127.0.0.1:6379> hmset user:123 name xiaomi age 23 gender man # 存储用户123的个人信息{'name': 'xiaomi', 'age': 23, 'gender': '男'} (integer) 3 hincrby key field increment # 为哈希表 key 中的指定字段的整数值加上增量 127.0.0.1:6379> hincrby user:123 age 5 # 用户123的年龄加5岁 (integer) 24
查询哈希
hget key field #指定字段的值 127.0.0.1:6379> hget user:123 name "xiaomi" hgetall key # 获取所有字段和值 127.0.0.1:6379> hgetall user:123 1) "name" 2) "xiaomi" 3) "age" 4) "24" 5) "gender" 6) "man" hkeys key #获取所有的字段 hvals key #获取所有的值
删除哈希
hdel key field1 [field2] # 删除一个或多个哈希字段, 返回删除的个数 127.0.0.1:6379> hdel user:123 gender # 用户123的性别 (integer) 1
Hash类型练习
-
更新用户123 的购物车中id为3的商品数量
127.0.0.1:6379> hincrby cart_123 3 5 # 有则新增,无则插入 (integer) 5 127.0.0.1:6379> hincrby cart_123 3 -2 # 有则新增,无则插入 (integer) 3
-
修改用户123的购物车中id为3的商品数量为5个
127.0.0.1:6379> hset cart_123 3 5 # 更新 (integer) 1
-
获取用户123的所有购物车数据
127.0.0.1:6379> hgetall cart_123 1) "3" # 商品id为3 2) "5" # 5个商品
-
删除用户123的购物车中id为3的商品
127.0.0.1:6379> hdel cart_123 3 (integer) 1
设置过期时间
#1 10s过期 set name jack ex 10 #2 set name jack expire name 10 -->10s pexpire name 10 -->10ms #查看多久过期 ttl name -->返回-2 key不存在 -->返回-1 key存在,但没有过期时间 -->返回具体时间,剩余过期时间 #设置永不过期 persist name
String类型的练习
-
存储生成的短信验证码,方便下次验证,注意:短信验证码的有效期为10分钟
127.0.0.1:6379> set sms_code:1731111111 637905 EX 300 # 存储 1731111111该手机号的短信验证码 637905, 过期时间是5分钟
-
存储标志,防止短信验证码发送过于频繁,1分内只能发送一次
127.0.0.1:6379> set sms_code_flag:1731111111 1 EX 60 # 存储 1731111111该手机号是否发送短信验证码的标志, 过期时间是60s
-
取出短信验证码
127.0.0.1:6379> get sms_code:1731111111 # 取出短信验证码,过期之后,取出为(nil) "637905"
List
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
类似: {name:[1,2,3,4,5,6,]}
插入列表
# 头插法 lpush key val1 val2 ... 127.0.0.1:6379> lpush numbers 1 2 3 (integer) 3 # 尾插法 127.0.0.1:6379> rpush numbers 8 9 0 (integer) 6
更新列表
# 修改某下标的值 lset key index val 127.0.0.1:6379> lset numbers 5 10 # 注意: redis中下标也是从0开始 OK
删除列表
# 头删法 lpop key # 删除第一个值, 并立即返回该值 127.0.0.1:6379> lpop numbers "3" # 尾删法 rpop key # 删除最后一个值, 并立即返回 127.0.0.1:6379> rpop numbers "10" #列表为空时,阻塞的删除 blpop mylist 10 brpop mylist 10 # 删除指定的值 lrem key count value # 返回的是删除的个数 127.0.0.1:6379>lrem numbers 0 2 # 删除所有值为2的元素 (integer) 4 127.0.0.1:6379>lrem numbers -2 1 # 从表尾开始删除2个值为1的元素 (integer) 2 127.0.0.1:6379> lrem numbers 2 1 # 从表头开始删除2个值为1的元素 (integer) 2 # 截取数据 ltrim key start stop 127.0.0.1:6379> ltrim numbers 2 5 # 保留下标为 【2,5】之间的所有元素,删除其余元素 OK
查询列表
lrange key start stop # 返回指定区间内的内容 127.0.0.1:6379> lrange numbers 0 -1 1) "3" 2) "2" 3) "1" llen key #获取列表的长度
List类型练习
-
将id为1的商品存入用户173的历史记录中
127.0.0.1:6379> lrem history:173 0 1 # 先移除 用户173历史记录中 所有id为1的商品记录 (integer) 0 127.0.0.1:6379> lpush history:173 1 # 将 id为1的商品存入 用户173的历史记录中 (integer) 1 127.0.0.1:6379> ltrim history:173 0 4 # 保留 历史记录中的前5条商品数据 OK
-
查询用户173的历史记录
127.0.0.1:6379> lrange history:173 0 -1 # 查询列表中的所有元素 1) "1"