Redis基本概念

什么是Redis

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis的用处

缓存

缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。

排行榜

很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。

计数器

什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。

社交网络

点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。如在微博中的共同好友,通过Redis的set能够很方便得出。

最新列表

Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。

地图数据

Redis支持地理位置数据的存储和查询,通过使用Redis的地理位置数据类型(Geo),你可以将地理坐标(经纬度)与其他数据关联起来。例如,你可以将商店的位置坐标存储在Redis中,并使用Geo命令在地理范围内查询附近的商店。Redis提供了计算两个地理位置之间距离的命令。你可以使用这些命令计算两个坐标之间的距离,进而进行地图分析和路径规划。

Redis为什么这么快

  • 内存存储:Redis是使用内存(in-memeroy)存储,没有磁盘IO上的开销。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1)。
  • 单线程实现:( Redis 6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。注意:单线程是指的是在核心网络模型中,网络请求模块使用一个线程来处理,即一个线程处理所有网络请求。
  • 非阻塞IO:Redis使用多路复用IO技术,将epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
  • 优化的数据结构:Redis有诸多可以直接应用的优化数据结构的实现,应用层可以直接使用原生的数据结构提升性能。
  • 使用底层模型不同:Redis直接自己构建了 VM (虚拟内存)机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

为什么Redis单线程还是快

  • redis是内存型数据库
  • redis特殊的数据结构
  • 单线程避免锁的竞争
  • io多路复用
  • 单线程没有上下文的切换

Redis基本概念

数据库大小

Redis有16个数据库,默认情况下对数据库0进行操作。

在Redis中,每个数据库的默认大小是由系统内存的限制决定的,而不是有一个固定的默认大小。默认情况下,Redis会尽可能使用所有可用的系统内存。

我们可以通过maxmemory这个参数用于设置Redis服务器可以使用的最大内存量。可以在Redis配置文件(redis.conf)中设置它,或者在启动Redis服务器时通过命令行选项进行设置。

例如,设置总内存限制为1GB:maxmemory 1gb。

切换数据库

在应用程序中,选择要操作的数据库(0到15之间的数据库编号),并使用Redis的SELECT命令切换到相应的数据库。并可以使用DBSIZE来查看当前数据库的大小。

Redis数据类型

RedisKey基本命令

keys *查看当前数据库的所有key
set  key添加一个key
get key获取key
type key查看key的类型
EXISTS key查询是否存在key
move key移除key
EXPIRE key 100设置过期时间为100秒
ttl key查看剩余过期时间
flushdb清空当前数据库
flushall清空所有数据库

五种基本数据类型

String

String是最常用的一种数据类型,普通的key- value 存储都可以归为此类。其中Value既可以是数字也可以是字符串。使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。

append key "test"为key追加一个test字符串
strlen key获取key的长度
incr keykey的值加一
decr keykey的值减一
incrby key nkey的值加n
decrby key nkey的值减n
GETRANGE key start end截取key的一部分
SETRANGE key n xxx从n开始替换key为xxx
mset k1 v1 k2 v2 k3 v3批量添加key

List

List是一个有序可重复的集合,其遵循FIFO的原则,底层是依赖双向链表实现的,因此支持正向、反向双重查找。通过List,我们可以很方面的获得类似于最新回复这类的功能实现。

LPUSH list demo创建list并在头部(左)放入demo
LRANGE list 0 -1查询list所有元素
LRANGE list 0 1查询list索引0-1的元素
RPUSH list demo2在list并在尾部(右)放入demo
LPOP list删除头部元素
RPOP list删除尾部元素
LINDEX n获取索引为n的元素
LLEN list获取list的长度
LREM list n key移除list中的n个key
LTRIM list start end从start开始到end结束来截取list
LINSERT list a BEFORE/AFTER value从投开始在找到的第一个a前/后添加一个value

Set

Set是一个无序的天然去重的集合,即Key-Set。此外还提供了交集、并集等一系列直接操作集合的方法,对于求共同好友、共同关注什么的功能。

sadd myset hello向set中添加元素
SMEMBERS myset查看myset所有值
SISMEMBER myset hello判断某一个值是否在myset中
scard myset获取集合中元素的个数
SRANDMEMBER myset n从set中随机获取n个元素

具体的功能实现

差集

SDIFF set1 set2

可以用于计算set1集合中有而set2集合中没有的东西。

并集

SUNION set1 set2

可以用于计算set1和set2中的所有不重复元素

交集

SINTER set1 set2

查看两个集合的相交元素,用于查找两个用户的共同好友或者共同关注的实现。

Hash

哈希类型中的 映射关系 叫作 field-value,这里的 value 是指 field 对应的 ,不是  对应的值。可以大致理解为key - map 集合。本质上和string没有什么区别。相较于string来说,hash更适合来进行对象的存储。

hset myhash field1 gao设置一个具体的filed value
hget myhash field1获取一个具体的value
hmset myhash field1 value1 field2 value2设置多个field value
hmget myhash  field1 field2 获取多个field的value
hgetall myhash获取全部的值
hdel myhash field删除指定的field value
hlen myhash获取hash的field-value数量
hexists mhash field1 判断是否存在,返回0 1
hkeys myhash获取全部field
hvals myhash获取全部value

Zset 

类似于java中的TreeSet,是Set的可排序版。此外还支持优先级排序,维护了一个score的参数来实现。适用于排行榜和带权重的消息队列等场景。

zadd score 98 a为score集合添加a,值为98
zrangebyscore score min max从min到max进行从小到大的排序
zrangebyscore score min max withscores从min到max进行从小到大的排序并输出score

zreverange max min

从max到min进行从大到小的排序
zcard score获取score的元素个数

跳跃表 

跳跃表(SkipList)是用于有序元素序列快速搜索查找的一个数据结构,跳表是一个随机化的数据结构,实质是通过一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引实现快速查找。调表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。它在性能上和红黑树,avl树不相上下,但跳表原理十分简单。

三种特殊数据类型

Geospatial

主要用于存储地理位置信息,并对存储的信息进行操作,适用场景如朋友的定位、附近的人、打车距离计算等。

geoadd china:city 116.40 39.90 beijing添加北京的经纬度
geodist china:city beijing shanghai km计算北京和上海的直线距离单位为km
geopos china:city beijing获取北京的经纬度坐标
georadius china:city 110 30 1000 km查询这个坐标1000km范围内的元素
georadius china:city 110 30 1000 km withdist查询这个坐标1000km范围内的元素并显示具体距离
georadiusbymember china:city beijing 1000km查询距离北京1000km内的元素

Hyperlog

HyperLogLog 是一种用于统计基数的数据集合类型,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。场景:统计网页的UV(即Unique Visitor,不重复访客,一个人访问某个网站多次,但是还是只计算为一次)。统计时大概有0.81%的误差,是完全可以忽略不计的。

基数
比如数据集{ 1,3,5,7,5,7,9} ,那么这个数据集的基数集则为{1,3,5,7,9},基数(不重复元素)为5(个)

如果允许有误差--网页访问量       使用hyperlog

如果不允许有误差--共同好友       使用set

pfadd mykey q w e r新增一个数据集
pfcount mykey求数据集的数据量
pfmerge mykey3 mykey1 mykey2合并mykey1 mykey2到mykey3中

Bitmap

Bitmap想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在Bitmap中叫做偏移量。使用Bitmap实现统计功能,更省空间。如果只需要统计数据的二值状态,例如商品有没有、用户在不在等,就可以使用 Bitmap,因为它只用一个 bit 位就能表示 0 或 1。

打卡案例

setbit sign 0 1设置周一打卡
getbit sign 0获取周一打卡情况
bitcount sign统计这周打卡情况,可以指定时间段

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本2

变量 变量是在程序中保存用户数据的一段内存存储空间,变量名是内存空间的首地址 字母、数字、下划线组成,不能以数字开头 原则:直接使用,不需要变量声明 格式:变量名 变量的值 环境变量 关闭窗口即会失效 若要永久生…

数据结构—红黑树

红黑树介绍 红黑树(Red Black Tree)是一种自平衡二叉查找树。由于其自平衡的特性,保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作,性能表现稳定。 在 JDK 中,TreeMap、TreeSet 以及 JDK1.8 的 …

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成 目录 数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成&#xf…

深度学习实践(一)基于Transformer英译汉模型

本文目录 前述一、环境依赖二、数据准备1. 数据加载程序解析word_tokenize()将字符串分割为一个个的单词,并由列表保存。 2. 构建单词表程序解析(1)将列表里每个子列表的所有单词合并到一个新列表(没有子列表)中。&…

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表 文章目录 RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表1. MQTT概览2. MQTT 5.0 特性1. 特性概要2. Docker中安装RabbitMQ及启用MQTT5.0协议 3. MQTT 5.0 功能列表1. 消息过期1. 描述2. 举例3. 实现 2. 订阅标识…

浅聊java集合框架中的java.util.LinkedList

java集合框架总览 Java集合框架是一个用来代表和操纵集合的统一架构,它为管理和组织对象的集合提供了一组类和接口。这个框架包含三个主要部分:接口、实现和算法。 接口: Collection:这是集合框架的根接口,定义了集…

亚马逊运营必看!如何运用自养号测评获得买家评论转销量?

作为亚马逊卖家,相信大家对亚马逊的产品星级评分 (Rating) 都不陌生,这几颗亮眼的星星,不仅可以让你的Listing脱颖而出,获得足够多、足够高的产品评分,也是促使消费者下单的重要因素之一。 那么,亚马逊运营…

3D可视化技术亮相高铁站,引领智慧出行新潮流

在科技飞速发展的今天,我们的生活正经历着前所未有的变革。高铁站作为现代交通的重要枢纽,也在不断地创新和进步。 3D可视化技术通过三维立体的方式,将高铁站内部和外部的结构、设施、流线等以更加直观、生动的形式呈现出来。乘客们只需通过手…

全国高等学校sql

教育部颁发的最新高等学校名单,sql已整理好(按照省份树形结构),是mysql8版本的 全国高等学校:预览地址:https://kdocs.cn/l/ckaFzCWMV1jn sql下载地址: https://pan.imgbed.link/file/22581

mac/win使用pyinstaller打包app/exe文件,活着执行脚本,双击运行

🌸 踩坑记录 python环境最好使用虚拟环境,推荐使用conda管理,并且若本地有python环境,不要使用和 本地环境版本 相同的虚拟环境 这里踩坑较多,已经记不清楚注意点 虚拟环境python版本不要和本地环境一样 mac/win只能…

匿名信一封来信一封云来信表白祝福道歉短信H5公众号,小程序系统搭建(搭建赠送人工传话系统+主机管理面板)

“一封来信”是最近某音上爆火的一个活动话题,可以通过H5网站,编辑自己想要对某人说的话或者祝福,网站会把您想说的发给您预留的号码,可以特定时间,特定话题。 最近的兴起是给朋友或暗恋的人发送新年祝福,…

Leetcode算法训练日记 | day21

一、二叉搜索树的最小绝对差 1.题目 Leetcode:第 530 题 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,…

『大模型笔记』LLMs入门:从头理解与编码LLM的自注意力机制

LLMs入门:从头理解与编码LLM的自注意力机制 这里直接引用我语雀上的的文章:《从头理解与编码LLM的自注意力机制》

python第四次作业

1、找出10000以内能被5或6整除,但不能被两者同时整除的数(函数) def func():for i in range(10001):if (i % 5 0 or i % 6 0) and i % 30 ! 0:print(i,end " ")func() 2、写一个方法,计算列表所有偶数下标元素的…

AWVS/Acunetix Premium V24.3.2403高级版漏洞扫描器

前言 Acunetix Premium 是一种 Web 应用程序安全解决方案,用于管理多个网站、Web 应用程序和 API 的安全。集成功能允许您自动化 DevOps 和问题管理基础架构。 Acunetix Premium:全面的 Web 应用程序安全解决方案 Web 应用程序对于企业和组织与客户、…

优先级队列

优先级队列的基本使用 模拟实现上面的接口函数&#xff0c;优先级队列不是队列&#xff0c;而是类似一个堆一样的东西&#xff0c;我们先来试试它的接口函数是怎么个样子的。 需要包含的头文件是queue。 #include<iostream> #include<queue> using namespace std;…

Qt Creator 新建项目

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、使用 Qt Creator 新建项目 1、新建项目 2、选择项目模板 3、选择项目路径 4、选择构建系统 5…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑&#xff0c;近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

PaddleVideo:onnx模型导出

本文节介绍 PP-TSM 模型如何转化为 ONNX 模型&#xff0c;并基于 ONNX 引擎预测。 1&#xff1a;环境准备 安装 Paddle2ONNX python -m pip install paddle2onnx 安装 ONNXRuntime # 建议安装 1.9.0 版本&#xff0c;可根据环境更换版本号 python -m pip install onnxrunti…

windows10/11重启电脑自动开启热点

windows10/11重启电脑自动开启热点 一、前言二、要做的所有步骤及原理2.1 下载文件2.2 打开系统运行PS1文件限制2.3 给.bat文件创建桌面快捷方式2.4 关闭热点&#xff0c;双击快捷方式&#xff0c;查看热点是否成功开启2.5 将快捷方式加入开启自启 一、前言 有某种场景&#x…