主流中间件--Redis

NOSQL

什么是NOSQL

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。

关系型数据库:以关系(由行和列组成的二维表)模型建模的数据库。简单理解:有表的就是关系型数据库。

NOSQL分类

 

Redis

什么是Redis

Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),redis的数据可以存储在内存中或者磁盘中。Redis 是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,redis严格上不是一种数据库,应该是一种数据结构化存储方法的集合

数据结构:数组、List Set Map等

Redis是将数据保存到内存的nosql。它有很多的方法,使用特定的方法就可以将存入的字符串转化为特定的数据结构保存。

Redis的特点
  • 数据保存在内存,存取速度快,并发能力强

  • 它支持存储的value类型相对更多,包括string(字符串)、list(链表-有序可重复集合)、set(无序不可重复集合)、 zset(sorted set --有序不可重复集合)和hash(哈希类型-对象)。

  • redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。

  • 提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。

  • Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

  • 支持持久化,[redis数据存储在内存中,也可以存储在磁盘上面]

  • 支持订阅/发布[有专业的订阅与发布的中间件 MQ]

总结:

1、redis是C语言写的开源免费的NoSql数据库

2、数据存放在内存,还支持持久化。存取数据快,并发能力强,数据安全高。

3、value支持的数据类型多。

4、支持多个语言客户端。

5、支持集群。(支持高并发,海量数据)

Redis、Memcached、Mysql的比较
mysqlredismemcached
类型关系型非关系型非关系型
存储位置磁盘磁盘和内存内存
存储过期不支持支持支持
读写性能非常高非常高
Redis的使用场景
  • 缓存

    经常查询数据,放到读速度很快的空间(内存),以便下次访问减少时间。减轻数据库压力,减少访问时间.而redis就是存放在内存中的。就如同:Mybatis 二级缓存 , ehcache框架 缓存。

  • 计数器

    网站通常需要统计注册用户数,网站总浏览次数等等 ,新浪微博转发数、点赞数。

    upd xxx set ckickcount=ckickcount+1 where id =?

    upd xxx set ckickcount=ckickcount-1 where id =?

  • 实时防攻击系统

    防止暴力破解,如使用工具不间断尝试各种密码进行登录。解决方案使用Redis记录某ip一秒访问到达10次以后自动锁定IP,30分钟后解锁

  • 设定有效期的应用

    设定一个数据,到一定的时间失效。验证码,登录过期, 自动解锁,购物券,红包。

  • 自动去重应用

    Uniq 操作,获取某段时间所有数据排重值 这个使用 Redis 的 set 数据结构最合适了,只需要不断地将数据往 set 中扔就行了,set 意为 集合,所以会自动排重。

  • 排行榜 可以利用redis的zset来进行处理

  • 队列

    构建队列系统 使用 list 可以构建队列系统,使用 sorted set 甚至可以构建有优先级的队列系统。

    秒杀:可以把名额放到内存队列(redis),内存就能处理高并发访问。

  • 消息订阅系统:

    Pub/Sub 构建实时消息系统 Redis 的 Pub/Sub 系统可以构建实时的消息系统,比如很多用 Pub/Sub 构建的实时聊天系统 的例子.

Redis启动和测试

启动redis-server

进入到Redis安装目录 ,虽然双击也可以启动,但是建议使用CMD执行

redis-server.exe redis.windows.conf
启动redis-client
  • 连接本机Redis直接双击 redis-cli.exe 或者执行命令

redis-cli.exe
  • 如果连接其他服务的Redis需要跟上 -h参数

redis-cli.exe -h ip -p 端口   #如  redis-client.exe -h 192.168.0.11 -p 6379
测试Redis
set name zs #设置数据
​
get name    #获取数字
​
expire name 30  # 设置过期时间
​
ttl name  #获取过期时间
​
keys *  # 获取所有的key
设置密码
临时设置
  • CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效

config set requirepass 123456
永久设置
  • 修改配置文件 redis.widows.conf ,增加代码:

requirepass 123456
登录
auth 123456

Redis命令

String的操作

String结构
  • String结构模拟图

