当前位置: 首页 > news >正文

Redis:redis基础

Redis

Remote Dictionary Service即远程字典服务

一个基于内存的key-value结构数据库,在开发中常常作为缓存存储不经常被改变的数据

基于内存存储,读写性能高

在企业中应用广泛

Redis介绍

用C语言开发的开源高性能键值对数据库,可以达到10w+的qps,可以存储丰富的value类型,被称为结构化的nosql数据库

Nosql:(Not Only Sql),泛指非关系型数据库(数据和数据之间没有联系)

是关系型数据库的补充

关系型数据库(RDBMS)

Mysql

Oracle

DB2

SQLServer

非关系型数据库(NoSql)

Redis

Mongo db

MemCached

Redis的作用

数据缓存:将数据缓存到redis中

消息队列

Redis的启动

前端模式启动(不使用)

直接运行bin/redis-server,缺点是启动完成后不能再进行任何操作除非使用ctrl+c退出

后端模式(推荐)

先修改redis.conf配置文件,修改daemonize 为yes

daemonize:后台运行

在启动时指定配置文件运行

./redis-server redis.conf
redis启动客户端
./redis-cli

Redis的终止

在redis客户端中输入
shutdown

Windows中Redis的启动和终止(仅了解)

直接打开redis-server.exe启动redis服务

默认端口号为6379

ctrl+c停止服务

打开redis-cli.exe启动redis客户端,默认连接本地Redis服务,且不需要认证即可连接成功

使用可视化工具连接redis服务器端

redis-desktop-manager

安装过程略,端口号默认6379

如果需要允许其他机器进行访问需要配置redis.conf进行内容配置

添加当前linux局域网的ip地址

切换redis数据库
select 数据库索引

注:一个redis服务器中可以包含多个数据库,客户端可以只连接Redis中的某个数据库

Redis中有db0-db15的16个数据库,不能被删除也不能新建,数据库中没有表结构,客户端默认连接第0个数据库

Redis的数据类型

redis的value支持五种数据类型

key必须为String类型,用以表示存储的数据

命名规则:

不能太长避免查询效率低

不能太短避免重复

value支持五种数据类型,表示存储的数据

string:字符串

hash:键值对

list:列表类型,存取有序,可以重复

set:集合类型,存取无需,不可重复

sorted set/zset :有序集合类型,每个元素有一个分数用以决定顺序

string类型

Redis中最基础的数据类型

字符串,整数,浮点类型都以字符串写入

最多容纳512m

常用命令
set 键 值
//添加或修改一个键值对
get 键
//根据键获取值,不存在返回nil(c语言中的null)
del 键
//删除指定键值对,返回删除个数
SETEX key seconds value 
//设置指定key的值,将key的过期时间设为seconds秒,
//即SET key value ex seconds
EXPIRE key seconds
//如果一个key存在,设置过期时间
SETNX key value/set key value nx
//保存键值对,如果key存在则不保存mset name lisi addr sh
批量添加name为lisi addr为sh
mget name age addr
批量获取name,age,addr的值
del name age
批量删除name age

hash类型操作命令

Redis中的hash类型可以看成键值均为String类型的Map容器

每个Hash中可以保存2^32-1个键值对

常用命令
hset 键 字段 值
//添加键,字段,值
hget 键 字段
//通过键,字段得到值
hmset 键 字段 值 字段 值
//multiply多个,一次添加多个字段和值
hmget 键 字段 字段
//通过键,获取多个字段和值
hdel 键 字段 字段
//删除一个或多个字段的值
hgetall 键
//得到这个键下所有的字段和值
HKEYS 键
//获取哈希表中所有字段
HVALS 键
//获取哈希表中所有值

list类型

在Redis中list类型时按照插入顺序排序的字符串链表,可以在左侧和右侧添加新元素

如果该键不存在就会创建这个键对应的链表

如果键对应的链表没有元素就会将键也移除

list可以包含的元素为2^32-1个

常用命令
lpush 键 元素 元素
//从左边向指定的键中添加一个或多个元素,返回元素个数
rpush 键 元素 元素
//从右边向指定的键中添加一个或多个元素,返回元素个数
l/rpop 键
//从左/右侧删除一个元素,返回被删除的元素
lrange 键 开始 结束
//得到键中指定范围的元素的数据
从左到右的索引为0-n
从右到左的索引为-1-(-(n+1))
所以从左到最后一个即为0--1
lindex 键 索引值
//查询指定索引的元素
llen 键
//获取列表的长度
BRPOP key1 [key2] timeout
//移出并获取列表的最后一个元素,如果列表没有元素就会阻塞队列直到有元素或超时
LREM key 删除元素个数 value值
//从表头删除指定个数的元素

Set类型

没有排序的字符集合,不可重复

可包含的最大元素数量为2^32-1个

常用命令
sadd 键 元素 元素
//向一个键中添加一个或多个元素
smemers 键
//得到这个集合中所有的元素
sismember 键 元素
//判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素
//通过键删除一个或者多个元素
sinter key1 [key2]
//返回给定所有集合的交集(集合中共有的部分)

