当前位置:   article > 正文

Redis入门详解(一)—Redis数据类型及命令、SpringBoot整合Redis_redis关系型数据库

redis关系型数据库

1、关系型数据库与非关系型数据库

        redis是一款典型的开源的、支持网络交互的、可基于内存也可持久化的Key-Value非关系型数据库,在探讨接下来的内容之前,我们需要对非关系型数据库与它的"好兄弟"关系型数据库(这里使用MySQL数据库为例)这两个概念做个了解:

1、结构方面:

        关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束信息等等,插入的数据必须通过SQL语句遵守这些约束;非关系型数据库则对数据库的格式没有严格约束,形式松散,自由,并且不同的非关系型数据库存储的信息的格式也会有所不同,可以是以Json的文档形式储存,也可以是使用键值对的形式储存

2、关联性:

        关系型数据库的表与表之间往往存在关联,比如外键;而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合

3、查询方式:    

        关系型数据库会基于SQL语句做查询,语法标准统一;非关系型数据库查询有语法差异较大,五花八门的,例如:redis使用的方式是通过get key来获取value,而ES(elaticsearch,也是非关系型数据库的一种)则通过http请求来获取value

4、是否能够满足ACID原则:

        关系型数据库能满足事务ACID的原则;非关系数据库往往不支持事务,或者不能严格保证ACID的特性

2、Redis特性:

        1、键值型,使用方便,功能丰富

        2、单线程,能保证线程安全

        3、基于内存,低延迟,速度快

        4、支持数据持久化

        5、支持主从集群和分片集群,在安全和扩容上提供支撑

        6、支持多语言客户端,java、C都可以使用

3、Redis的安装:

        redis下载官网:Download | Redis

        博主资源:https://download.csdn.net/download/m0_68772878/88740366

        这里对Redis的安装步骤不错过多介绍,mac可以通过官网下载安装包,也可以通过Homebrew的方式安装,如果是Linux也可以使用docker安装redis,如果是mac本m1系统可以直接拿取作者已经安装配置好的资源即可。

4、Redis通用命令了解及使用

部分数据类型,都可以使用的命令,常见的有:

KEYS:查询所有符合模板的key,*匹配多个字段,?匹配一个

DEL:删除一个指定的key

EXISTS:判断key是否存在

EXPIRE:给一个key设置有效期,有效期到达自动删除该key

TTL:查看一个key剩余的有效期

TYPE:查看指定key类型

SELECT: 切换数据库,默认有16个,下标为0~15

CONFIG:配置参数设置(set)以及查看(get)

FLUSHDB: 清空当前数据库中的key

FLUSHALL:清空所有数据库中的key

MULTI:开启事务

EXEC:执行事务,相当于提交事务

DISCARD:回滚事务