keyvalue
namezs
age18
set key value
  • 将单个字符串值value关联到key,存储到Redis

set name zs         #key为 name, 值为zs 
get key
  • 返回key关联的字符串值

get name            #获取值,key为 name
mset key value key value
  • 同时设置一个或多个 key-value 对

mset name zs age 18     #设置了两对key ,name=zs ; age=18
mget key key
  • 获取多个值

mget name age       #获取key为name和age的数据的值
incr key
  • 将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)

incr age        #age的值增加1
decr key
  • 将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)

decr age        #将age的值减去1
incrby key number
  • 将 key 中储存的数字值增加指定数字

incrby age  2       #在age的值的基础上增加2  
decrby key number
  • 将 key 中储存的数字值减少指定数字

decrby age  2       #在age的值的基础上减去2  
SETEX key seconds value
  • 设置key-value,并设置过期时间

setex mykey 10 "Hello"  #设置 mykey的值为“hello” ,过期时间为 10s ,是set和expire的组合命令,且是原子性的
SETNX key value
  • 设置一个key-value,如果这个key不存在则设置成功返回1,否则设置不成功,返回0

setnx name zs
GETSET key value
  • 设置一个key-value,把这个key以前的值返回

getset name ls

key的操作

keys
  • 查看所有的key

keys *
​
通配符 * 代表0-多个  ?代表一个字符
del key
  • 删除指定的某个key

del username    #删除key为username的数据
expire key secnods
  • 设置key的过期时间(secnods秒后过期)

expire name 10  #设置name的过期时间10s
ttl key
  • 查看key的过期时间

ttl name        #查看name的过期时间
flushall
  • 清空整个redis服务器数据,所有的数据库全部清空

flushall
flushdb
  • 清除当前库

flushdb
select index
  • 选择数据库,redis中默认有16个数据库,名称分别为0,1,2,,,15 , index数据库索引

select 1        #选择第2个数据库
exists key
  • 查询key是否存在

exists name

List的操作

List结构

list集合可以看成是一个左右排列的队列(列表)

  • List机构模拟图

    keyvaluevaluevalue
    nameszslsls
    ages111820
lpush key value value
  • 将一个或多个值 value 插入到列表 key 的表头(最左边)

lpush names zs ls   #往key为 names 的list左边添加值“zs”和“ls”
lrange key start stop
  • 返回列表 key 中指定区间内的元素,查询所有的stop为-1即可

lrange names 0 -1       #查看names的所有元素
rpush key value value
  • 将一个或多个值 value 插入到列表 key 的表尾(最右边)

rpush names zl cq   #往key为 names 的list右边添加值“zl”和“cq”
lpop key
  • 移除并返回列表 key 的头(最左边)元素。

lpop names  #移除并返回names列表的头(最左边)元素
rpop key
  • 移除并返回列表 key 的尾(最右边)元素。

rpop names  #移除并返回names列表的尾(最右边)元素。
lrem key count value
  • 根据count值移除列表key中与参数 value 相等的元素count >0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值。

lrem names 1 zs     #删除names列表中左边第1个“zs” 
lrem names 0 ls     #删除names列表中所有的“ls”
lrem names -1 cq    #删除names列表中右边第1个“cq”
lindex key index
  • 返回列表 key 中,下标为 index 的元素

lindex names 2  #取names列表中索引为 2 的元素
ltrim key start stop
  • 对一个列表进行修剪 ,保留范围内的,范围外的删除

ltrim names 2 4     #删除names列表中索引为 2 - 4 以外的元素
Redis中如何实现栈和队列
  • list控制同一边进,同一边出就是栈

  • list控制一边进,另一边出就是队列

Set的操作

set集合是一个无序的不含重复值的队列

Set结构
  • Set机构模拟图

keyvaluevaluevalue
idcards110120130
phones182135136
sadd key value value
  • 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略

sadd colors red green yellow blue       #往colors这个set集合中存放元素: red,green,yellow,blue
smembers key
  • 返回集合 key 中的所有成员。

smembers colors
srem key member
  • 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

srem colors red     #删除colors中的 red元素
SCARD key
  • 返回集合存储的key的基数 (集合元素的数量).如果key不存在,则返回 0。

