06-五大数据类型

setnx (set if not exist) #不存在在设置(在分布式锁中会常常使用!)

127.0.0.1:6379> setex key3 30 “hello” # 设置key3的值为hello,30s后过期

OK

127.0.0.1:6379> ttl key3

(integer) 26

127.0.0.1:6379> setnx mykey “redis” #如果mykey不存在,创建mykey

(integer) 1

127.0.0.1:6379> keys *

  1. “mykey”

  2. “key2”

  3. “key1”

127.0.0.1:6379> ttl key3

(integer) -2

127.0.0.1:6379> setnx mykey “mongdb” # 如果mykey存在,创建失败

(integer) 0

127.0.0.1:6379> get mykey

“redis”

127.0.0.1:6379>

######################################################################

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 # 同时设置多个值

OK

127.0.0.1:6379> keys *

  1. “k2”

  2. “k3”

  3. “k1”

127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值

  1. “v1”

  2. “v2”

  3. “v3”

127.0.0.1:6379> MSETNX k1 v1 k4 v4 # 原子性操作 要么都成功,要么都失败

(integer) 0

127.0.0.1:6379> keys *

  1. “k2”

  2. “k3”

  3. “k1”

127.0.0.1:6379>

######################################################################

对象

set user:1 {name:zhangsan,age:3} #设置一个user:1 对象 值为json字符来保存一个对象!

这里的key是一个巧妙的设计 : user:{id}:{filed} ,如此设计在redis中是完全OK了!

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3

OK

127.0.0.1:6379> mget user:1:name user:1:age

  1. “zhangsan”

  2. “3”

127.0.0.1:6379>

######################################################################

getset #先get 后set

127.0.0.1:6379> getset db redis #如果不存在值,则返回nil

(nil)

127.0.0.1:6379> get db

“redis”

127.0.0.1:6379> getset db mongdb #如果存在值,获取原来的值,并设置新的值

“redis”

127.0.0.1:6379> get db

“mongdb”

127.0.0.1:6379>

String类似的使用场景: value除了是我们的字符串还可以是我们的数字!

  • 计数器

  • 统计多单位的数量

  • 粉丝数

  • 对象缓存存储!


List(列表)

在redis里面,我们可以把list玩成,栈、队列、阻塞队列!

所有的list命令都是用l开头的,redis不区分大小写

127.0.0.1:6379> lpush list 1 # 将一个值或多个值,插入到列表头部 (左)

(integer) 1

127.0.0.1:6379> lpush list 2

(integer) 2

127.0.0.1:6379> lpush list 3

(integer) 3

127.0.0.1:6379> LRANGE list 0 -1 #获取list中值

  1. “3”

  2. “2”

  3. “1”

127.0.0.1:6379> LRANGE list 0 1 #通过区间获取具体的值!

  1. “3”

  2. “2”

127.0.0.1:6379> RPUSH list 4 # 将一个值或多个值,插入到列表头部 (右)

(integer) 4

127.0.0.1:6379> LRANGE list 0 -1

  1. “3”

  2. “2”

  3. “1”

  4. “4”

127.0.0.1:6379>

#########################################################

LPOP

RPOP

127.0.0.1:6379> LRANGE list 0 -1

  1. “3”

  2. “2”

  3. “1”

  4. “4”

127.0.0.1:6379> LPOP list #移除第一个元素

“3”

127.0.0.1:6379> rPOP list #移除最后一个元素

“4”

127.0.0.1:6379> LRANGE list 0 -1

  1. “2”

  2. “1”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> LRANGE list 0 -1

  1. “2”

  2. “1”

127.0.0.1:6379> LINDEX list 1 #通过下标获取某一个值

“1”

127.0.0.1:6379> LINDEX list 0

“2”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> lpush list 1

(integer) 1

127.0.0.1:6379> lpush list 2

(integer) 2

127.0.0.1:6379> lpush list 3

(integer) 3

127.0.0.1:6379> llen list # 获取列表的长度

(integer) 3

127.0.0.1:6379>

#########################################################

移除指定的值

127.0.0.1:6379> lpush list 3 #说明可以放同样的值

(integer) 4

127.0.0.1:6379> lrange list 0 -1

  1. “3”

  2. “3”

  3. “2”

  4. “1”

127.0.0.1:6379> lrem list 1 1 #移除1个1

(integer) 1

127.0.0.1:6379> lrange list 0 -1

  1. “3”

  2. “3”

  3. “2”

127.0.0.1:6379> lrem list 2 3 #移除2个3

(integer) 2

127.0.0.1:6379> lrange list 0 -1

  1. “2”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello1”

  2. “hello2”

  3. “hello3”

  4. “hello”

