redis简介

Redis(Remote Dictionary Server)是一个由Salvatore Sanfilippo编写的,基于key-value的存储系统

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型

与其他 key - value 缓存产品相比的特点

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

与其他 key - value 缓存产品的区别

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis的优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

搭建redis环境

这里使用docker进行搭建,docker run -itd --name redis -p 6379:6379 redis,它会自动下载redis镜像并启动

使用docker exec -it redis bash进入redis容器中,进入根目录,使用find . -name "redis*"查找所有redis工具

可视化工具

推荐两款免费开源的工具 Medis(https://github.com/x2jia/medis)和 AnotherRedisDesktopManager(https://github.com/qishibo/AnotherRedisDesktopManager)

对于Github访问比较慢的朋友,推荐一款浏览器插件 “Github加速”

然后进入下载页面,点击“加速下载”,速度比之前快多了

Medis(69.2MB)

Medis 是一个可视化的 Redis 客户端,基于 Electron、React 和 Redux 平台构建,由很多很棒的 Node.js 模块所组成,特别是 ioredis 和 ssh2。支持全平台(包含 windos,mac,linux)。支持string,hash,list,set,zset类型的字段

AnotherRedisDesktopManager(54.2MB,推荐)

Another Redis DeskTop Manager作为一款基于nodejs开发的免费的Redis可视化管理工具,可以运行在Windows、Linux、Mac平台,而且是开源免费应用。支持string,hash,list,set,zset,stream类型的字段。且界面较为美观新颖。功能较medis也较为全面



CLI命令

获取服务器信息

选择数据库

每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库
SELECT <databaseIndex>

数据库特性

  • Redis不支持自定义数据库的名字,每个数据库都以编号命名
  • Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问
  • 多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。

综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存

存储数据类型

各类型的使用场景

类型 简介 特性 场景
String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
Hash(字典) 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库update一个属性一样,只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化回去) 存储、读取、修改用户属性
List(列表) 链表(双向链表) 增删快,提供了操作某一段元素的API 最新消息排行等功能(比如朋友圈的时间线);消息队列
Set(集合) 哈希表实现,元素不重复 添加、删除、查找的复杂度都是O(1);为集合提供了求交集、并集合、差集等操作 共同好友;利用唯一性,统计访问网站的所有独立ip;好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 排行榜;带权重的消息队列

string(字符串)

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB

命令格式
设置 SET <key> <value>
读取 GET <key>
获取多个key的值 MGET <key1> [key2 ...]
删除 DEL <key>

hash(哈希)

Redis hash 是一个键值(key=>value)对的集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。每个 hash 可以存储 232 -1 键值对(40多亿)

操作 命令
删除一个或多个哈希表字段 HDEL <key> <field1> [<field2>]
指定字段是否存在 HEXISTS <key> <field>
将哈希表key中的字段field的值设置为value HSET <key> <field> <value>
获取哈希表中指定字段的值 HGET <key> <field>
获取哈希表中指定key的所有字段和值 HGETALL <key>
同时将多个field-value设置到哈希表key中 HMSET <key> <field1> <value1> [<field2> <value2>...]
获取所有给定字段的值 HMGET <key> <field1> [<field2> ...]
只有在字段field不存在时,设置哈希表字段的值 HSETNX <key> <field> <value>
获取哈希表中的所有字段 HKEYS <key>
获取哈希表中的所有字段 HVALS <key>
获取哈希表中的字段数量 HLEN <key>

