Redis入门实战(二)Redis 五个基本数据类型

 

Redis 的数据类型?

Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zsetsorted set:有序集合)。
我们实际项目中比较常用的是 string,hash 如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。
image

字符串(String)

介绍:这是 Redis 最基本的数据类型,它可以存储任何类型的字符串,包括二进制数据。字符串类型的值最大可以存储 512MB 的数据。
使用场景:常用于存储简单的键值对,如用户的登录信息、配置参数等。
image

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> mget key3 key2
1) "value3"
2) "value2"

image
2.常用命令
除了上面的get,set命令外,Redis还提供了很多功能强大的命令,比如递增,递减等,具体如下所示:

  1. mset用于同时设置一个或多个键值对
  2. mget用于同时获取一个或多个 value
  3. expire用于给已经存在的键设置过期时间,单位为秒
  4. setnx用于如果键不存在,则会添加成功,否则将添加失败
  5. setex用于在添加键值对的时候就为其设置过期时间(set 方式添加是永不过期)
  6. msetnx用于批量添加,如果有一个键已经存在,则所有都将添加失败
  7. incr如果值是integer ,则会将其进行加一的操作,如果不是则会报错
  8. decr如果值是integer ,则会将其进行减一的操作,如果不是则会报错
  9. incrby用于自定义需要加多少
  10. decrby用于自定义需要减多少

命令演示
需求:
添加一个键为company,值为itcast
再设置一个键为company,值为heima
得到company的元素
删除company元素
再次删除company看返回值是否相同
得到company看返回值是多少
设置键为job,值为programmer
再次设置job的值为code-farmer,查询job的值
image

哈希(Hash)

介绍:哈希类型是一个键值对集合,其中每个字段都可以独立地进行存储和访问。它适合用于存储对象,比如用户的详细信息、商品的属性等。
使用场景:在需要存储和操作对象的场景中非常有用,可以方便地对对象的各个字段进行单独的更新和查询。
Redis中的Hash类型可以看成具String的键和String的值Map容器,每一个Hash可以存储40亿个键值对。
image

命令 行为
hset 键 字段 值 向指定的键中添加一对hash类型的字段名和值
hget 键 字段 取出指定键的指定字段的值
hmset 键 字段 值 字段 值 mulitple,一次向某个键中设置多个字段名和值
hmget 键 字段 字段 一次从指定的键中得到多个字段的值
hdel 键 字段 字段 删除一个键中的一个或多个字段
hgetall 键 得到某个键所有的字段值

命令演示
需求:
创建hash类型的键为user,并且添加一个字段为username,值为newboy
向user中添加字段为password,值为12345
向user中添加字段为age,值为18
分别得到user中的username、password和age的字段值

127.0.0.1:6379> set company itcast
OK
127.0.0.1:6379> set company heima
OK
127.0.0.1:6379> hset user username newboy
(integer) 1
127.0.0.1:6379> hset user password 123456
(integer) 1
127.0.0.1:6379> hset user age 24
(integer) 1
127.0.0.1:6379> hget user password
"123456"
127.0.0.1:6379> hget user age
"24"
127.0.0.1:6379> hmset user birthday 2023-22-22 sex male
OK
127.0.0.1:6379> hmget user age sex
1) "24"
2) "male"
127.0.0.1:6379> hgetall user
 1) "username"
 2) "newboy"
 3) "password"
 4) "123456"
 5) "age"
 6) "24"
 7) "birthday"
 8) "2023-22-22"
 9) "sex"
10) "male"
127.0.0.1:6379> hdel user birthday password
(integer) 2
127.0.0.1:6379> hgetall user
1) "username"
2) "newboy"
3) "age"
4) "24"
5) "sex"
6) "male"

列表(List)

介绍:列表是一个有序的字符串元素集合,它按照插入顺序来存储元素。可以在列表的头部或尾部进行插入和删除操作,时间复杂度为 。
使用场景:常用于实现消息队列、任务队列等功能,也可以用于存储具有顺序性的数据,如用户的操作历史记录。

List列表是简单有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。通过List数据类型可以实现队列等功能。
image
常用命令

命令 行为
lpush 键 元素 元素 left push 在列表的左边向指定的键中添加列表元素,如果该键并不存在,Redis将为该键创建一个新的链表,如果这个键已经存在,则是向list添加元素。
rpush 键 元素 元素 right push在列表的右边向指定的键中添加列表元素
lpop 键 left pop 从指定键中的左边弹出一个元素,列表中的元素就删除了。
rpop 键 right pop从指定键的右边弹出一个元素,列表中的元素就删除了。
lrange 键 开始 结束 从指定键的列表中取出指定范围的元素列表,从左边数起从0开始,从右边数起从-1开始。如果要取整个列表,开始是0,结束是-1
llen 键 得到指定列表的长度
命令演示
执行效果
image
向mylist键的列表中,从左边添加a b c三个元素
从右边添加one two three三个元素
查询所有的元素
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> rpush mylist one two three
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "one"
5) "two"
6) "three"

