学以致用 | Redis概念与简单实操
Redis概念
Redis是一个由C语言编写、基于key-value存储结构的开源NoSQL数据库,其读写速度为10万次/秒,这个速度已经远远大于传统的关系型数据库。
使用场景
在高并发的情况下,可将Redis作为应用程序与关系数据库之间的缓存。
读操作:直接从Redis中高速读取数据;
写操作:写操作有两种方式;
A. 先将数据写入MySQL 数据库,用于持久化,然后再将写入的数据同步至Redis中,方便后面访问量上来后高速读取;
B. 在高并发访问的情况下,可以先将读写操作都在Redis中执行,然后再将Redis中的数据写入消息队列MQ中,然后从MQ中将数据写入MySQL中。
Redis自身就是一个高性能的NoSQL数据库,因此Redis可以单独作为数据库。
Redis环境搭建
访问Redis官网,根据自己需求选择版本号进行下载。
注意:
这里您可以根据您的操作系统选择对应的版本,我这里选择win版本;
Linux版本,解压命令
tar -zxvf redis-4.0.11.tar.gz,如有其它问题可以私信交流!下载完成后解压;
进入redis安装目录,找到
redis-server.exe,以管理员权限运行,服务端运行如下图所示;以管理员权限运行
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 k4v4这个值已经过期了2秒了。
如果不存在k5,给k5赋值;如果已存在,则赋值失败:
setnx k5 v5赋值一个内容为数字形式的字符串:
set num 100num 自增1:
incr numnum 自减1:
decr num综合来看,
SET key valueEX 指生命周期为:秒
PX 指生命周期为:毫秒
NX 指当key不存在时,才能执行
XX指当key存在时,才能执行
List操作
给mylist中增加多个元素:
lpush mylist a1 a2 a3 a4 a5或rpush 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 wwimage-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概念与简单实操的更多相关文章
- Hadoop(11)-MapReduce概述和简单实操
1.MapReduce的定义 2.MapReduce的优缺点 优点 缺点 3.MapReduce的核心思想 4.MapReduce进程 5.常用数据序列化类型 6.MapReduce的编程规范 用户编 ...
- Python列表和字典的简单实操例子
# coding=utf-8 name_l = [] passwd_l = [] money_l = [] goods = {} index = 0 def input_user(): print(& ...
- redis实操-sentinel
本文主要记录一些操作步骤,作为自己学习的一个记录,也供虚拟机上学习redis的人参考. 实操篇,可以参考 http://redis.cn/ 主从复制实操 在test目录下新建配置进行练习 1.mkdi ...
- 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!
本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...
- 决策树算法的Python实现—基于金融场景实操
决策树是最经常使用的数据挖掘算法,本次分享jacky带你深入浅出,走进决策树的世界 基本概念 决策树(Decision Tree) 它通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数 ...
- 生产环境搭建高可用Harbor(包括恢复演练实操)
生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...
- jmeter & 性能测试:从0到实战(实操易用、面试造火箭、升职加薪必备)
[性能基础] 性能测试概念.术语:https://www.cnblogs.com/uncleyong/p/10706519.html 性能测试流程(新):https://www.cnblogs.com ...
- 时间模块之datatime模块、os模块、sys模块、json模块、json模块实操
目录 一.模块的绝对导入和相对导入 二.包的概念 三.编程思想的转变 四.软件开发目录规范 五.常见的内置模块 一.时间模块之datatime模块 1.datetime.datetime.today( ...
- CS内网横向移动 模拟渗透实操 超详细
@Webkio 前言: 最近在跟朋友搞一些项目玩,所以最近没怎么更新内容接下来我将在虚拟中模拟内网多层靶场,进行内网渗透实验,超详细,适合小白.本文仅供网安学习,不可利用于未授权渗透工作中,否则后果自 ...
随机推荐
- 【Python】 第三周:基本数据类型
整数 python整数无限制 二进制:以0b或者0B开头,例如: 0b010,-0B101 八进制:以0o或者0O开头,例如:0o123,-0O456 浮点数 浮点数间运算存在不确定尾数,不是bug ...
- python在指定一行的下一行插入文本
给定一个程序,程序中有许多函数,比如,funcA,funcB,现在,如何在生成的函数中插入一个logger()语句? 这里用一个solidity程序做例子 pragma solidity ^0.4.0 ...
- 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇!
大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦. 这篇文章我们不谈数据结构了,来谈谈入门分布式踩过的坑.感觉到了分布式这一层,由于技术更新迭代 ...
- 【c++ Prime 学习笔记】第7章 类
类的基本思想是数据抽象和封装 数据分离抽象是一种依赖于接口和实现分离的编程/设计技术.接口包括用户能执行的操作,实现包括类的数据成员.接口实现的函数体.定义类所需的各种私有函数 封装实现了类的接口和实 ...
- 使用Servlet前Tomcat介绍
虚拟目录的映射方式:让tomcat服务器自动映射tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录.换句话说,tomcat服务器webapps目录中的web应用,外 ...
- Noip模拟51 2021.9.12
T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有 ...
- 用Python画如此漂亮的专业插图 ?简直So easy!
本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系我删文处理.多多转发,多多学习! 方法一 强烈推荐 Python 的绘图模块 matplotlib: python plottin ...
- 【linux】修改ip后hadoop只有四个节点的问题
学校的机房,每重启一次就会将虚拟机的某些配置还原到部署到学生机时候的状态(例如.etc/hosts文件中ip与主机名的映射),这个时候与我们前面所部署的hadoop就会产生IP不对应的状态,导致了ha ...
- 转载: XILINX GT的基本概念
https://zhuanlan.zhihu.com/p/46052855 本来写了一篇关于高速收发器的初步调试方案的介绍,给出一些遇到问题时初步的调试建议.但是发现其中涉及到很多概念.逐一解释会导致 ...
- 初步认识express,并创建web服务器,挂载静态资源
1.Express简介 1.1什么是Express 官方给出的概念:Express 是基于 Node.js 平台,快速.开放.极简的 Web 开发框架,官方网址 相似用途:Express 的作用和 N ...