【学习笔记】Redis基础篇

这篇博客详细介绍了Redis的基础知识,包括Redis的NoSQL特性、安装过程、5种常用数据结构及其命令,以及如何使用Java的Jedis和SpringDataRedis客户端。还探讨了Redis的键值结构、持久化、主从集群和分片集群,是学习Redis的入门指南。
摘要由CSDN通过智能技术生成

Redis基础篇

1.初识Redis

1.1 认识NoSQL

  1. 非结构化

数据存储方式松散,修改相对容易,主要存储方式有键值(Redis)、文档型(MongoDB)、列表型(HBase)、图型(Neo4j)等。

NoSQL

  1. 无关联的

通过 Json 嵌套的方式描述数据,存在数据重复的缺点。

  1. 非SQL

没有固定的查询语句,可以是命令或者是函数等,使用方式简单,但对于不同的数据库语法要进行专门的学习。

  1. BASE

无事务,无法完全满足 ACID 特性。

sql nosql
数据结构 结构化(Structured) 非结构化
数据关联 关联的(Relational) 无关联的
查询方式 SQL查询 非SQL
事务特性 ACID BASE
存储方式 磁盘 内存
扩展性 垂直 水平
使用场景 1)数据结构固定 2)相关业务对数据安全性、一致性要求较高 1)数据结构不稳定 2)对一致性、安全性要求不高 3)对性能要求

1.2 认识Redis

Redis 诞生于2009年全称是 Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型 NoSQL 数据库。

特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

1.3 安装Redis

Redis安装部署
Redis安装说明

2.Redis常见命令

2.1 5种常用数据结构

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:

基本类型:String、Hash、List、Set、SortedSet

特殊类型:GEO、BitMap、HyperLog

在官方文档可以查看所有命令(https://redis.io/commands/)

2.2 通用命令

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

  • KEYS:查看符合模板的所有key,不建议在生产环境设备上使用
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个key的剩余有效期

2.3 不同数据结构的操作命令

2.3.1 String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串

  • int:整数类型,可以做自增、自减操作

  • float:浮点类型。可以做自增、自减操作

不管哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512M。

String类型的常见命令:
  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让 num 自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期
2.3.2 Key的结构

Redis的key允许有多个单词形成层级结构,多个单词之间用‘:’隔开,例如:

项目名:业务名:类型:id

  • user相关的key:qd:user:1
  • product相关的key:qd:product:1
2.3.3 Hash类型

Hash类型,也叫散列。其value实一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

KEY VALUE
qd:user:1 {name:“Tom”,age:20}
qd:product:1 {name:“Jerry”,age:21}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

KEY VALUE
field value
qd:user:1 name Tom
age 20
qd:product:1 name Jerry
age 21
Hash类型的常见命令:
  • HSET key field value:添加或者修改hash类型key的field的值
  • HGET key field:获取一个hash类型key的field的值
  • HMSET:批量添加多个hash类型key的field的值
  • HMGET:批量获取多个hash类型key的field的值
  • HGETALL:获取一个hash类的key中所有的field和value
  • HKEYS:获取一个hash类型的key中所有的field
  • HVALS:获取一个hash类型的key中所有的value
  • HINCRBY:让一个hash类型的key字段值自增并指定步长
  • HSTNX:添加一个hash类型的key和field值,前提是这个field不存在,否则不执行
2.3.4 List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。支持正向检索和反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表。

List类型的常见命令:
  • LPUSH key element … :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表制左侧的第一个元素,没有则返回nil
  • RPUSH key element … :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表制左右侧的第一个元素
  • LRANGE key start end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

如何利用List结构模拟一个栈?

  • 入口和出口在同一边

如何利用List结构模拟一个队列?

  • 入口和出口在不同边

如何利用List结构模拟一个阻塞队列?

  • 入口和出口在不同边
  • 出队时采用BLPOP或BRPOP
2.3.5 Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。

具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能
Set类型的常见命令:
  • SADD key member … :向set中添加一个或多个元素
  • SREM key member … :移除set中的指定元素
  • SCARD key:返回set中元素的个数
  • SISMEMBER key:判断一个元素是否存在于set中
  • SMEMBERS:获取set中的所有元素
  • SINTER key1 key2 … :求key1与key2的交集
  • SDIFF key1 key2 … :求key1与key2的差集
  • SUNION key1 key2 … :求key1与key2的并集
2.3.6 SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash 表。

SortedSet具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜之类的功能。

SortedSet类型的常见命令:
  • ZADD key score member:添加一个或多个元素到sorted set,如果已经存在则更新其score值

  • ZREM key member:删除sorted set中的一个指定元素

  • ZSCORE key member:获取sorted set中的指定元素的score值

  • ZRANK key member:获取sorted set中的指定元素的排名

  • ZCARD key:获取sorted set中的元素个数

  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

  • ZINCRBY key increment member&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值