Redis概念

Redis是一个由C语言编写、基于key-value存储结构的开源NoSQL数据库,其读写速度为10万次/秒,这个速度已经远远大于传统的关系型数据库。

使用场景

  1. 在高并发的情况下,可将Redis作为应用程序与关系数据库之间的缓存。

  • 读操作:直接从Redis中高速读取数据;

  • 写操作:写操作有两种方式;

    A. 先将数据写入MySQL 数据库,用于持久化,然后再将写入的数据同步至Redis中,方便后面访问量上来后高速读取;

    B. 在高并发访问的情况下,可以先将读写操作都在Redis中执行,然后再将Redis中的数据写入消息队列MQ中,然后从MQ中将数据写入MySQL中。

  1. Redis自身就是一个高性能的NoSQL数据库,因此Redis可以单独作为数据库。

Redis环境搭建

  1. 访问Redis官网,根据自己需求选择版本号进行下载。

    注意:

    这里您可以根据您的操作系统选择对应的版本,我这里选择win版本;

    Linux版本,解压命令tar -zxvf redis-4.0.11.tar.gz,如有其它问题可以私信交流!

  2. 下载完成后解压;

  3. 进入redis安装目录,找到redis-server.exe,以管理员权限运行,服务端运行如下图所示;

  4. 以管理员权限运行redis-cli.exe,客户端运行如下图所示;

Redis六大常见类型的核心操作

在开始讲解常见操作时,我们先来看看在操作Redis时我们需要注意的点

1.Redis对关键字或者变量不区分大小写,但对数据区分大小写。

2.在Redis中,K和KB含义不同,1K=1000 bytes,1KB =1024 bytes;同理,M和MB,G和GB也是一样的。

String操作

  • 给hello 赋值:set hello world

  • 获取hello的值 :get hello

  • 获取hello的长度 :strlen hello

  • 截取hello的值(从0位到2位):getrange hello 0 2

  • 批量给k1、k2、k3赋值:mset k1 v1 k2 v2 k3 v3

  • 批量获取k1,k2,k3的值:mget k1 k2 k3

  • 给k4赋值,并且指定该变量的声明周期为10秒:setex k4 10 v4

  • 查看k4剩余的过期时间:ttl k4

    v4这个值已经过期了2秒了。

  • 如果不存在k5,给k5赋值;如果已存在,则赋值失败:setnx k5 v5

  • 赋值一个内容为数字形式的字符串:set num 100

  • num 自增1:incr num

  • num 自减1:decr num

  • 综合来看,SET key value

  • EX 指生命周期为:秒

  • PX 指生命周期为:毫秒

  • NX 指当key不存在时,才能执行

  • XX指当key存在时,才能执行

List操作

  • 给mylist中增加多个元素:lpush mylist a1 a2 a3 a4 a5rpush mylist a1 a2 a3 a4 a5

  • 查看mylist中的前3个元素:lrange mylist 0 3

  • 查看mylist中所有的元素:lrange mylist 0 -1

  • 只保留mylist中第0个到第2个元素:ltrim mylist 0 2

  • 将mylist的最后一个元素,移动到mylist2的第一个元素:rpoplpush mylist mylist2

  • 将mylist的第二个元素值设置为x:lset mylist 2 x

  • 在mylist的a3元素前后,插入linsert mylist bdfore/after a3 y

Set操作

list中的元素可以重复,而set 中的元素不能重复(重复的元素会被忽略)

  • 给myset中增加多个元素:sadd set a1 a2 a3

  • 查看myset中的全部元素:smembers set

  • 判断myset中是否包含a2 元素:sismember set a2

  • 删除myset中的阿a2元素:srem set a2

  • 随机获取(不会删除)myset中的两个元素:srandmember set 2

  • 随机获取(并删除)myset中的一个元素:spop myset

  • 将myset中的a2移动到myset2中的一个元素:smove set a2 myset2

SortedSet操作

Set不允许重复值,但是它是无序的,也不能根据下标获取元素。但是SortedSet能解决这个问题,SortedSet可以根据score值的大小,将集合中的元素排序,进而实现有序。

  • 给student中增加多个元素(zs,ls,ww),并设置score值:zadd students 8 zs 9 ls 10 ww

  • 根据score值排序,查询0-2个元素:zrange students 0 2

  • 根据score值排序,查询第0-2个元素,并显示每个元素的score:zrange students 0 2 withscores

  • 根据score值从小到大的顺序,查询students中第0个至第2个元素(逆序):zrevrange students 0 2

  • 查询student中,score值>=8,且<10的元素:zrangebyscore students 8 10

  • 删除students中zs和ww:zrem names zs ww

    image-20211030115341851

  • 统计students中,score值介于8和10之间的元素个数:zcount students 8 10

  • 查找students中ww元素的的下标:zrank students ww

  • 获取students中,ww的score的值:zscore students ww

  • 获取students中,ww的score值逆序:zrevrank students ww

Hash 操作

  • 在Java中我们需要给一个student对象赋值,需要使用student.setName(“zs”);在Redis里面就比较简单且明了,可以使用:hset student name zs

  • 同时给多个属性赋值:hmset person name zs age 23 sex male

  • 同时获取person多个属性:hmget person name age sex

  • 获取student的name属性值:hget student name

  • 获取student全部属性名:hkeys student

  • 获取student的全部属性值:hvals student

  • 获取student的全部属性值和属性名:hgetall student

  • 删除student的name和age:hdel student age 3