scard colors
SDIFF key [key ...]
  • 返回一个集合与给定集合的差集的元素

sdiff colors names
SISMEMBER key member
  • 返回成员 member 是否是存储的集合 key的成员.

  • 如果member元素是集合key的成员,则返回1

  • 如果member元素不是key的成员,或者集合key不存在,则返回0

sismember names zs      #判断names中是否包含 zs

ZSet的操作

ZSet(sorted sets)在Set基础上增加了“分数”,让set集合有了排序功能

ZSet结构
  • ZSet结构模拟图

keyvalue(score)value(score)value(score)
nameszs(10)ls(20)ww(30)
zadd key score value score value
  • 将所有指定成员添加到键为key有序集合(sorted set)里面,如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置

zadd heights   150 zs 160 ls        #有序集合heights中zs的分数为150 ,ls的分数是 160
ZCARD key
  • 返回key的有序集元素个数。key存在的时候,返回有序集的元素个数,否则返回0。

zcard heights
ZCOUNT key min max
  • 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。

zcount heights 150 160      #获取heignhts中分数为 150到160的元素数量
ZPOPMAX key [count]
  • 删除并返回有序集合key中的最多count个具有最高得分的成员。如未指定,count的默认值为1。

zpopmax heights 2           #删除最高分数的前2个元素
ZPOPMIN key [count]
  • 删除并返回有序集合key中的最多count个具有最低得分的成员。如未指定,count的默认值为1。

zpopmin heights 2       #删除最低分数的前2个元素
ZRANGE key start stop [WITHSCORES]
  • 返回存储在有序集合key中的指定范围的元素。 返回的元素可以认为是按得分从最低到最高排列。 如果得分相同,将按字典排序。返回给定范围内的元素列表(如果指定了WITHSCORES选项,将同时返回它们的得分)。

zrange heights 0 10 WITHSCORES  #返回heights中索引 0 到 10 的元素和其分数
ZRANK key member
  • 返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。排名以0为底,也就是说,score值最小的成员排名为0。

zrank heights zs    #返回 zs在heights的分数从小到大排名
ZREVRANK key member
  • 返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。排名以0为底,也就是说,score值最大的成员排名为0。

zreverank heights zs    #返回 zs在heights的分数从大到小排名
ZSCORE key member
  • 返回有序集key中,成员member的score值。如果member元素不是有序集key的成员,或key不存在,返回nil。

zscore heights zs       #返回 zs的分数
ZREVRANGE key start stop [WITHSCORES]
  • 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。具有相同score值的成员按字典序的反序排列。

ZREVRANGE heights 1 2   WITHSCORES      #返回索引1 - 2 的成员,按分数大到小排序
ZRANGEBYSCORE key min max WITHSCORES LIMIT offset count
  • 返回有序集合中指定分数区间内的成员,分数由低到高排序,LIMIT控制分页

ZRANGEBYSCOREkey heights 0 170 WITHSCORES LIMIT 0 10    #查询heights中0-170分之间的元素,低到高排序,0条                                                        #开始查询,每页10条
ZREVRANGEBYSCORE key max min WITHSCORES LIMIT offset count
  • 返回有序集合中指定分数区间内的成员,分数由高到低排序,LIMIT控制分页

指令是否必须说明
ZREVRANGEBYSCORE指令
key有序集合键名称
max最大分数值,可使用"+inf"代替
min最小分数值,可使用"-inf"代替
WITHSCORES将成员分数一并返回
LIMIT返回结果是否分页,指令中包含LIMIT后offset、count必须输入
offset返回结果起始位置
count返回结果数量
ZREVRANGEBYSCORE heights 170 0 WITHSCORES LIMIT 0 10    #返回heights中分数为170-0之间从第0条数查,10条

Hash的操作

Hash类似于jdk中的Map,一个key下面以键值对的方式存储数据

Hash结构
  • Hash机构模拟图

6.2.HSET key field value
  • 设置 key 指定的哈希集中指定字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段在哈希集中存在,它将被重写。