image
从右边添加一个重复的元素three

127.0.0.1:6379> rpush mylist three
(integer) 7
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "one"
5) "two"
6) "three"
7) "three"

image
删除最右边的元素three

127.0.0.1:6379> rpop mylist
"three"
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "one"
5) "two"
6) "three"

image
删除最左边的元素c
获取列表中元素的个数

127.0.0.1:6379> lpop mylist
"c"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "a"
3) "one"
4) "two"
5) "three"
127.0.0.1:6379> llen mylist
(integer) 5

image

集合(Set)

介绍:集合是一个无序的字符串元素集合,其中每个元素都是唯一的。集合支持交集、并集、差集等操作,可以高效地进行这些集合运算。
使用场景:适合用于存储不重复的数据,如用户的好友列表、文章的标签等。还可以用于实现一些复杂的查询,如查找共同关注的好友、共同感兴趣的话题等。

Redis 的 Set 是 string 类型的无序集合。用于保存多个字符串元素,集合中的元素不能重复,并且集合中的元素也是无序的,无法通过下标来获取集合中的元素,这些特性与java的set非常类似。Redis的 Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
image
常用命令

命令 行为
sadd 键 元素 元素 向set集合中添加1个或多个元素
smembers 键 查询指定的集合中所有的元素
sismember 键 元素 判断指定的元素是否在某个集合中,如果存在返回1,否则返回0
srem 键 元素 元素 remove 删除指定的一个或多个元素
sunion 键1 键2 返回给定集合的并集。不存在的集合 key 被视为空集。

命令演示
向myset集合中添加A B C 1 2 3 六个元素
再向myset中添加B元素,看能否添加成功
显示所有的成员,发现与添加的元素顺序不同,元素是无序的
删除其中的C这个元素,再查看结果
判断A是否在myset集合中
判断D是否在myset集合中
创建键为set1的集合:元素是 a b c
创建键为set2的集合:元素是 a b d
得到set1和set2的并集,并且显示

127.0.0.1:6379> sadd myset A B C 1 2 3
(integer) 6
127.0.0.1:6379> sadd myset B
(integer) 0
127.0.0.1:6379> smembers myset
1) "1"
2) "B"
3) "C"
4) "2"
5) "A"
6) "3"
127.0.0.1:6379> srem myset C
(integer) 1
127.0.0.1:6379> sismember myset A
(integer) 1
127.0.0.1:6379> sismember myset D
(integer) 0
127.0.0.1:6379> sadd set1 a b c
(integer) 3
127.0.0.1:6379> sadd set2 a b d
(integer) 3
127.0.0.1:6379> sunion set1 set2
1) "b"
2) "a"
3) "c"
4) "d"

image

有序集合(Sorted Set)

介绍:有序集合类似于集合,但每个元素都关联了一个分数(score),通过分数来对元素进行排序。有序集合中的元素是唯一的,但分数可以重复。
使用场景:常用于排行榜、优先级队列等场景。比如,根据用户的积分进行排名,按照任务的优先级进行调度等。

Redis 有序集合和集合一样也是无序不可以重复。
不同的是每个元素都会关联一个分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。

image
常用命令

命令 行为
zadd 键 分数 值 分数 值 向有序集合添加一个或多个成员
zrange 键 开始索引 结束索引 通过索引区间返回有序集合中指定区间内的成员
zrem 键 值 值 移除有序集合中的一个或多个成员
zrank 键 值 返回有序集合中指定成员的索引
zcard 键 获取有序集合的成员数
zscore 键 值 得到指定成员的分数

命令演示
添加键country,分数是10,值是Japan
添加键country,分数是5,值是USA
添加键country,分数是1,值是China,分数是120,值是Korea
查询country中所有的元素
查询Japan的索引号(从0开始)
删除值为USA的元素
查询country中还有多少个元素

127.0.0.1:6379> zadd country 10 Japan
(integer) 1
127.0.0.1:6379> zadd country 5 USA
(integer) 1
127.0.0.1:6379> zadd country 1 China 120 Korea
(integer) 2
127.0.0.1:6379> zrange country 0 -1
1) "China"
2) "USA"
3) "Japan"
4) "Korea"
127.0.0.1:6379> zrank country Japan
(integer) 2
127.0.0.1:6379> zrank country USA
(integer) 1
127.0.0.1:6379> zcard country
(integer) 4
127.0.0.1:6379> zrem country USA
(integer) 1
127.0.0.1:6379> zcard country
(integer) 3

image

posted @   lipu123  阅读(62)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2023-01-16 vue路由
2021-01-16 dp迷宫方案数
2021-01-16 输出最长上升子序列的方案
2021-01-16 最大化k*g
点击右上角即可分享
微信分享提示