Redis小白入门系列
一、从NoSQL说起
NoSQL 是 Not only SQL 的缩写,大意为"不只是SQL",说明这项技术是传统关系型数据库的补充而非替代。在整个NoSQL技术栈中 MemCache、Redis、MongoDB被称为NoSQL的三剑客。那么时代为什么要NoSQL数据库呢?我们来做个对比:
| 关系型数据库 | NoSQL数据库 | |
|---|---|---|
| 数据库存储位置 | 硬盘 | 内存 |
| 数据结构 | 高度组织化结构数据 | 没有预定义的模式 |
| 数据操作方式 | SQL | 所有数据都是键值对,没有声明性查询语言 |
| 事务控制 | 严格的基础事务ACID原则 | CAP定理 |
所以NoSQL数据库的最大优势体现为:高性能、高可用性和可伸缩性
二、Redis(remote dictionary server)简介
Redis英文介绍:
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
Redis中文介绍:
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
三、Redis安装
1、下载安装
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make
然后到src目录下运行redis-server
运行结果如下

执行后连接

发送一个ping会返回一个pong

四、Redis常用数据结构
1、总体结构
| key | value |
|---|---|
| string | |
| list | |
| set | |
| hash | |
| zset |
Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。
2、string类型
Redis中最基本的类型,它是key对应的一个单一制。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化对象。Redis中一个字符串值的最大容量是512M
3、List类型
Redis 列表是最简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部或者尾部。说明它的底层是基于链表实现的,所以它操作头尾效率高,中间效率低。
4、set类型
Redis内set是string类的无序集合,它是基于哈希表实现的。
5、hash类型
本身就是一个键值对集合。可以当作Java中的Map<String,Map<key,value>>对待
6、zset
zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。Zset的成员是唯一的,分数可以重复。
五、Redis命令
1.基本操作
1.切换数据库
redis默认有16个数据库
使用select进行切换,数据库索引从0开始
2.查看数据库

2.KEY操作
| KEYS PATTERN | 匹配字符 |
|---|

| TYPE KEY | 返回KEY对应的值的类型 |
|---|

| MOVE KEY DB | 把一组键值数据库移动到另一个数据库 |
|---|

| DEL KEY [KEY...] | 指定至少一个Key然后删除 |
|---|

