Redis的8种数据类型

article/2025/8/29 9:04:44

目录

一、概述

1、redis是什么

2、redis能干嘛

3、redis常识

        3.1、基本命令

        3.2、为什么redis是单线程

二、五大数据类型

1、String

2、List列表

3、Set

4、Hash

5、Zset有序集合

三、三种特殊数据类型

1、geospatial地理位置

2、hyperloglog

3、bitmaps


一、概述

1、redis是什么

        Redis:REmote DIctionary Server(远程字典服务器
        是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。

        Redis与其他key-value缓存产品有以下三个特点:

        1、Redis支持数据的持久化可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
        2、Redis不仅仅支持简单的 key-value 类型的数据,同时还提供list、set、zset、hash等数据结构的存储。
        3、Redis支持数据的备份,即master-slave模式的数据备份。

2、redis能干嘛

        内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务。众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

3、redis常识

        3.1、基本命令

        linux下redis的默认安装路径为:/usr/local/bin

        默认16个数据库,类似数组下标从0开始,初始默认使用1号库(索引为0)

              切换数据库命令:select x        查看DB大小:DBSIZE   数据库存储值:set  key vale  

              获取值:get key     exists key:判断是否存在该key值,存在该key值则返回1,不存在返回0

              keys *:查看数据库所有的key      flushdb:清空当前数据库      flushall:清空所有数据库

              expire key xxx:设置key值xxx秒过期        ttl key:查看该key值剩余多少秒过期

              persist key:取消过期                        type key:查看当前key的类型       

              dbsize:查看当前库的key的数量    

        3.2、为什么redis是单线程

                因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就 顺理成章地采用单线程的方案了。       

二、五大数据类型

1、String

           set key value:设置值        get key:获取值        del  key:删除key

           strlen key:获取该key值对应的value值的长度        

           append  key   "xxx":在该key对应的value值追加上xxx

           incr key:该key对应的value自增1        decr key:该key对应的value自减1'

           incrby key  xx:该key对应的value增加xx   decrby key  xx:减少xx

           getrange key x1 x2: 获取x1-x2范围内的值,类似between...and的关系,从零到负一表示全部

            String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。常规key-value缓存应用: 常规计数:微博数,粉丝数等

2、List列表

           所有的list命令都是用l开头的

           lpush  集合名   xx:将xx插入到集合头部        rpush:将xx插入到集合尾部

           lrange 集合名  x y:获取集合里x-y的值    (0  -1为获取集合中所有的值)

           lpop  集合名:移除该集合的左值         rpop:移除该集合的右值

           lindex  集合名   x:获取该集合中下标为x的值        llen  集合名:获取集合的长度

           lset 集合名 index xx:该集合下标为index的值更新为xx(不能添加)

           linsert  集合名  before  yy  xx:在集合中的yy值前面插入一个xx值

           linsert   集合名  after     yy xx:在集合中的yy值后插入一个xx值

总结:

        1、它是一个字符串链表,left,right 都可以插入添加

        2、如果键不存在,创建新的链表 如果键已存在,新增内容

        3、如果值全移除,对应的键也就消失了

        4、链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

        list就是链表使用Lists结构,我们可以轻松地实现最新消息排队等功能。List的另一个应用就是消息队列,可以利用List的PUSH操作,将任务存在List中,然后工 作线程再用POP操作将任务取出进行执行。Redis还提供了操作List中某一段的api,你可以直接查询,删 除List中某一段的元素。 Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部 添加或者删除元素,这样List即可以作为栈,也可以作为队.

3、Set

        set中的值是不能重复的

        sadd  集合名  值:向set集合中添加值        smembers  集合名:查看该set集合中所有的值

        srem 集合名 值:移除set集合中的某个值      srandmember 集合名:随机取出集合中的一个值

        spop 集合名:随机删除一些set集合中的元素   smove set1 set2 "xx":把set1中的xx移动到set2

        sdiff  set1 set2:差集        sinter set1 set2:交集        sunion set1 set2:并集       

4、Hash

        hset   集合名  key1   value1:给map集合中添加一个或者多个key-value键值对

        hget 集合名  key:获取对应的key的value值        hgetall 集合名:获取集合中所有的键值对

        hexists  集合名   key:判断该集合中的指定key是否存在    hkeys 集合名:获取集合中所有的key

5、Zset有序集合

        zadd 集合名   scroe值    xx:想集合中增加xx值,排序的时候通过score的值进行排序

        zrange 集合名 0 -1:查询集合中所有的值,默认按照score值的升序排列

        zrangebyscore 集合名  -inf +inf:按score值升序排列,可以用具体值替换+-inf,例如[-inf,2000]

        zrevrangebyscore  集合名   +inf -inf:按照score的值降序排列

        zrem  集合名  值:移除该集合中的指定元素        zcard  集合名:获取有序集合中的元素的个数

三、三种特殊数据类型

1、geospatial地理位置

        geoadd     MM    经度1 纬度1  城市1   经度2 纬度2 城市2:在MM中存储两个城市的位置信息

        geopos    MM     城市1:取出MM中指定城市的的经度和纬度

        geodist    MM    城市1  城市2   m/km:计算两个城市之间的距离,单位为m/km

        georadius     MM    经度 纬度 500km:MM下所有距离该位置半径为500km的范围内的城市

        georadiusbymember MM  城市1 1000km:找出MM下距离城市1000km范围内的城市

2、hyperloglog

        基数:一个集合中不重复的元素的个数        HyperLogLog则是一种算法,它提供了不精确的去重计数方案。

        优点:在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

        命令:

         [PFADD key element [element ...] 添加指定元素到 HyperLogLog 中。

         [PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。

         [PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog,并 集计算

        测试:

3、bitmaps

        setbit key offset value : 设置 key 的第 offset 位为value (1或0)

# 使用 bitmap 来记录上述事例中一周的打卡记录如下所示:

# 周一:1,周二:0,周三:0,周四:1,周五:1,周六:0,周天:0 (1 为打卡,0 为不打卡)

127.0.0.1:6379> setbit sign 0 1

127.0.0.1:6379> setbit sign 1 0

127.0.0.1:6379> setbit sign 2 0

127.0.0.1:6379> setbit sign 3 1 

127.0.0.1:6379> setbit sign 4 1 

127.0.0.1:6379> setbit sign 5 0 

127.0.0.1:6379> setbit sign 6 0 

        getbit  key offset 获取offset设置的值,未设置过默认返回0 

127.0.0.1:6379> getbit sign 3 # 查看周四是否打卡

1

127.0.0.1:6379> getbit sign 6 # 查看周七是否打卡

0

        bitcount key [start, end] 统计 key 上位为1的个数 

# 统计这周打卡的记录,可以看到只有3天是打卡的状态:

127.0.0.1:6379> bitcount sign

3


http://chatgpt.dhexx.cn/article/NfI9ho1V.shtml

相关文章

Redis五种基本数据类型

五种基本数据类型 redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型 主要包括常见的5种数据类型,分别是:String、List、Set、…

离散数学课后习题答案 左孝凌版

离散数学课后习题答案(左孝凌版) ,部分截图如下 太多了,就不在一一复制,可以扫描最上面的二维码,关注微信公众“数据结构和算法”,回复离散数学的拼音简称lssx即可获得下载地址

离散数学实验三 · 最短路径计算

一、实验目的 通过本实验的学习理解Dijkstra算法,并且编码实现最短路径问题。 二、实验内容 Dijkstra算法的理解; 算法概念:设G(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合&…

离散数学 习题篇 —— 等价关系的计数

题目: 集合A(1≤∣A∣≤100)上不同的等价关系一共多少个? 输入格式: 一行,一个整数n(1≤n≤100),表示集合A的元素个数。 输出格式: 集合A上不同等价关系的个数模1097,即输出其个数模1000000007。…

《离散数学》期末练习题

《离散数学》期末练习题 一、填空题 1、若p,q为二命题,p→q真值为0 当且仅当 。 2、A{1,{2,3}},则幂集P(A) 。 3、对于公式x(P(x)∨Q(x)),其中P(x):x1,Q(x):x2,当个体域为{1,2}时…

离散数学——命题逻辑

命题逻辑 命题命题的表示 命题联结词否定词:┐(~,Negation)合取词:∧(Conjunction)析取词:∨(Disjunction)条件词:→(条件,Conditional)双条件词:↔(等值,Biconditional)联结词的注意…

离散数学 (II) 习题 9

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、 i 是虚数单位,即 i^2^ −1。考虑如下的 4 个二阶方阵:图一G {A, −A, B, −B, C, −C, D, −D} 是由矩阵组成的集合。(1) 请验证 G 对…

-离散数学-期末练习题解析

一、 选择题二. 填空题三、 计算题四、 简答题五、 证明题六、应用题 一、 选择题 下列句子中,( )是命题。 A . 2是常数 B. 这朵花多好看啊! C. 请把们关上! D. 下午有会吗? A 命题是能判断真假的陈述句 B…

离散考试题计算机,离散数学试题及答案_离散数学试题库_离散数学试卷及答案...

离散数学试题及答案 一、填空 20% (每小题2分) 1、 P:你努力,Q:你失败。“除非你努力,否则你将失败”的翻译为 “虽然你努力了,但还是失败了”的翻译为 。 2、论域D={1,2},指定谓词P 则公式?x?yP(y,x)真值为。 2、 设S={a1 ,a2 ,?,a8},Bi是S的子集,则由B31所表达…

离散数学期末复习知识总结

为了方便考试复习,下面的内容摘自离散数学期末复习—学习笔记_Half_up-298415的博客-CSDN博客 1.命题逻辑的基本概念 1.1 命题与连接词 ~考察命题的概念 。判断是不是命题 命题::命题是陈述句,有唯一的解(就是有解并…

离散数学 习题篇 —— 谓词公式练习

集合A,B由输入的一系列整数构成,对表达式 ∀ x ( x ∈ A → ∃ y ∃ z ( y ∈ B ∧ z ∈ B ∧ ( y z x ) ) ) ∀x(x∈A→∃y∃z(y∈B∧z∈B∧(yzx))) ∀x(x∈A→∃y∃z(y∈B∧z∈B∧(yzx))) 求值并输出结果。 输入格式: 4行。 第一行是一个整数N(1≤…

离散数学期末习题

前言: 本文适用于应对HUEL离散数学期末考试,重点整理了HUEL离散数学期末考试范围内的题型,既可以应对HUEL离散数学期末考试,亦可以作为数据结构与算法的预备知识。 如何联系我?wei.haoranoutlook.com 目录 例题【数…

离散数学习题

离散数学习题 图论命题逻辑谓词逻辑集合与关系函数代数系统 图论 1. C 解析:根据邻接矩阵的定义进行表示 2.下面是前缀编码的是(D ) A、010,110,01,101 B、111,000,110,11 C、10, 000, 101, 01 D、00,10,110,011 3. A 4. C 5. B 6. C 7.对于…

离散数学(本)复习题

离散数学(本) 试题一、单项选择题(每小题3分,本题共15分) 1.若集合A={a,b},B= {a,b,{a,b}},则( ). 2.集合A={1&#xf…

《离散数学》速成-练习题答案(含题目)

《离散数学》速成 https://blog.csdn.net/aiqq136/article/details/113445181 课时1 课时2 课时3 课时4 课时5 课时6 课时7 课时8 课时9 课时10 课时11 课时12 课时13 课时14

Xftp6--远程上传下载文件的好帮手

前言 Xftp6用于向Linux传输文件 具体操作步骤为: 1、下载安装Xftp6并安装 2、获取LinuxIP地址,Linux环境下终端输入:ifconfig,获取IP地址 3、打开Xftp,输入ip地址,,协议为SFTP,端口号为22&…

Xshell6 + Xftp6 绿色破解

Xshell6和Xftp6破解版 百度云链接 :https://pan.baidu.com/s/110LNltAF-tbluuZY6McFBw 提取码 : irpg 解压完如下 xshell 第一步 第二步 搞定 就可以打开不止于4个窗口 Xftp6一样操作就OK!无需别的操作 简单 原文:https://blog…