127.0.0.1:6379> LTRIM mylist 1 2 # 截取下标截取指定长度,只剩下被截取的元素

OK

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello2”

  2. “hello3”

127.0.0.1:6379>

#########################################################

rpoplpush # 移除列表的最后一个元素,将他移动到新的列表

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello2”

  2. “hello3”

127.0.0.1:6379> RPOPLPUSH mylist myotherlist # rpoplpush # 移除列表的最后一个元素,将他移动到新的列表

“hello3”

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello2”

127.0.0.1:6379> LRANGE myotherlist 0 -1

  1. “hello3”

127.0.0.1:6379>

#########################################################

lset # 将列表中指定下标的值替换为另外一个值,更新操作

127.0.0.1:6379> exists list #判断这个列表是否存在

(integer) 0

127.0.0.1:6379> lset list 0 itemm # 如果不存在列表我们更新就会报错

(error) ERR no such key

127.0.0.1:6379> lpush list value1

(integer) 1

127.0.0.1:6379> lrange list 0 0

  1. “value1”

127.0.0.1:6379> lset list 0 itemm # 如果存在,更新当前下标的值

OK

127.0.0.1:6379> lrange list 0 0

  1. “itemm”

127.0.0.1:6379> lset list 1 other # 如果不存在,则会报错

(error) ERR index out of range

127.0.0.1:6379>

#########################################################

linsert #将某个具体的value值插入到列表中某个元素的前面或者后面!

127.0.0.1:6379> rpush mylist “hello”

(integer) 1

127.0.0.1:6379> rpush mylist “world”

(integer) 2

127.0.0.1:6379> lrange mylist 0 -1

  1. “hello”

  2. “world”

127.0.0.1:6379> linsert mylist before “world” “other”

(integer) 3

127.0.0.1:6379> lrange mylist 0 -1

  1. “hello”

  2. “other”

  3. “world”

127.0.0.1:6379> linsert mylist after “world” “new”

(integer) 4

127.0.0.1:6379> lrange mylist 0 -1

  1. “hello”

  2. “other”

  3. “world”

  4. “new”

127.0.0.1:6379>

小结

  • 他实际上是一个链表,before Node after , left , right都可以插入值

  • 如果key不存在,创建新的链表

  • 如果key存在,新增内容

  • 如果移除了所有值,空链表,也代表不存在!

  • 在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~

消息排队!消息队列( Lpush Rpop ) ,棍( Lpush Lpop ) !


set(集合)

set中的值是不能重复的!

127.0.0.1:6379> sadd myset “hello” # set集合添加值

(integer) 1

127.0.0.1:6379> sadd myset “wolrd”

(integer) 1

127.0.0.1:6379> sadd myset “1111”

(integer) 1

127.0.0.1:6379> smembers myset #查看指定set的所有值

  1. “wolrd”

  2. “1111”

  3. “hello”

127.0.0.1:6379> SISMEMBER myset hello # 判断某一个值是不是在set集合中! 1代表有,0代表没有

(integer) 1

127.0.0.1:6379> SISMEMBER myset world

(integer) 0

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> scard myset #获取长度

(integer) 3

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> scard myset

(integer) 3

127.0.0.1:6379> srem myset hello #移除hello元素

(integer) 1

127.0.0.1:6379> scard myset

(integer) 2

127.0.0.1:6379> smembers myset

  1. “wolrd”

  2. “1111”

127.0.0.1:6379>

#########################################################

set 无序不重复集合 ,抽随机!

127.0.0.1:6379> smembers myset

  1. “world”

  2. “zhangsan”

  3. “1111”

127.0.0.1:6379> SRANDMEMBER myset #随机返回一个元素

“1111”

127.0.0.1:6379> SRANDMEMBER myset

“zhangsan”

127.0.0.1:6379> SRANDMEMBER myset 2 # 随机返回2个元素

  1. “wolrd”

  2. “1111”

127.0.0.1:6379>

#########################################################

删除指定的key,删除随机的key

127.0.0.1:6379> SMEMBERS myset

  1. “wolrd”

  2. “zhangsan”

  3. “1111”

127.0.0.1:6379> spop myset #随机删除一个set集合中的元素!

“wolrd”

127.0.0.1:6379> spop myset

“zhangsan”

127.0.0.1:6379> SMEMBERS myset

  1. “1111”

127.0.0.1:6379>

#########################################################

将一个指定的值,移动到另外一个set集合

127.0.0.1:6379> sadd myset “hello”

(integer) 1

127.0.0.1:6379> sadd myset “world”

(integer) 1

127.0.0.1:6379> sadd myset “lisi”

(integer) 1

127.0.0.1:6379> sadd myset2 “set2”