Zset/sorted set类型

sorted set有序集合

和set集合类似,但每个元素会关联一个分数作为排序因子

通过分数进行从小到大的排序

集合成员唯一但分数可以重复

常用命令
zadd 键 分数 值 分数 值
//添加一个或多个元素,每个元素都有一个分数
zincrby key increment member
//对指定元素的分数进行增减操作
zrange 键 开始索引 结束索引
//获取指定范围的元素,得到所有元素,索引为0到-1
zrange 键 开始索引 结束索引 withscores
//查询指定元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores
//按照分数倒序获取指定的元素和对应的分数
zrem 键 值 值
//删除一个或者多个值
zcard 键
//得到元素个数
zrank 键 值
//得到元素的索引号
zscore 键 值
//得到元素的分数

Redis通用命令

keys 匹配字符
//查询所有的键,可以使用通配符
//*匹配多个字符
//?匹配一个字符
del 键1 键2
//删除任何的值类型且可以同时删除多个键
exists键
//判断键是否存在,不存在返回0,存在返回1
type键
//判断指定键的值类型,返回类型名字
select数据库编号
//选择其他数据库
move键数据库编号
//将当前数据库中指定的键移动到另一个数据库中
TTL key
//返回给定key的剩余生存时间(TTL,time to live),以秒为单位
从Redis2.8开始
key不存在或已过期:-2
key存在或者没有设置过期时间:-1
flushall
//清空redis所有库(不推荐)

Java中操作Redis

Redis的java客户端

jedis

lettuce

redisson

Jedis

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version>
</dependency>
Jedis类的常用方法

方法名即为redis中的命令名

方法参数即为命令参数

每次访问Redis数据库时都需要创建一个jedis对象

请添加图片描述

Spring Data Redis

Spring的一部分,在Spring应用中通过简单的配置即可访问Redis服务,高度封装了Redis底层开发包

@Autowired
private RedisTemplate<String,String> redisTemplate;
//注入redisTemplate@Autowired
private StringRedisTemplate stringRedisTemplate
//redisTemplate的子类,避免写泛型ValueOperations<String,String> vop = redisTemplate.opsForValue();
//根据redisTemplate获取操作String类型数据的对象
可以使用stringRedisTemplate

Redis持久化机制

服务端关闭会使数据部分丢失

因为redis服务器默认每隔一段时间才会写入一次内存数据到硬盘上

redis的持久化

因为redis的数据在ram上存储,所以断电就会丢失

所以需要保存到硬盘上做持久化操作

支持两种持久化方式:

RDB(快照)方式(默认)

将数据以快照方式写入二进制文件

默认文件名为dump.rdb

可以通过配置进行自动快照持久化

需要设置两个条件

时间和修改键数,当两个条件都满足时就会触发快照

优点:

持久化效率高

数据库宕机后数据恢复效率更高

缺点:

仍然可能出现数据丢失,如果在持久化之前出现宕机,就会丢失数据

AOF的存储方式

将每一个收到的写命令通过write函数追加到文件中

重启时会全部执行来进行重建

有三种同步策略

每秒同步
每次同步
不同步
优点:

AOF包含一个格式清晰,易于理解的日志文件用于记录所有修改操作,数据安全性更高,所有操作异步完成

缺点:

运行效率慢

文件更大

相关文章:

  • 基于springboot实现大学生一体化服务平台系统项目【项目源码+论文说明】
  • 运维笔记.Docker镜像分层原理
  • 拓数派与浙江平数举行「政务数据服务产品合作开发」签约仪式
  • echarts配置记录,一些已经废弃的写法
  • StringBuilder的基本操作
  • 128天的创意之旅:从初心到成就,我的博客创作纪念日回顾
  • c++ (命名空间 字符串)
  • 【全开源】在线题库微信小程序系统源码(ThinkPHP+FastAdmin+UniApp)
  • 【C++】set与map
  • 结合Django和Vue.js构建现代Web应用
  • Java程序员的AI框架,它带着Spring走来啦
  • Java面向数据编程1.1版本
  • C#_类型转换之隐式转换
  • 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  • Lvm逻辑卷调整容量
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • JavaScript-Array类型
  • JS变量作用域
  • MySQL用户中的%到底包不包括localhost?
  • React-flux杂记
  • Redis中的lru算法实现
  • Service Worker
  • spring-boot List转Page
  • 初识 webpack
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 技术胖1-4季视频复习— (看视频笔记)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 排序(1):冒泡排序
  • 前端之React实战:创建跨平台的项目架构
  • 什么是Javascript函数节流?
  • 数组大概知多少
  • 异常机制详解
  • 原生js练习题---第五课
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #android不同版本废弃api,新api。
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (10)STL算法之搜索(二) 二分查找
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (笔试题)合法字符串
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)C#调用WebService 基础
  • (转)大道至简,职场上做人做事做管理
  • .equals()到底是什么意思?