Redis入门级

一、Redis 入门

Redis介绍

是什么?
基于内存的K/V存储中间件.

NoSQL键值对数据库
Redis不仅仅是数据库,它还能作为消息队列等等。
Redis入门级_第1张图片

在这里插入图片描述

关系型SQL和NoSQL的对比

其中应用场景是关键:
Redis入门级_第2张图片

Redis特征

1.支持多种数据结构
2.单线程,每个命令的执行具备原子性,中途不会执行其他命令(指命令处理始终是 单线程的,自6.x起改为多线程接受网络请求)
3.高性能、低延时(基于内存、IO多路复用、良好编码)4.支持数据持久化
5.支持主从、分片集群
6.支持多语言客户端

Redis安装

建议Linux下安装,直接到官网安装即可,注意安装后更改redis.conf文件,设置bind ip、requirepass密码等参数。

Redis连接方式

redis-cli
Gul
多语言SDK

Redis常用命令
Redis的命令根据数据结构分为多个组。

不用背!忘了就查:

  1. redis官网命令集: https://redis.io/commands/,中文版: http://www.redis.cn/commands.html
  2. redis-cli help命令查看,help [command]可以查看某个具体命令、help @xxx可以查看某个分组下的命令
    Redis入门级_第3张图片
通用命令.

set key value.

get key

keys pattern模糊搜索多个key。性能较差,生产环境(尤其是主节点)不建议使用. del key…

exists key判断key是否存在.

expire key设置过期时间
ttl key查询剩余存活时间,未设置过期时间则为-1

Redis基本数据结构

String类型
支持存储字符串、数字、浮点数(实际存储都是字节数组):
Redis入门级_第4张图片

key的value最大不能超过512 M!

Redis入门级_第5张图片

实际使用时,通常用冒号连接多个词来拼接key,比如[项目名]:[业务名]:[类名]:[id]。在某些GUI工具中,会自动根据冒号来划分层级,浏览更方便。

Hash类型

值是一个Hash 结构(类似Java的 HashMap) :
Redis入门级_第6张图片

常用命令:
其实就是在String命令名的基础上增加了’H’首字母
Redis入门级_第7张图片

List类型

理解为Java的 LinkedList双向链表,特点是有序、插入删除快、但查找性能一般:常见命令如下:
有点像操作一个双端队列
Redis入门级_第8张图片

Set 类型

集合,类似于Java中的HashSet,特点是单set内元素不能重复、查找性能高。常见命令如下:
分为单集合命令和多集合命令(交并差集)
Redis入门级_第9张图片

SortedSet类型

有序集合,在set的基础上给每个元素多存了一个分数,类似于value类型为整型的HashMap。特点是有序、查找性能高,适合用于排行榜、统计TopN。
常见命令:
和set结构的命令很像
Redis入门级_第10张图片

Redis客户端
主流客户端

可以在Redis官网查看所有客户端以及推荐的客户端:

https://redis.io/docs/clients

对于Java,主要推荐以下3种:
Redis入门级_第11张图片

其中,Jedis的命令和原生redis命令行的命令一致,学习成本最低(注意它是线程不安全的,通常配合连接池使用) ; Lettuce和Spring兼容最好(Spring Data Redis默认集成)、基于Netty性能最高;Redisson提供了和Java集合用法一致的分布式集合,适用于更复杂的业务场景。

Spring Data Redis

Spring Data 整合封装了一系列数据访问的操作,Spring Data Redis则是封装了对Jedis、Lettuce这两个Redis客户端的操作,提供了统一的RedisTemplate来操作Redis。
RedisTemplate针对不同的Redis数据结构提供了不同的API,划分更明确:

Redis入门级_第12张图片

注意,要在Spring Data Redis中使用Lettuce线程池的话,要额外引入apache commons-pool2依赖。

RedisTemplate序列化

RedisTemplate默认使用JDK原生序列化器,可读性差、内存占用大,因此可以用以下两种方式来改变序列化机制:
1.自定义RedisTemplate,指定key和value的序列化器
2.使用自带的StringRedisTemplate,key和value都默认使用String序列化器,仅支持写入String类型的key和value。因此需要自己将对象序列化成String来写入Redis,从 Redis 读出数据时也要手动反序列化。

你可能感兴趣的:(redis,缓存)