Key 及其它操作

  • 给已存在的key 设置生命周期:expire k1 10 (秒) 、pexpire k1 10 (毫秒)

  • 查看当前数据库中的全部key:key *

  • 根据占位符?对key进行模糊查询:keys k?

  • 判断是否存在某一个key: exists k1

  • 查看某个key-value的数据类型:type k1

  • 查看当前数据库有多少条数据:dbsize

  • 将当前数据库中的某条数据,移动到其它数据库:move key 数据库编号

  • 清空当前数据库中的全部数据:flushdb

  • 清空全部数据库中的数据(谨慎使用哈):flushall

在学习概念和基础的时候,往往是最枯燥乏味的时候,但是越枯燥乏味的知识,在实际开发工作中用的时候越是重要​。

在下一篇文章中,我们会一起学习如何配置Redis并且如何在Java工程中如何引入并使用Redis。

学以致用 | Redis概念与简单实操的更多相关文章

  1. Hadoop(11)-MapReduce概述和简单实操

    1.MapReduce的定义 2.MapReduce的优缺点 优点 缺点 3.MapReduce的核心思想 4.MapReduce进程 5.常用数据序列化类型 6.MapReduce的编程规范 用户编 ...

  2. Python列表和字典的简单实操例子

    # coding=utf-8 name_l = [] passwd_l = [] money_l = [] goods = {} index = 0 def input_user(): print(& ...

  3. redis实操-sentinel

    本文主要记录一些操作步骤,作为自己学习的一个记录,也供虚拟机上学习redis的人参考. 实操篇,可以参考 http://redis.cn/ 主从复制实操 在test目录下新建配置进行练习 1.mkdi ...

  4. 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!

    本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...

  5. 决策树算法的Python实现—基于金融场景实操

    决策树是最经常使用的数据挖掘算法,本次分享jacky带你深入浅出,走进决策树的世界 基本概念 决策树(Decision Tree) 它通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数 ...

  6. 生产环境搭建高可用Harbor(包括恢复演练实操)

    生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...

  7. jmeter & 性能测试:从0到实战(实操易用、面试造火箭、升职加薪必备)

    [性能基础] 性能测试概念.术语:https://www.cnblogs.com/uncleyong/p/10706519.html 性能测试流程(新):https://www.cnblogs.com ...

  8. 时间模块之datatime模块、os模块、sys模块、json模块、json模块实操

    目录 一.模块的绝对导入和相对导入 二.包的概念 三.编程思想的转变 四.软件开发目录规范 五.常见的内置模块 一.时间模块之datatime模块 1.datetime.datetime.today( ...

  9. CS内网横向移动 模拟渗透实操 超详细

    @Webkio 前言: 最近在跟朋友搞一些项目玩,所以最近没怎么更新内容接下来我将在虚拟中模拟内网多层靶场,进行内网渗透实验,超详细,适合小白.本文仅供网安学习,不可利用于未授权渗透工作中,否则后果自 ...

随机推荐

  1. 基于nginx实现私有yum仓库

    基于本地光盘的源 server端IP:10.0.0.79 nginx使用默认路径.端口 yum install nginx -y #更改以root运行 sed -i '/^user/s/nginx/r ...

  2. linux 信号与处理

    一.linux信号是什么 基本概念 信号是事件发生时对进程的通知机制,也就是所谓的软件中断.信号和硬件的中断类似,是软件层对中断机制的模拟,在多数情况下是无法预测信号产生的时间,所以软件层提供了一种处 ...

  3. SudokuSolver 1.0:用C++实现的数独解题程序 【一】

    SudokuSolver 1.0 用法与实现效果 SudokuSolver 是一个提供命令交互的命令行程序,提供的命令清单有: H:\Read\num\Release>sudoku.exe Or ...

  4. Linux上传下载神器之 lrzsz

    在开发的过程中,经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时,一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能解决问题,但是这些工具需要在本地安 ...

  5. 求求你了,用Docker吧

    这是一个开始使用 Docker 的 Tutorial 大无语事件发生!大数据课实验课要用到Hadoop,实验指导是在一个Ubuntu虚机上通过安装包安装Hadoop并运行一个词频统计程序,整个实验就是 ...

  6. Java RMI学习与解读(一)

    Java RMI学习与解读(一) 写在前面 本文记录在心情美丽的一个晚上. 嗯.就是心情很美丽. 那为什么晚上还要学习呢? emm... 卷... 卷起来. 全文基本都是根据su18师傅和其他师傅的文 ...

  7. Java:static关键字小记

    Java:static关键字小记 对 Java 中的 static 关键字,做一个微不足道的小小小小记 static 修饰变量 静态变量:是被 static 修饰的变量,也称为类变量,它属于类,因此不 ...

  8. Python课程笔记(九)

    本次课程主要学习了Excel和JSON格式的一些读写操作.课程代码 一.Excel数据读写操作 1.安装模块 pip install xlrd pip install xlwt 网不好可以采用三方库: ...

  9. 架构师之路-redis集群解析

    引子 上篇<架构师之路-https底层原理>里我提到了上面的整体视图,文章也介绍了想要真正能在工作中及时正确解决问题的基本功:原理理解透彻.今天以redis集群解析为例介绍一个及时敏锐的发 ...

  10. 清除行列 牛客网 程序员面试金典 C++ Python

    清除行列 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的 ...