hset user:1 name zs         #给"user:1"这个key设置name=zs键值对
6.3.HGet key name
  • 获取hash类型的name键对应的值

hget user:1 name    #获取user:1总的name字段
6.4.HMSET key field value field value
  • 批量添加name=value键值对到key这个hash类型

hmset user:2 name zs age 18     #给"user:2"这个key设置name=zs键值对和age=18键值对
6.5.HMGET key field field
  • 批量获取hash类型的键对应的值

hmget user:2 name age   #获取user:2总的name和age字段
6.6.hkeys key
  • 返回哈希表 key 中的所有键

hkeys user:2    #返回user:2总的所有字段
6.7.hvals key
  • 返回哈希表 key 中的所有值

hvals user:2    #返回user:2中的所有值
6.8.hgetall key
  • 返回哈希表 key 中,所有的键和值

hgetall user:2  #返回user:2中所有key和value
6.9.存储对象的两种方式
  • 使用string结构

set user:1 {id:1,name:zs}
  • 使用hash

hset user:2 {id:2,name:ls}

写在最后:redis是当前主流的中间件,后续还会分享更多文章,笔者小,中,大厂均有面试经验,坚持每日分享java全栈知识,希望能够与大家共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/744149.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07 - matlab m_map地学绘图工具基础函数 - 绘制等高线

07 - matlab m_map地学绘图工具基础函数 - 绘制等高线 0. 引言1. 关于绘制m_contour2. 关于绘制m_contourf3. 关于绘制m_elev4. 结语 0. 引言 本篇介绍下m_map中添加绘制等高线的一系列函数及其用法&#xff0c;主要函数包括m_elev、m_contour、m_contourf还有一些函数也和绘制…

动物常见图像的图像分类数据集

常见动物图像分类数据集 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zZnCUZuNlX6MjuZImlDjTw?pwd03b9 提取码&#xff1a;03b9 数据集信息介绍&#xff1a; 文件夹 大象 中的图片数量: 1446 文件夹 松鼠 中的图片数量: 1862 文件夹 河马 中的图片数量:…

web自动化(一)selenium安装环境搭建、DrissionPage安装

selenium 简介 selenium是企业广泛应用的web自动化框架 selenium 三大组件 selenium IDE 浏览器插件 实现脚本录制 webDriver 实现对浏览器进行各种操作 Grid 分布式执行 用例同时在多个浏览器执行&#xff0c;提高测试效率 问题&#xff1a;环境搭建复杂&#xff0c;浏览器版…

天才程序员周弈帆 | Stable Diffusion 解读(四):Diffusers实现源码解读

本文来源公众号“天才程序员周弈帆”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Stable Diffusion 解读&#xff08;四&#xff09;&#xff1a;Diffusers实现源码解读 接上一篇文章[天才程序员周弈帆 | Stable Diffusion 解读…

【python013】pyinstaller打包PDF提取脚本为exe工具

1.在日常工作和学习中&#xff0c;遇到类似问题处理场景&#xff0c;如pdf文件核心内容截取&#xff0c;这里将文件打包成exe可执行文件&#xff0c;实现功能简便使用。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 3.欢迎点赞、关…

19.异常处理

学习知识&#xff1a;方法中&#xff0c;异常的抛出和捕获 Main.java&#xff1a; public class Main {public static void main(String[] args) {errtest errtest new errtest();try{errtest.testerr();} catch (ArithmeticException e) {System.out.println("这个方法…

计算机基础知识——面向对象:封装+继承+多态整理

面向对象三大特性&#xff1a;封装、继承、多态。 1.封装 将一系列相关事物的共同的属性和行为提取出来&#xff0c;放到一个类中&#xff0c;同时隐藏对象的属性和实现细节&#xff0c;仅对外提供公共的访问方式。 【JavaBean类就可以看作是封装的完美案例。】 setter和get…

【Docker】rancher 管理平台搭建

目录 1. 所有节点安装docker 2. 所有节点配置/etc/sysconfig/docker 文件修改如下配置 3. 配置证书 4. 镜像仓库导入镜像 5. 创建镜像仓库 5.1 查询上传的 image id 5.2 镜像打标签 5.3 镜像上推 6. server 节点 7. client 节点 8. 在 server 节点启动 9. 查看运行…