其他命令如下
| 命令 | 用途 |
|---|---|
| EXISTS KEY | 检查指定的KEY是否存在。指定一个KEY时,存在返回1,不存在返回0.可以指定多数量 |
| RANDOMKEY | 在现有的KEY中随机返回一个 |
| RENAME KEY NEW KEY | 只有在NEWKEY不存在时执行成功,否则失败 |
| TIME | 返回UNIX时间戳 |
| TTL KEY | 以秒为单位查看KEY还能存在多久 |
| EXPIRE KEY SECONDS | 给一个KEY设置在SECONDS秒后过期,过期会被Redis移除 |
| PTTL KEY | 毫秒看存在多久 |
| PERSIST KEY | 移除过期时间,变成永久KEY |
3、String等其他操作请转至菜鸟教程这里不做赘述
https://www.runoob.com/redis/redis-strings.html
六、Redis持久化机制
Redis工作时数据都存储在内存中,万一服务器断电,则所有数据都会丢失,针对这种情况,Redis采用持久化机制来增强数据安全性。
1、RDB
(1)机制描述
每隔一定时间把内存中的数据作为一个快照保存到硬盘上的文件中,Redis默认开启RDB机制。
(2)触发时机
【1】基于默认配置
save 900 1
save 300 10
save 60 10000
含义
| 配置 | 含义 |
|---|---|
| save 900 1 | 900秒内至少有一次修改则出发保存操作 |
| save 300 10 | 300秒内至少有10次修改保存操作 |
| save 60 10000 | 60秒内至少有10000次修改保存操作 |
【2】使用保存命令
save
bgsave
【3】使用flushall命令
全部清空
【4】服务器关闭
如果执行shutdown命令让Redis正常退出,那么Redis就会执行一次持久化保存。
(3)相关配置
| 配置项 | 取值 | 作用 |
|---|---|---|
| save | "" | 禁用RDB机制 |
| dbfilename | 文件名,例如:dump.rdb | 设置RDB机制下,数据存储文件的文件名 |
| dir | Redis工作目录路径 | 指定存放持久化文件的目录的路径。注意:这里指定的必须是目录不能是文件名 |
2、AOF
(1)机制描述
根据配置文件中指定的策略,把生成数据的命令保存到硬盘上的文件中。
(2)AOF基本配置
| 配置项 | 取值 | 作用 |
|---|---|---|
| appendonly | yes | 启用AOF持久化机制 |
| no | 禁用AOF持久化机制[默认值] | |
| appendfilename | "文件名" | AOF持久化文件名 |
| dir | Redis工作目录路径 | 指定存放持久化文件的目录的路径。注意:这里指定的必须时目录不能说文件名 |
| appendfsync | always | 每一次数据修改后都将执行文件写入操作,缓慢但是最安全 |
| everysec | 每秒执行一次写入操作,折中。 | |
| no | 由操作系统在适当时候执行写入操作,最快 |
(3) AOF重写
对比下面俩组命令
| AOF重写前 | AOF重写后 |
|---|---|
| set count 1 | set count4 |
Redis小白入门系列的更多相关文章
- 性能工具之Jmeter小白入门系列之一
一.简单了解 Apache JMeter The Apache JMeter application is open source software, a 100% pure Java applica ...
- ABP入门系列(13)——Redis缓存用起来
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用 ...
- 小白入门NAS—快速搭建私有云教程系列(一)
什么是NAS 在日常的工作生活中,我们有大量的资料.文件需要存储在电脑或者其他终端设备中,但是这种方式需要电脑配备高容量的硬盘,而且需要随时随地的带着,这样是不是很麻烦? 那么,今天,我来介绍一种家庭 ...
- Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍
Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍 目录 简介 安装 入门指令 GUI 工具 C# 驱动介绍 简介 ANSI C 编写,开源,基于内存,可持久化,一个键值对的数据库, ...
- Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...
- Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间
Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...
- Redis 小白指南(四)- 数据的持久化保存(草稿)
Redis 小白指南(四)- 数据的持久化保存 简介 因为 redis 将数据保存在内存中,很容易诱发的一个问题就是,程序崩溃或服务器重启等情况如何保证数据的正常存储. 当我们以 redis 作为主数 ...
- Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
随机推荐
- Java——数据结构(链表)
链表,可扩展长度,泛型. public class Link { Node header = null; //头结点 int length;//当前链表长度 class Node { Node nex ...
- 【java提高】(17)---Java 位运算符
Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...
- CodeForces 526D Om Nom and Necklace
洛谷题目页面传送门 & CodeForces题目页面传送门 给定字符串\(a\),求它的每一个前缀,是否能被表示成\(m+1\)个字符串\(A\)和\(m\)个字符串\(B\)交错相连的形式, ...
- StudyAndroid.2 Activity生命周期
onCreate(): 当我们点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中我们会初始化当前布局setContentLayout()方法. onStar ...
- vue自定义组件中的v-model简单解释
在使用iview框架的时候,经常会看到组件用v-model双向绑定数据,与传统步骤父组件通过props传值子组件,子组件发送$emit来修改值相比,这种方式避免操作子组件的同时再操作父组件,显得子组件 ...
- Scala 系列(六)—— 常用集合类型之 List & Set
一.List字面量 List 是 Scala 中非常重要的一个数据结构,其与 Array(数组) 非常类似,但是 List 是不可变的,和 Java 中的 List 一样,其底层实现是链表. scal ...
- Leetcode之回溯法专题-47. 全排列 II(Permutations II)
Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...
- 基于Taro与Typescript开发的网易云音乐小程序
基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可 ...
- Python从入门到精通之环境搭建
本章内容: Windows系统环境搭建 Linux系统环境搭建 Mac OS系统环境搭建 一.下载python安装包 下载地址:https://www.python.org/downloads/ 二. ...
- JavaScript img标签自带的onload和onerror函数
onload 加载完成时调用触发 原生: <img src="" alt="Park" onload=“handleImageLoaded()”/> ...