list(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

操作 命令
移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位为秒 BLPOP <key> [<key2> ...] <timeout>
移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位为秒 BRPOP <key> [<key2>...] <timeout>
从列表中弹出一个值,将弹出的元素插入到另一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出的元素为止,超时时间单位为秒 BRPOPLPUSH <source> <destination> <timeout>
通过索引获取列表元素(负数为从后往前,超出长度返回nil) LINDEX <key> <index>
在列表的元素前或后插入元素 LINSERT <key> BEFORE|AFTER <povot> <value>
获取列表长度 LLEN <key>
移出病获取列表的第一个元素 LPOP <key>
将一个或多个值插入到列表头部 LPUSH <key> <value1> [<value2> ...]
将一个值插入到已存在的列表头部 LPUSHX <key> <value>
获取列表指定范围内的元素(包含start和stop位置) LRANGE <key> <start> <stop>
移除与value相同的元素count个(count大于0表示从头搜索,小于0表示从后往前,0表示全部) LREM <key> <count> <value>
通过索引设置列表元素的值 LSET <key> <index> <value>
让列表只保留指定区间内的元素,不在区间内的元素全部被删除 LTRIM <key> <start> <stop>
移除列表的最后一个元素,返回值为移除的元素 RPOP <key>
移除列表的最后一个元素,并将该元素添加到另一个列表并返回 RPOPLPUSH <source> <destination>
在列表中添加一个或多个值 RPUSH <key> <value1> [<value2> ...]
为已存在的列表添加值 RPUSHX <key> <value>
删除 DEL <key>

set(集合)

操作 命令

zset(有序集合,sorted set)

有序集合的每个元素都会关联一个 double 类型的分数。redis 通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

操作 命令

编写代码

添加依赖(pom.xml)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置文件(application.yml)

spring:redis:# Redis数据库索引(默认为0)database: 0# Redis服务器地址host: 114.115.160.23# Redis服务器连接端口port: 6379#Redis服务器连接密码(默认为空)password:jedis:pool:#连接池最大连接数(使用负值表示没有限制)max-active: 8#连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1#连接池中的最大空闲连接max-idle: 8#连接池中的最小空闲连接min-idle: 0#连接超时时间(毫秒)timeout: 3000

java代码

Spring Boot2 redis相关推荐

  1. SpringBoot之整合Redis分析和实现-基于Spring Boot2.0.2版本

    一.背景介绍 公司最近的新项目在进行技术框架升级,基于的Spring Boot的版本是2.0.2,整合Redis数据库.网上基于2.X版本的整个Redis少之又少,中间踩了不少坑,特此把整合过程记录, ...

  2. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson

    文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...

  3. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx

    文章目录 概述 浏览器同源策略 后台搭建 pom.xml interceptor 配置 Controller 启动测试 浏览器和session 后端工程发布到服务器上 问题复现 通过Nginx反向代理 ...

  4. Spring Boot2.1.5(2)---2.x 新特性

    Spring Boot 官网在 2019/05/15 这天发布了 Spring Boot 2.1.5 正式版. Spring Boot 2.1.5 新特性: 1.增加了 Spring Session ...

  5. 3.了解Spring Boot2自动配置原理

    了解Spring Boot2自动配置原理 1.SpringBoot特点 1.1.依赖管理 1.父项目做依赖管理 依赖管理 <parent><groupId>org.spring ...

  6. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  7. Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  8. Spring Boot + Redis 操作多种实现

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.Jedis,Redisson,Lettuce三者的区别 共同点:都提供了基于Redis操作的Java API,只是封装程度,具体 ...

  9. Spring Boot + Redis 实现各种操作,写得太好了吧!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_42105629/article/details/102589319 一.Jedis,Red ...

最新文章

  1. 【算法导论学习笔记】第3章:函数的增长
  2. mysql mysqlhotcopy_MySQL备份之mysqlhotcopy与注意事项
  3. UVa 10642 - Can You Solve It?
  4. 分享30个新鲜PSD网站模板免费下载
  5. matlab图像边缘检测分析
  6. js 基础总结(常用的反转)
  7. 从aspx后台页面向浏览器输出js文件
  8. 多尺度(有限元)降阶模型下的DNN方法
  9. 线性代数——线性组合、线性空间、基底
  10. Windows11分辨率无法调整,缩放不能选择调整
  11. vue 中使用$refs,报this.$refs.xxx.xxx() is not a function
  12. C语言的除法运算:整除/和求余%
  13. 「POI2011 R1」Conspiracy
  14. [C语言编程练习][14]编写一个程序,使用嵌套循环,按下面格式打印字母。A
  15. TSC TTP-244 Pro打印机QT版本开发
  16. 电脑软件:UPDF - 高效率高颜值的PDF编辑器
  17. 由区块链引发的密码技术讨论(番外篇)共识
  18. C#中 没有 windows media player
  19. Java教程:微信排序并加密工具类
  20. Evernote 导出到 Word

热门文章

  1. c语言中a的作用是什么意思,在c语言中* a是什么意思
  2. Ubuntu18.04使用anaconda3安装tensorflow-gpu、pytorch
  3. 虚拟现实如何让学习成为全民化体验?
  4. 总结的pandas数据结构 和需要掌握的知识点
  5. IDEA左侧的project目录中,看不到项目的文件结构图,项目目录不见了
  6. rman如何直接备份到异地硬盘,磁带机和磁带库
  7. Fiddler 手机抓包
  8. 考试系统(uniapp)第二节 (考试试题)
  9. 微信小程序 云数据库使用(上)
  10. 前端:运用js和jquery实现风琴图