Redis之五大数据类型

该笔记大部分搬运B站遇见狂神说的Redis,顺便把图文合并记录,便于回顾,仅用于学习!
视频地址:https://www.bilibili.com/video/BV1S54y1R7SB?t=250 作者真的非常好,记得三连
如有侵权,请联系删除!

1. 五大数据类型

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库高速缓存消息队列代理。它支持字符串哈希表列表集合有序集合位图hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

2. Redis-key

在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。

下面学习的命令:

  • exists key:判断键是否存在
  • del key:删除键值对
  • move key db:将键值对移动到指定数据库
  • expire key second:设置键值对的过期时间
  • type key:查看value的数据类型
    在这里插入图片描述
    在使用redis中忘记命令可以去官网查看命令:http://www.redis.cn/commands.html
    在这里插入图片描述

3. String(字符串)

命令描述示例
set key value设置指定的key和value127.0.0.1:6379> set k1 v1
get key根据key获取127.0.0.1:6379> get k1
append key value根据key对相应的值进行追加,如果key不存在,则创建新的key-value值127.0.0.1:6379> append k1 “hello”
incr key将指定key的value数值进行+1(仅对于数字)127.0.0.1:6379> incr views
decr key将指定key的value数值进行-1(仅对于数字)127.0.0.1:6379> decr views
incrby key按指定的步长对数值进行增加127.0.0.1:6379> incrby views 10
decrby key按指定的步长对数值进行减少127.0.0.1:6379> decrby views 10
getrange key start end根据范围获取字符串(截取字符串
end为-1时获取全部的字符串
127.0.0.1:6379> getrange k1 0 3
127.0.0.1:6379> getrange k1 0 -1
setrange key index value根据位置替换字符串(替换字符串127.0.0.1:6379> setrange k2 1 ff
setex key seconds valueset 键值对并设置过期时间127.0.0.1:6379> setex k2 30 “hello”
setnx key value仅当key不存在时进行set127.0.0.1:6379> setnx k3 “redis”
127.0.0.1:6379> setnx k3 “mongodb”
mset key value key value…批量set键值对127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
127.0.0.1:6379> mset user:1:name “zhangsan” user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) “2”
mget key key key …批量获取多个key保存的值127.0.0.1:6379> mget k1 k2 k3
msetnx key value key value …批量设置键值对,仅当参数中所有的key都不存在时执行127.0.0.1:6379> msetnx k1 v11 k2 v22
getset key value如果不存在值,则返回nil,如果存在值,获取原来的值,并设置新的值

String类似的使用场景:value除了是字符串还可以是数字,用途举例:

  • 计数器
  • 统计多单位的数量:uid:123666:follow 0
  • 粉丝数
  • 对象存储缓存

4. List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
List可以当成栈、队列、阻塞队列等。
前缀字母L或R代表方向,L代表是左边,R代表是右边。

命令描述示例
lpush key element从左边向列表中PUSH值(一个或者多个)。127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> Lrange list 0 1
1) "three"
2) “two”
rpush key element从右边向列表中PUSH值(一个或者多个)。127.0.0.1:6379> rpush list right
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) “right”
lrange list start end获取list 起止元素(索引从左往右 递增)127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) “right”
lpop key移除list的第一个元素127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) “right"
127.0.0.1:6379> lpop list
"three”
rpop key移除list的最后一个元素127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) “right"
127.0.0.1:6379> rpop list
"right”
lindex key index通过索引获取列表元素127.0.0.1:6379> lrange list 0 -1
1) "two"
2) “one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list 1
"one”
llen key查看列表长度127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list
(integer) 3
lrem key count valueList中是允许value重复的;
count > 0:从头部开始搜索 然后删除指定的value 至多删除count个;
count < 0:从尾部开始搜索,然后删除指定的value
count = 0:删除列表中所有的指定value。
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) “two”
ltrim key start end通过下标截取指定范围内的列表127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
4) "hello4"
127.0.0.1:6379> ltrim mylist 1 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) “hello3”
rpoplpush source destination将列表的尾部(右)最后一个值弹出,并返回,然后加到另一个列表的头部127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
3) “hello3"
127.0.0.1:6379> rpoplpush mylist myotherlist
"hello3”
exists key判断列表是否存在127.0.0.1:6379> exists mylist
(integer) 1
lset key index value通过下标更新或替换列表指定的值127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379> lset mylist 1 item
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) “item”
linsert key before|after pivot value在指定列表元素的前/后 插入value127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "item"
127.0.0.1:6379> linsert mylist before item hello2
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
3) “item”

小结:

  • 它实际上是一个链表,before Node after , left, right 都可以插入值
  • 如果key不存在,则创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有值,空链表,也代表不存在
  • 在两边插入或者改动值,效率最高!修改中间元素,效率相对较低

应用:

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

5. Set(集合)

Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

