首页 > 数据库 >Redis数据结构存储系统:第三章:Redis在项目中如何使用?

Redis数据结构存储系统:第三章:Redis在项目中如何使用?

时间:2022-12-29 19:25:44浏览次数:57  
标签:存储 缓存 Redis 存储系统 redis value 类型 数据结构

简单介绍一个redis?

redis是一个key-value类型的非关系型数据库,基于内存也可持久化的数据库,相对于关系型数据库(数据主要存在硬盘中),性能高,因此我们一般用redis来做缓存使用;并且redis支持丰富的数据类型,比较容易解决各种问题
Redis的Value支持5种数据类型,string、hash、list、set、zset(sorted set);

String类型是最简单的类型,一个key对应一个value,项目中主要利用单点登录中的token用string类型来存储;

Hash类型中的key是string类型,value又是一个map(key-value),针对这种数据特性,比较适合存储对象,在项目中由于购物车是用redis来存储的,因为选择redis的散列(hash)来存储;

List类型是按照插入顺序的字符串链表(双向链表),主要命令是LPUSH和RPUSH,能够支持反向查找和遍历,如果使用的话主要存储商品评论列表,key是该商品的ID,value是商品评论信息列表;

Set类型是用哈希表类型的字符串序列,没有顺序,集合成员是唯一的,没有重复数据,底层主要是由一个value永远为null的hashmap来实现的。

我们的电商项目中没有用到这个数据类型。这个应用场景一般存储一个列表数据,但列表里面又不希望出现重复数据,比如微博应用中,可以将一个用户所有关注的对象放在一个集合中,将其所有粉丝存在一个集合,这样我们就可以实现两个人的共同好友、共同关注等需求;

zset(sorted set)类型和set类型基本是一致的,不同的是zset这种类型会给每个元素关联一个double类型的分数(score),这样就可以为成员排序,并且插入是有序的。这种数据类型如果使用的话主要用来统计商品的销售排行榜,比如:items:sellsort 10 1001 20 1002 这个代表编号是1001的商品销售数量为10,编号为1002的商品销售数量为20。

(3)我们项目中主要用redis的java客户端Jedis来操作redis数据库,用来缓存各种操作频繁,不经常修改的数据,这样就减轻了数据库的访问压力,提高了查询效率

你还用过其他的缓存吗?这些缓存有什么区别?都在什么场景下去用?

对于缓存了解过redis和memcache,redis我们在项目中用的比较多,memcache没用过,但是了解过一点;

Memcache和redis的区别:

数据支持的类型:

存储方式:redis不仅仅支持简单的k/v类型的数据,同时还支持list、set、zset、hash等数据结构的存储;memcache只支持简单的k/v类型的数据,key和value都是string类型

可靠性:memcache不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的;redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价

性能上:对于存储大数据,memcache的性能要高于redis

应用场景:

Memcache:适合多读少写,大数据量的情况(一些官网的文章信息等)

Redis:适用于对读写效率要求高、数据处理业务复杂、安全性要求较高的系统

Redis在你们项目中是怎么用的?

门户系统中的首页内容信息的展示。(商品类目、广告、热门商品等信息)门户系统的首页是用户访问量最大的,而且这些数据一般不会经常修改,因此为了提高用户的体验,我们选择将这些内容放在缓存中;
单点登录系统中也用到了redis。因为我们是分布式系统,存在session之间的共享问题,因此在做单点登录的时候,我们利用redis来模拟了session的共享,来存储用户的信息,实现不同系统的session共享;
我们项目中同时也将购物车的信息设计存储在redis中,购物车在数据库中没有对应的表,用户登录之后将商品添加到购物车后存储到redis中,key是用户id,value是购物车对象;
因为针对评论这块,我们需要一个商品对应多个用户评论,并且按照时间顺序显示评论,为了提高查询效率,因此我们选择了redis的list类型将商品评论放在缓存中;
在统计模块中,我们有个功能是做商品销售的排行榜,因此选择redis的zset结构来实现;

还有一些其他的应用场景,主要就是用来作为缓存使用。

对redis的持久化了解不?

Redis是内存型数据库,同时它也可以持久化到硬盘中,redis的持久化方式有两种:

RDB(半持久化方式):

按照配置不定期的通过异步的方式、快照的形式直接把内存中的数据持久化到磁盘的一个dump.rdb文件(二进制文件)中;

这种方式是redis默认的持久化方式,它在配置文件(redis.conf)中的格式是:save N M,表示的是在N秒之内发生M次修改,则redis抓快照到磁盘中;

 

更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_44519496/article/details/120481863

 

标签:存储,缓存,Redis,存储系统,redis,value,类型,数据结构
From: https://www.cnblogs.com/wangchuanxinshi/p/17013323.html

相关文章

  • 面试笔记1-redis
    1、什么是RDB?RDB实际上是Redis的一种数据持久化机制。它每隔一段时间就会把内存中的数据写入到磁盘中的临时文件,作为快照,宕机重启之后,就会把rdb文件读取到内存中去,就可以......
  • 【数据结构】树的概念与结构 | 树的几种常见表示方法
    前言:本章将正式开启数据结构中“树”部分的讲解,本章将介绍树的概念和结构,以及树的表示方法。0x00树的概念......
  • redis使用示例
    packagecom.atguigu.gulimall.product;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.TypeReference;importorg.junit.jupiter.api.Test;importorg.ju......
  • Redis数据结构存储系统:第二章:如何使用
    Redis与SpringBoot整合:第一步:在项目中引入redis.clientsjedis第二步:将连接池和配置类创建好RedisUtil:importredis.clients.jedis.Jedis;importredis.clients.j......
  • 随笔(十三)『docker安装redis』
    1、进入虚拟机vagrantssh2、切换为rootsuroot3、拉取redis镜像dockerpullredis4、创建实体并启动4.1)mkdir-p/mydata/redis/conf4.2)touch/mydata/redis......
  • C++数据结构01--顺序线性表实现
    今天正好又是很闲,就简单实现一下数据结构里面的顺序线性表玩一下,后面有时间再慢慢把后面几种数据结构实现一下玩一下。顺序线性表,就是在连续内存中元素按内存地址顺序排列的......
  • C++数据结构03--静态链式线性表的实现
    头文件://静态链表头文件#include"stdafx.h"usingnamespacestd;#defineMAXSIZE250typedefintElemType;typedefstruct{ElemTypedata;intcur;//存在next的指针......
  • C++数据结构02--链式线性表(单链表的实现)
    头文件://实现链式线性表#include"stdafx.h"usingnamespacestd;typedefintDataType;//将数据类型设为int类型/或者其他类型均可//链式结构体定义typedefstructNode{......
  • C++数据结构04--顺序栈的实现
    头文件:typedefstruct{SElemtypedata[MAXSIZE];//存放的数据inttop;//指向栈顶的指针}SqStack;classStackClass{public:StackClass();~StackClass();SqSta......
  • 【进阶篇】Redis实战之Jedis使用技巧详解
    一、摘要在上一篇文章中,我们详细的介绍了redis的安装和常见的操作命令,以及可视化工具的介绍。刚知道服务端的操作知识,还是远远不够的,如果想要真正在项目中得到应用,我们......