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. 搭建hexo博客遇到的问题

    搭建hexo博客遇到的问题 常用命令 hexo clean 清除hexo缓存 hexo generate 生成文章 hexo deploy 部署 hexo new post name 新建文章名 he ...

  2. ClickHouse 存算分离架构探索

    背景 ClickHouse 作为开源 OLAP 引擎,因其出色的性能表现在大数据生态中得到了广泛的应用.区别于 Hadoop 生态组件通常依赖 HDFS 作为底层的数据存储,ClickHouse 使用 ...

  3. keras框架下的深度学习(一)手写体识别

    这个系列文章主要记录使用keras框架来搭建深度学习模型的学习过程,其中有一些自己的想法和体会,主要学习的书籍是:Deep Learning with Python,使用的IDE是pycharm. 在 ...

  4. 【数学】快速傅里叶变换(FFT)

    快速傅里叶变换(FFT) FFT 是之前学的,现在过了比较久的时间,终于打算在回顾的时候系统地整理一篇笔记,有写错的部分请指出来啊 qwq. 卷积 卷积.旋积或褶积(英语:Convolution)是通 ...

  5. 【UE4 设计模式】命令模式 Command Pattern

    概述 描述 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作. 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务 ...

  6. Java:HashTable类小记

    Java:HashTable类小记 对 Java 中的 HashTable类,做一个微不足道的小小小小记 概述 public class Hashtable<K,V> extends Di ...

  7. Java版流媒体编解码和图像处理(JavaCPP+FFmpeg)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 热身训练1 Blood Cousins Return

    点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到 ...

  9. 2021.9.9考试总结[NOIP模拟50]

    T1 第零题 神秘结论:从一个点满体力到另一个点的复活次数与倒过来相同. 于是预处理出每个点向上走第$2^i$个死亡点的位置,具体实现可以倍增或二分. 每次询问先从两个点同时向上倍增,都转到离$LCA ...

  10. Shell脚本学习笔记之(自动填充函数模板)

    其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...