ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

大数据学习之Redis,十大数据类型的具体应用(一)

大数据学习之Redis,十大数据类型的具体应用(一)

目录

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 value

SET命令有EX、PX、NX、XX以及KEEPTTL五个可选参数

  • EX seconds:以秒为单位设置过期时间

  • Px milliseconds: 以毫为单位设置过期时间

  • EXAT timestamp:设置以秒为单位的UNIX时间戳所对应的时间为过期时间

  • PXAT milliseconds-timestamp:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间

  • NX:键不存在的时候设置键值

  • XX:键存在的时候设置键值

  • KEEPTTL:保留设置前指定键的生存时间

  • GET:返回指定键原本的值,若键不存在时返回ni1

最常用的是

set key value

keepttl

get key
多值操作

设置多个key value

mset k1 v1 k2 v2 k3 v3

获取多个值

mget k1 k2 k3
获取指定区间范围内的值
  • getrange/setrange

#获取全部
getrange 0 -1
set k1 abcd1234
setrange k1 1 xxyy
#输出
axxyy234
数值增减

一定是数字才能加减

  • incr key / decr key

  • incrby key / decrby key

set k1 100
get k1 #输出100
incr k1 #输出101
set k1 100
get k1 #输出100
incrby k1 3 #输出103
incrby k1 5 #输出108
set k1 100 
get k1 #输出100
decr k1 #输出99
set 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 2

3.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 #输出 zs
hmset user:001 id 12 name ls age 26 #输出 ok
hmget user:001 id name age #输出 12 ls 26
hgetall user:001 #输出 id 12 name ls age 26
hdel 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

返回列表