目录
3. 数据类型命令及落地应用
3.1 备注
3.2 Redis字符串(String)
单值单value
多值操作
获取指定区间范围内的值
数值增减
获取字符串长度和内容追加
分布式锁
getset(先get后set)
3.3 Redis列表(List)
简单说明
单key 多value
3.4 Redis哈希(Hash)
KV模式不变,但是V是一个键值对
3. 数据类型命令及落地应用
3.1 备注
命令不区分大小写,而key是区分大小写的
永远的帮助命令,help @类型
help @3.2 Redis字符串(String)
单值单value
set key valueSET命令有EX、PX、NX、XX以及KEEPTTL五个可选参数
-  EX seconds:以秒为单位设置过期时间 
-  Px milliseconds: 以毫为单位设置过期时间 
-  EXAT timestamp:设置以秒为单位的UNIX时间戳所对应的时间为过期时间 
-  PXAT milliseconds-timestamp:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间 
-  NX:键不存在的时候设置键值 
-  XX:键存在的时候设置键值 
-  KEEPTTL:保留设置前指定键的生存时间 
-  GET:返回指定键原本的值,若键不存在时返回ni1 
最常用的是
set key valuekeepttl


get key多值操作
设置多个key value
mset k1 v1 k2 v2 k3 v3获取多个值
mget k1 k2 k3获取指定区间范围内的值
-  getrange/setrange 
#获取全部
getrange 0 -1set k1 abcd1234
setrange k1 1 xxyy
#输出
axxyy234数值增减
一定是数字才能加减
-  incr key / decr key 
-  incrby key / decrby key 
set k1 100
get k1 #输出100
incr k1 #输出101set k1 100
get k1 #输出100
incrby k1 3 #输出103
incrby k1 5 #输出108set k1 100 
get k1 #输出100
decr k1 #输出99set k1 100
get k1 #输出100
decrby k1 5 #输出95获取字符串长度和内容追加
-  strlen key 
-  append key value 
set k1 abcd
get k1 #输出“abcd”
strlen k1 #输出 (integer)4
append k1 xxxx
get k1 #输出 “abcdxxxx”分布式锁
-  setnx key value 
-  setex(set with expire)键秒值/setnx(set if not exist)  
getset(先get后set)
3.3 Redis列表(List)
简单说明
一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
left、right都可以插入添加;
如果键不存在,创建新的链表:
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
-  它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差 

单key 多value
微信公众号订阅的消息 一个人 订阅了多个公众号 中有多个消息
-  lpush / rpush / lrange 
lpush list1 1 2 3 4 5 #输出 5
rpush list2 11 22 33 44 55 #输出 5
type list1 #输出 list
lrange list1 0 -1 #输出 5 4 3 2 1
lrange list2 0 -1 #输出 11 22 33 44 55-  lpop / rpop 
lpush list1 1 2 3 4 5 #输出 5
lrange list1 0 -1 #输出 5 4 3 2 1
lpop list1 #输出 5(从左边弹)
lrange list1 0 -1 #输出 4 3 2 1
rpop list1 #输出 1(从右边弹)
lrange list1 0 -1 #输出 4 3 2-  lindex,按照索引下标获得元素的个数(从上到下) 
lrange list1 0 -1 #输出 4 3 2
lindex list1 0 #输出 4-  llen,获取列表中元素的个数 
llen list1 #输出 3
llen list2 #输出 5-  lrem key 数字N 给定值v1 删除N个值等于v1的元素 list允许有重复的元素 
del list1
lpush list1 1 1 1 1 2 2 2 3 3 4 5 #输出 11
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1 1 1 1 
lrem list1 3 1
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1-  ltrim key 开始index 结束index,截取指定范围的值后在赋值给key 
lrang list1 0 -1 #输出 5 4 3 3 2 2 2 1
ltrim list1 4 7 #输出 ok
lrang list1 0 -1 #输出 2 2 2 1 -  rpoplpush 源列表 目的列表 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 
lrang list1 0 -1 #输出 2 2 2 1 
lrang list2 0 -1 #输出 11 22 33 44 55
rpoplpush list1 list2 #输出 1
lrang list1 0 -1 #输出 2 2 2
lrang list2 0 -1 #输出 1 11 22 33 44 55-  lset key index value 
lrang list1 0 -1 #输出 2 2 2
lset list1 1 mysql #输出 ok
lrang list1 0 -1 #输出 2 mysql 2-  linsert key before / after 已有值 插入的新值 
lrang list1 0 -1 #输出 2 mysql 2
linsert list1 mysql java
lrang list1 0 -1 #输出 2 java mysql 23.4 Redis哈希(Hash)
KV模式不变,但是V是一个键值对
Map < String , Map < Object , Object > >
-  hset / hget / hmset / hgetall / hdel 
hset user:001 id 11 name zs age 25 #输出 3 
hget user:001 id #输出 11
hget user:001 name #输出 zshmset user:001 id 12 name ls age 26 #输出 ok
hmget user:001 id name age #输出 12 ls 26hgetall user:001 #输出 id 12 name ls age 26hdel user:001 age #输出 1
hgetall user:001 #输出 id 12 name ls-  hlen 
hgetall user:001 #输出 id 12 name ls
hlen user:001 #输出 2-  hexists key 在key里面的某个值的key 
hexists user:001 name #输出 1
hexists user:001 score #输出 0 -  hkeys / hvals 
hkeys user:001 #输出 id name
hvals user:001  #输出 12 ls-  hincrby / hincrbyfloat 对数据相关的操作 
hest user:001 age 25 score 99.5 #输出 2
hgetall user:001 #输出 id 12 name ls age 25 score 99.5
hincrby user:001 age 2 #输出 27
hgetall user:001 #输出 id 12 name ls age 27 score 99.5
hincrbyfloat user:001 score 0.5 #输出 100
hgetall user:001 #输出 id 12 name ls age 27 score 100-  hsetnx 不存在 输出1 并添加 存在 输出0 
hsetnx user:001 class 1 #输出 1 
hsetnx user:001 class 1 #输出 0