示例代码如下: 

  1. 127.0.0.1:6379[1]> select 2 //切换到第二个数据库
  2. OK
  3. 127.0.0.1:6379[2]> select 1
  4. OK
  5. 127.0.0.1:6379[1]> keys *
  6. 1) "id"
  7. 2) "float"
  8. 3) "height"
  9. 4) "name"
  10. 5) "age"
  11. 127.0.0.1:6379[1]> keys *t //查询以t结尾的key
  12. 1) "float"
  13. 2) "height"
  14. 127.0.0.1:6379[1]> keys a* //查询以a开头的key
  15. 1) "age"
  16. 127.0.0.1:6379[1]> del height
  17. (integer) 1
  18. 127.0.0.1:6379[1]> type name
  19. string
  20. 127.0.0.1:6379[1]> exists id
  21. (integer) 1
  22. 127.0.0.1:6379[1]> exists ID
  23. (integer) 0
  24. 127.0.0.1:6379[1]> expire id 10
  25. (integer) 1
  26. 127.0.0.1:6379[1]> ttl id
  27. (integer) 6
  28. 127.0.0.1:6379[1]> ttl id
  29. (integer) 3
  30. 127.0.0.1:6379[1]> ttl id //此时key为id已经不存在
  31. (integer) -2
  32. 127.0.0.1:6379[1]> get id
  33. (nil)
  34. 127.0.0.1:6379[1]> keys *
  35. 1) "float"
  36. 2) "name"
  37. 3) "age"
  38. 127.0.0.1:6379[1]> config get * //查询redis所有配置
  39. 127.0.0.1:6379[1]> config get port
  40. 1) "port"
  41. 2) "6379"
  42. 127.0.0.1:6379[1]> multi //开启事务
  43. OK
  44. 127.0.0.1:6379[1](TX)> set name cola //开启事务后所有命令将不会马上执行,而是保存到队列里
  45. QUEUED
  46. 127.0.0.1:6379[1](TX)> set age 27
  47. QUEUED
  48. 127.0.0.1:6379[1](TX)> exec //提交,则之前的所有命令都会生效,并且该命令执行后事务关闭
  49. 1) OK
  50. 2) OK
  51. 127.0.0.1:6379[1]> get name //可以get到
  52. "cola"
  53. 127.0.0.1:6379[1]> multi //开启事务
  54. OK
  55. 127.0.0.1:6379[1](TX)> set num1 123
  56. QUEUED
  57. 127.0.0.1:6379[1](TX)> set num2 456
  58. QUEUED
  59. 127.0.0.1:6379[1](TX)> discard //事务回滚,之前的命令搜不会生效
  60. OK
  61. 127.0.0.1:6379[1]> get num2 //不可以get到
  62. (nil)

5、Redis五大普通数据类型的了解及命令的使用

Redis五大数据类型分别有:String、Hash、List、Set、SortedSet(ZSet)

①String常见命令的使用

        在redis中,字符串有三种格式,分别是我们了解的String常规字符串,还有int和float,这三种格式在底层都是以字节数组形式储存,所以在redis中int和float也属于String,并且这两者可以进行自增自减操作。

String常用命令汇总:  

SET:添加或修改已经存在的一个String类型的键值对

GET:根据key获取String类型的value

MSET:批量添加多个String类型的键值对

MGET:根据多个key获取多个String类型的value

INCR:让整型的key自增1

INCRBY:让一个整型的key自增指定的步长

INCRBYFLOAT:让一个浮点型的数字自增并指定步长

SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

SETEX:添加一个String类型的键值对,并且指定有限期

 示例代码如下:

  1. 127.0.0.1:6379[1]> set name cola
  2. OK
  3. 127.0.0.1:6379[1]> get name
  4. "cola"
  5. 127.0.0.1:6379[1]> mset name zoey age 24 height 168
  6. OK
  7. 127.0.0.1:6379[1]> mget name age height
  8. 1) "zoey"
  9. 2) "24"
  10. 3) "168"
  11. 127.0.0.1:6379[1]> set id 1
  12. OK
  13. 127.0.0.1:6379[1]> incr id
  14. (integer) 2
  15. 127.0.0.1:6379[1]> incrby id 5
  16. (integer) 7
  17. 127.0.0.1:6379[1]> set float 2.5 //设置浮点型数据value必须为浮点型,否则默认还是整形
  18. OK
  19. 127.0.0.1:6379[1]> incrbyfloat float 5
  20. "7.5"
  21. 127.0.0.1:6379[1]> setnx hobby ball
  22. (integer) 1
  23. 127.0.0.1:6379[1]> setnx name lily
  24. (integer) 0
  25. 127.0.0.1:6379[1]> setex hobby 10 swing //有效期以秒为单位,有效期截止后该key会自动被删除
  26. OK
  27. 127.0.0.1:6379[1]> get hobby
  28. (nil)
②Hash类型常见命令的使用

Hash类型在Redis中存储的数据可以把他理解为一个对象,是对象就会包含对象的属性和值

HSET key filed value:添加或修改已经存在的一个hash类型的filed的值

HGET key field:根据key中的field获取到value

HMSET key filed:批量添加多个hash类型key的filed的值

HMGET key filed:批量获取多个hash类型key的filed的值

HGETALL key:获取一个hash类型的key中所有的filed和值

