Redis入门实战 之 常用数据类型

  • 原创
  • 作者:程序员三丰
  • 发布时间:2021-05-16 22:06
  • 浏览量:802
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

String 字符串

字符串基础命令
  • 通过SET指令设置指定字符串的值,通过 GET 指令获取该字符串的值。

    127.0.0.1:6379> set website '51blog.xyz'
    OK
    127.0.0.1:6379> get website
    "51blog.xyz"
    
  • 字符串键值对常用的缓存场景,缓存键存在有效期的概念,redis可以在设置缓存键值的时候,通过额外的EX参数指定有效期(单位:秒)。

    127.0.0.1:6379> set website '51blog.xuz2' ex 3
    OK
    127.0.0.1:6379> get website
    "51blog.xuz2"
    127.0.0.1:6379> get website
    (nil)
    
  • 除了字符串格式的值外,还支持数字格式的值,我们可以利用这个特性实现计数器的场景,比如:浏览数、购买数、点赞数等。

    • 可以使用INCR命令来初始化对应的键值,以及自增1。

      127.0.0.1:6379> incr site_visits
      (integer) 1
      127.0.0.1:6379> get site_visits
      "1"
      127.0.0.1:6379> incr site_visits
      (integer) 2
      127.0.0.1:6379> get site_visits
      "2"
      127.0.0.1:6379> incr site_visits
      (integer) 3
      127.0.0.1:6379> get site_visits
      "3"
      127.0.0.1:6379> incr site_visits
      (integer) 4
      127.0.0.1:6379> incr site_visits
      (integer) 5
      127.0.0.1:6379> get site_visits
      "5"
      
    • 以使用INCRBY命令来自定义设置自增步长。

      127.0.0.1:6379> incrby site_visits 5
      (integer) 10
      127.0.0.1:6379> get site_visits
      "10"
      
    • DECR / DECRBY

      127.0.0.1:6379> set orders_count 100
      OK
      127.0.0.1:6379> get orders_count
      "100"
      127.0.0.1:6379> decr orders_count
      (integer) 99
      127.0.0.1:6379> get orders_count
      "99"
      127.0.0.1:6379> decrby orders_count 5
      (integer) 94
      127.0.0.1:6379> get orders_count
      "94"
      

List 列表

应用场景
  • 消息队列

Set 集合

应用场景
  • 当业务场景需要对集合数据做去重处理而又不需要确保数据顺序时,Redis 集合是个不错的选择。
列表与集合的区别:
  • 集合拥有确定性、互异性、无序性。

    • 确定性:必须将一个确定的元素值添加到 Redis 集合,而不能把一个不确定的变量添加进去。
    • 互异性:集合中所有元素都是互异的,即任意一个元素都是唯一的,当我们尝试向集合中添加相同元素时,会忽略后续添加的值。

      127.0.0.1:6379> sadd dev_type 'php'
      (integer) 1
      127.0.0.1:6379> sadd dev_type 'php'
      (integer) 0
      127.0.0.1:6379> sadd dev_type 'java'
      (integer) 1
      127.0.0.1:6379> sadd dev_type 'php'
      (integer) 0
      127.0.0.1:6379> smembers dev_type
      1) "php"
      2) "java"
      
    • 无序性:当你向 skills 集合添加多个元素时,返回的结果和添加时的排序并不一致。

        127.0.0.1:6379> smembers dev_type
        1) "php"
        2) "java"
        127.0.0.1:6379>
        127.0.0.1:6379>
        127.0.0.1:6379> sadd dev_type 'golang'
        (integer) 1
        127.0.0.1:6379> smembers dev_type
        1) "php"
        2) "golang"
        3) "java"
      
  • 列表可以包含重复元素,列表内元素的顺序和添加时的顺序一致。

      127.0.0.1:6379> lrange skills 0 -1
      1) "PHP"
      2) "JavaScript"
      127.0.0.1:6379> lpush skills 'PHP'
      (integer) 3
      127.0.0.1:6379> lrange skills 0 -1
      1) "PHP"
      2) "PHP"
      3) "JavaScript"
    

SortedSet 有序集合

有序集合和无序集合的区别
  • 有序集合就是在集合的基础上让内部元素有确定的排序。
  • 有序的排序不是按照添加时的顺序,而是通过额外的排序字段值score指定。
  • 默认会根据score数值的升序排序。

      127.0.0.1:6379> zadd sorted_skills 0 'php'
      (integer) 1
      127.0.0.1:6379> zadd sorted_skills 1 'Javascript'
      (integer) 1
      127.0.0.1:6379> zadd sorted_skills 2 'golang'
      (integer) 1
      127.0.0.1:6379> zrange sorted_skills 0 2
      1) "php"
      2) "Javascript"
      3) "golang"
    
  • zrevrange 返回基于score排序字段的降序排序结果。

      127.0.0.1:6379> zrange sorted_skills 0 -1
      1) "php"
      2) "Javascript"
      3) "golang"
      127.0.0.1:6379> zrevrange sorted_skills 0 -1
      1) "golang"
      2) "Javascript"
      3) "php"
    
应用场景
  • 有些时候我们的业务场景既要去重,又要确保排序,比如一些热门数据排行榜的实现。

Hash 哈希字典

常用操作命令
127.0.0.1:6379> hset student.1 name 'lilei'
(integer) 1
127.0.0.1:6379> hset student.1 class '7'
(integer) 1
127.0.0.1:6379> hset student.1 grade 'A'
(integer) 1
127.0.0.1:6379> hmset student.2 name 'hanmeimei' class 7 grade 'B'
OK
127.0.0.1:6379> hkeys student.1
1) "name"
2) "class"
3) "grade"
127.0.0.1:6379> hvals student.1
1) "lilei"
2) "7"
3) "A"
127.0.0.1:6379> hget student.1 name
"lilei"
127.0.0.1:6379> hmget student.2 name grade
1) "hanmeimei"
2) "B"
127.0.0.1:6379> hmget student.2 name grade class
1) "hanmeimei"
2) "B"
3) "7"
127.0.0.1:6379> hgetall student.1
1) "name"
2) "lilei"
3) "class"
4) "7"
5) "grade"
6) "A"
应用场景
  • NoSQL数据库。
声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://www.51blog.xyz/article/1

文章归档

强烈推荐的PHP全栈开发后台管理系统
buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

推荐文章

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas vue3 three.js 微信支付 PHP全栈开发 Python AI 人工智能 AI辅助 工作经验 实战笔记