聚酰胺-酰亚胺(PAI)应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法

聚酰胺-酰亚胺&#xff08;PAI&#xff09;应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法 聚酰胺-酰亚胺又称PAI&#xff0c;是一种分子链呈酰亚胺环和酰胺键有规则交替排列的高性能热塑性树脂。PAI具有耐磨耗性能好、摩擦系数低、尺寸稳定性好、耐高温、耐辐射、化学稳定性…

AI 编程还有前景嘛?

自从各个大厂相继出品 AI 编程助手之后&#xff0c;AI 在编程领域的发展&#xff0c;可谓是几无寸进。 相比于 AI 在多模态领域火热&#xff0c;AI 在编程领域的热度已经完全下来了。 阿七在公众号搜索了关键词「AI编程」&#xff0c;发现搜索出来的公众号寥寥无几&#xff0…

Python读取中文路径,出现乱码问题解决方案

Python读取中文路径&#xff0c;出现乱码问题解决方案 一、问题描述二、问题解决 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 笔者在使用opencv读取带有中文路径的图片时&#xff0c;发现会出现乱…

ROS2中的CMakeLists(一)——基础知识

在使用ROS2框架开发机器人应用时&#xff0c;对各个功能包Cmakelist.txt文件的更改尤为重要。本系列旨在总头开始介绍Cmakelist.txt各条语句的意义和内涵。 Cmake已经是高度集成的构建工具&#xff0c;其作用是在不同开发环境下生成makefile文件&#xff0c;以此来执行make指令…

YOLOv8/v10项目使用教程

根据改好的YOLOv8.yaml改yolov10.yaml教程 打开ultralytics/cfg/models/v8路径&#xff0c;找到需要移植的yaml文件&#xff0c;从其中复制相关的模块。打开一个YOLOv10的yaml文件。 注释掉之前相应位置的模块&#xff0c;并粘贴上面复制的模块&#xff0c;完成。 其余使用步骤…

【Linux】使用ntp同步时间

ntp介绍 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是一种用于同步计算机时间的协议&#xff0c;工作在UDP的123端口上。它是一种客户端-服务器协议&#xff0c;用于同步计算机的时钟。通过连接到网络上的时间服务器&#xff0c;计算机可以获…

企业变革的引擎:PDM实施的策略与实践

在当今快速发展的信息技术时代&#xff0c;产品数据管理PDM系统已成为企业提升效率和竞争力的重要工具。PDM不仅是一项技术&#xff0c;更是一种管理思想的应用&#xff0c;它涉及到企业组织、管理和产品开发过程的全面变革。本文将探讨PDM实施的四大关键技术&#xff0c;为企业…

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的&#xff0c;当它注意到系统或系统核心组件陷入循环崩溃状态时&#xff0c;就会根据崩溃的程度执行不同的救援行动&#xff0c;以期望让设备恢复到正常使用的状态。 开机后会自动重启&#xff0c;进入Recovery界面。经查找&#xff0c;是…

YOLOv8+SwanHub+作物检测:从可视化训练到Demo演示

1. 项目介绍 本项目旨在利用先进的YOLOv8深度学习模型对麦穗进行高效、准确的检测。我们采用了GlobalWheat数据集&#xff0c;该数据集包含丰富的麦穗图像&#xff0c;为模型的训练提供了有力的数据支持。通过该实验&#xff0c;实现高准确率的麦穗识别&#xff0c;为农业生产提…

【深度学习】菜品目标检测软件系统

深度学习类文章回顾 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整体流程…

Matlab|【防骗帖】考虑时空相关性的风电功率预测误差建模与分析

目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 这个程序《考虑时空相关性的风电功率预测误差建模与分析》画的图片非常漂亮&#xff0c;和原文献基本一致&#xff0c;但是实际上内容并未实现出来&#xff0c;主要就是利用现有的风电预测的数据和结果做了相关的图&#…

CLion2024 for Mac[po] C和C++的跨平台解代码编辑器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…