HKEYS key:获取一个hash类型的key中的所有的filed

HINCRBY:让一个hash类型key的字段值自增并指定步长

HSETNX:添加一个hash类型key的filed值,前提是这个key不存在,否则不执行

示例代码: 

  1. 127.0.0.1:6379[2]> hset user name cola //定义对象为user 属性有name 值为cola
  2. (integer) 1
  3. 127.0.0.1:6379[2]> hset user age 27 //在对象为user中插入 属性有age 值为27的数据
  4. (integer) 1
  5. 127.0.0.1:6379[2]> hmset user sex women height 167
  6. OK
  7. 127.0.0.1:6379[2]> hget user name
  8. "cola"
  9. 127.0.0.1:6379[2]> hget user height
  10. "167"
  11. 127.0.0.1:6379[2]> hmget user name age sex
  12. 1) "cola"
  13. 2) "27"
  14. 3) "women"
  15. 127.0.0.1:6379[2]> hgetall user
  16. 1) "name"
  17. 2) "cola"
  18. 3) "age"
  19. 4) "27"
  20. 5) "sex"
  21. 6) "women"
  22. 7) "height"
  23. 8) "167"
  24. 127.0.0.1:6379[2]> hkeys user
  25. 1) "name"
  26. 2) "age"
  27. 3) "sex"
  28. 4) "height"
  29. 127.0.0.1:6379[2]> hset user id 1
  30. (integer) 1
  31. 127.0.0.1:6379[2]> hincrby user id 5
  32. (integer) 6
  33. 127.0.0.1:6379[2]> hsetnx user name zoey //key为user已经存在,插入失败
  34. (integer) 0
  35. 127.0.0.1:6379[2]> hsetnx socure chinesr 78
  36. (integer) 1
  37. 127.0.0.1:6379[2]>

 hash类型数据在可视化工具中呈现出来的对象结果

 ③List类型常见命令的使用

        和Java中的LinkedList相似,可以看做是一个双向链表结构。既可以正向检索也可以反向检索,其特征也和LinkedList类似,具有元素有序、可重复、删改速度快的特点

————————————————

        对于List而言,它的底层引用的是栈的概念,所以其命令具有入栈和出栈的命令,入栈为PUSH,出栈为POP

————————————————

LPUSH key element:向列表左侧插入一个或多个元素

LPOP key count:移除并返回列表左侧的第count个元素,没有返回nil

RPUSH:向列表右侧插入一个或多个元素

RPOP:移除并返回列表右侧的第一个元素,没有返回nil

LRANGE key start stop:返回指定范围内所有元素,开区间

BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

示例代码: 

  1. 127.0.0.1:6379[3]> lpush user cola zoey lily betty hermon mike
  2. (integer) 6
  3. 127.0.0.1:6379[3]> lpop user 1
  4. 1) "mike"
  5. 127.0.0.1:6379[3]> lpop user 2
  6. 1) "hermon"
  7. 2) "betty"
  8. 127.0.0.1:6379[3]> rpush user kitty andrew jetty
  9. (integer) 6
  10. 127.0.0.1:6379[3]> rpop user 2
  11. 1) "jetty"
  12. 2) "andrew"
  13. 127.0.0.1:6379[3]> lrange user 1 5
  14. 1) "zoey"
  15. 2) "cola"
  16. 3) "kitty"
  17. 127.0.0.1:6379[3]> lrange user 0 5
  18. 1) "lily"
  19. 2) "zoey"
  20. 3) "cola"
  21. 4) "kitty"
  22. 127.0.0.1:6379[3]> lrange user 0 6
  23. 1) "lily"
  24. 2) "zoey"
  25. 3) "cola"
  26. 4) "kitty"
  27. 127.0.0.1:6379[3]>
④Set类型常见命令 

        和Java中的HashSet类似,可以看做是一个value为空的hashMap,它有无序、元素不能重复、查找快的特性,并且支持交集、并集、差集等功能

SADD key :向set中添加一个或多个元素

SREM ket :移除set中的指定元素