(integer) 1

127.0.0.1:6379> smove myset myset2 “lisi” # 将一个指定的值,移动到另外一个set集合

(integer) 1

127.0.0.1:6379> SMEMBERS myset

  1. “world”

  2. “hello”

127.0.0.1:6379> SMEMBERS myset2

  1. “lisi”

  2. “set2”

127.0.0.1:6379>

#########################################################

微博 ,B站 ,共同关注!(并集)

  • 交集

  • 并集

  • 差集

127.0.0.1:6379> sadd jihe1 a

(integer) 1

127.0.0.1:6379> sadd jihe1 b

(integer) 1

127.0.0.1:6379> sadd jihe1 c

(integer) 1

127.0.0.1:6379> sadd jihe2 c

(integer) 1

127.0.0.1:6379> sadd jihe2 d

(integer) 1

127.0.0.1:6379> sadd jihe2 e

(integer) 1

127.0.0.1:6379> sdiff jihe1 jihe2 # 差集

  1. “a”

  2. “b”

127.0.0.1:6379> sinter jihe1 jihe2 # 交集 共同好友就可以这样实现

  1. “c”

127.0.0.1:6379> sunion jihe1 jihe2 # 并集

  1. “a”

  2. “b”

  3. “c”

  4. “d”

  5. “e”

127.0.0.1:6379>

应用场景

微f博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!

共同关注,共同爱好,二度好友,推荐好友!(六度分割理论)


Hash

Map集合 ,key-map!时候这个值是一个map集合! 并内置和String类型没有太大区别,还是一个简单的key-value!

127.0.0.1:6379> hset myhash filed kuangshen # set一个具体的key-value

(integer) 1

127.0.0.1:6379> hget myhash filed #获取一个值

“kuangshen”

127.0.0.1:6379> hmset myhash filed1 hello field2 world # 设置多个值

OK

127.0.0.1:6379> hmget myhash filed1 field2 #获取多个值

  1. “hello”

  2. “world”

127.0.0.1:6379> hgetall myhash #获取所有值 key-value展示

  1. “filed”

  2. “kuangshen”

  3. “field2”

  4. “world”

  5. “filed1”

  6. “hello”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> hgetall myhash

  1. “filed”

  2. “hello”

  3. “field2”

  4. “world”

  5. “filed1”

  6. “hello”

127.0.0.1:6379> hdel myhash filed1 #删除filed1,对应的value也没了

(integer) 1

127.0.0.1:6379> hgetall myhash

  1. “filed”

  2. “hello”

  3. “field2”

  4. “world”

127.0.0.1:6379> hset myhash filed kuangshen # 修改filed的值

(integer) 0

127.0.0.1:6379> hgetall myhash

  1. “filed”

  2. “kuangshen”

  3. “field2”

  4. “world”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> hlen myhash #获取hash表的字段数量

(integer) 2

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> hgetall myhash

  1. “filed”

  2. “kuangshen”

  3. “field2”

  4. “world”

127.0.0.1:6379> hlen myhash

(integer) 2

127.0.0.1:6379> HEXISTS myhash field1 # 判断是否有这个字段 有为1,没有为0

(integer) 0

127.0.0.1:6379> HEXISTS myhash field2

(integer) 1

#########################################################

127.0.0.1:6379> HGETALL myhash

  1. “filed”

  2. “kuangshen”

  3. “field2”

  4. “world”

127.0.0.1:6379> keys *

  1. “myhash”

127.0.0.1:6379> hkeys myhash # 只获取所有的key

  1. “filed”

  2. “field2”

127.0.0.1:6379> hvals myhash # 只获取所有的 value

  1. “kuangshen”

  2. “world”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> hset myhash field3 5

(integer) 1

127.0.0.1:6379> HINCRBY myhash field3 1 #自增1

最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

image

image

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
er) 0

127.0.0.1:6379> HEXISTS myhash field2

(integer) 1

#########################################################

127.0.0.1:6379> HGETALL myhash

  1. “filed”

  2. “kuangshen”

  3. “field2”

  4. “world”

127.0.0.1:6379> keys *

  1. “myhash”

127.0.0.1:6379> hkeys myhash # 只获取所有的key

  1. “filed”

  2. “field2”

127.0.0.1:6379> hvals myhash # 只获取所有的 value

  1. “kuangshen”

  2. “world”

127.0.0.1:6379>

#########################################################

127.0.0.1:6379> hset myhash field3 5

(integer) 1

127.0.0.1:6379> HINCRBY myhash field3 1 #自增1

最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

[外链图片转存中…(img-MlrdESFf-1716562856847)]

[外链图片转存中…(img-bv4oTjY3-1716562856848)]

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值