命令描述示例
sadd key member向集合中无序增加一个/多个成员127.0.0.1:6379> sadd myset “hello1”
(integer) 1
127.0.0.1:6379> sadd myset “hello2”
(integer) 1
127.0.0.1:6379> sadd myset “hello3”
(integer) 1
127.0.0.1:6379> sadd myset “hello4”
(integer) 1
smembers key查看指定set的所有值127.0.0.1:6379> smembers myset
1) "hello4"
2) "hello3"
3) "hello1"
4) “hello2”
sismember key member返回集合中所有的成员127.0.0.1:6379> sismember myset hello
(integer) 0
127.0.0.1:6379> sismember myset hello1
(integer) 1
scard key获取集合的成员数127.0.0.1:6379> scard myset
(integer) 4
srem key member移除集合中一个/多个成员127.0.0.1:6379> smembers myset
1) "hello4"
2) "hello3"
3) "hello1"
4) "hello2"
127.0.0.1:6379> srem myset “hello1”
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello4"
2) "hello3"
3) “hello2”
srandmember key [count]随机返回集合中count个成员,count缺省值为1127.0.0.1:6379> SRANDMEMBER myset
"hello4"
127.0.0.1:6379> srandmember myset 2
1) "hello4"
2) “hello2”
spop key [count]随机移除并返回集合中count个成员,count缺省值为1127.0.0.1:6379> smembers myset
1) "hello4"
2) "hello3"
3) "hello2"
127.0.0.1:6379> spop myset
"hello3"
127.0.0.1:6379> smembers myset
1) "hello4"
2) “hello2”
smove source destination member将source集合的成员member移动到destination集合127.0.0.1:6379> smembers myset
1) "hello4"
2) "hello2"
127.0.0.1:6379> smembers myset2
1) "hello5"
127.0.0.1:6379> smove myset myset2 “hello2”
(integer) 1
127.0.0.1:6379> smembers myset2
1) "hello5"
2) “hello2”
sdiff key[key2…]返回所有集合的差集 key1- key2 - …127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2
1) "a"
2) “b”
sinter key[key2…]返回所有集合的交集127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sinter key1 key2
1) “c”
sunion key[key2…]返回所有集合的并集127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sunion key1 key2
1) "c"
2) "a"
3) "b"
4) "e"
5) “d”

应用场景:

  • 共同好友
  • 共同爱好
  • 共同关注
  • 推荐好友
  • 二度好友

6. Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象

命令描述示例
hset key field value将哈希表 key 中的字段 field 的值设为 value 。重复设置同一个field会覆盖,返回0127.0.0.1:6379> hset myhash key value
(integer) 1
hget key field value获取存储在哈希表中指定字段的值127.0.0.1:6379> hget myhash key
"value"
hgetall key获取在哈希表key 的所有字段和值127.0.0.1:6379> hset myhash key value
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "key"
2) “value”
hkeys key获取哈希表key中所有的字段127.0.0.1:6379> hkeys myhash
1) “key”
hvals key获取哈希表中所有值127.0.0.1:6379> hvals myhash
1) “value”
hlen key获取哈希表中字段的数量127.0.0.1:6379> hlen myhash
(integer) 1
hexists key查看哈希表 key 中,指定的字段是否存在。127.0.0.1:6379> hexists myhash key
(integer) 1 #存在
127.0.0.1:6379> hexists myhash key1.
(integer) 0 #不存在
hmset key field1 value1 [field2 value2…]同时将多个 field-value (域-值)对设置到哈希表 key 中。127.0.0.1:6379> hmset myhash k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> hgetall myhash
1) "key"
2) "value"
3) "k1"
4) "v1"
5) "k2"
6) "v2"
7) "k3"
8) “v3”
hmget key field1 [field2…]获取所有给定字段的值127.0.0.1:6379> hmget myhash k1 k2
1) "v1"
2) “v2”
hsetnx key field value只有在字段 field 不存在时,设置哈希表字段的值。127.0.0.1:6379> hsetnx myhash k1 val1
(integer) 0
127.0.0.1:6379> hget myhash k1
"v1"
127.0.0.1:6379> hsetnx myhash k4 v4
(integer) 1
127.0.0.1:6379> hget myhash k4
"v4"
hdel key field1 [field2…]删除哈希表key中一个/多个field字段127.0.0.1:6379> hdel myhash k3 k4
(integer) 2
127.0.0.1:6379> hgetall myhash
1) "key"
2) "value"
3) "k1"
4) "v1"
5) "k2"
6) “v2”
hincrby key field n按指定的步长对数值进行增加,为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段127.0.0.1:6379> hset myhash k5 5
(integer) 1
127.0.0.1:6379> hincrby myhash k5 2
(integer) 7
127.0.0.1:6379> hget myhash k5
"7"
hincrbyfloat key field n为哈希表 key 中的指定字段的浮点数值加上增量 n。127.0.0.1:6379> hset myhash k6 15.2
(integer) 1
127.0.0.1:6379> hincrbyfloat myhash k6 0.4
"15.6"
127.0.0.1:6379> hget myhash k6
"15.6"

应用场景:

  • ​ Hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息!Hash更适合于对象的存储,Sring更加适合字符串存储!

7. Zset(有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

命令描述示例
zadd key score member1 [score2 member2]添加多个值127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) “three”
zcard key获取有序集合的成员数127.0.0.1:6379> zcard myzset
(integer) 3
zrange[byscore/bylex] key min max通过索引区间返回有序集合成指定区间内的成员(从小到大排序127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) “lisi”
zrevrange[byscore/bylex] key min max通过索引区间返回有序集合成指定区间内的成员(从大到小排序127.0.0.1:6379> zrevrange salary 0 -1
1) "lisi"
2) "zhangsan"
3) “wangwu”
zrevrangebyscore[lex] key max min [withscores]返回有序集中指定分数区间内的成员,分数从高到低排序127.0.0.1:6379> zrevrangebyscore salary 5000 0
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> zrevrangebyscore salary 5000 0 withscores
1) "lisi"
2) "5000"
3) "zhangsan"
4) "2500"
5) "wangwu"
6) “500”
zrem key member[member…]移除有序集合中一个/多个成员127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary wangwu
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) “lisi”
zcard key获取有序集合中的个数127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> zcard salary
(integer) 2
zcount key min max获取区间的成员数量127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zcount salary 500 5000
(integer) 3
127.0.0.1:6379> zcount salary 500 2500
(integer) 2

应用案例:

  • set排序 存储班级成绩表 工资表排序!
  • 普通消息,1.重要消息 2.带权重进行判断
  • 排行榜应用实现,取Top N测试
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值