SCARD key:返回set中元素的个数

SISMEMBER key member:判断 一个元素是否存在与set中,0表示不在,1表示在

SMEMBERS key:获取set中的所有元素

SINTER key1 key2:求key1和key2的交集

SDIFF key1 key2:求key1和key2的差集

SUNION key1 key2:求key1和key2的并集

示例代码:

  1. 127.0.0.1:6379[4]> sadd user mike cola zoey betty kitty
  2. (integer) 5
  3. 127.0.0.1:6379[4]> scard user
  4. (integer) 5
  5. 127.0.0.1:6379[4]> srem user zoey
  6. (integer) 1
  7. 127.0.0.1:6379[4]> sismember user zoey
  8. (integer) 0
  9. 127.0.0.1:6379[4]> sismember user mike
  10. (integer) 1
  11. 127.0.0.1:6379[4]> smembers user
  12. 1) "mike"
  13. 2) "cola"
  14. 3) "betty"
  15. 4) "kitty"
  16. 127.0.0.1:6379[4]> sadd num1 1 3 5 7 9 0
  17. (integer) 6
  18. 127.0.0.1:6379[4]> sadd num2 2 4 6 7 8 0
  19. (integer) 6
  20. 127.0.0.1:6379[4]> sinter num1 num2
  21. 1) "0"
  22. 2) "7"
  23. 127.0.0.1:6379[4]> sdiff num1 num2
  24. 1) "1"
  25. 2) "3"
  26. 3) "5"
  27. 4) "9"
  28. 127.0.0.1:6379[4]> sunion num1 num2
  29. 1) "0"
  30. 2) "1"
  31. 3) "2"
  32. 4) "3"
  33. 5) "4"
  34. 6) "5"
  35. 7) "6"
  36. 8) "7"
  37. 9) "8"
  38. 10) "9"
  39. 127.0.0.1:6379[4]>
⑤SortedSet类型常见命令:

这个类型的结构可以用于排序,他有查询速度快、可排序、元素不重复的特点,可用于实现排行榜的业务

ZADD key score member:添加一个或多个元素,存在就更新

ZREM key:删除元素

ZSCORE :获取指定元素的score值

ZRANK:获取指定元素的排名

ZCARD:获取元素个数

ZCOUNT key min max:获取指定范围内所有元素的个数

        (这里的min 和max是score的值)

ZINCRBY :指定元素自增

ZRANGE key start stop:按照score排名后,获取指定排名范围内的member

        (这里的start和stop是排名,不是score,并且结果为升序排序)

ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注:所有排名默认是升序,且第一位为0,如果要降序,在命令Z后面添加REV

  • 升序:ZRANK
  • 降序:ZREVRANK

示例代码:

  1. 127.0.0.1:6379[5]> zadd english 90.0 cola
  2. (integer) 1
  3. 127.0.0.1:6379[5]> zadd english 87.5 zoey
  4. (integer) 1
  5. 127.0.0.1:6379[5]> zadd english 70.0 kitty 69.0 jetty
  6. (integer) 2
  7. 127.0.0.1:6379[5]> zscore english zoey
  8. "87.5"
  9. 127.0.0.1:6379[5]> zrank english zoey
  10. (integer) 2
  11. 127.0.0.1:6379[5]> zcard english
  12. (integer) 4
  13. 127.0.0.1:6379[5]> zcount english 60 85
  14. (integer) 2
  15. 127.0.0.1:6379[5]> zrange english 0 3
  16. 1) "jetty"
  17. 2) "kitty"
  18. 3) "zoey"
  19. 4) "cola"
  20. 127.0.0.1:6379[5]> zrevrank english cola
  21. (integer) 0
  22. 127.0.0.1:6379[5]>

       以上五大常见数据类型使我们最常使用的,其中String数据类型使我们使用最多的;另外Redis还提供了三种特殊数据类型,在某些特殊的业务场景中,这些特殊的类型或许能够给我们多一种解决思路,但在这里不做重点分享(因为博主也不会哈哈哈哈哈

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/715842
推荐阅读
相关标签