Redis中的List 、Set、 Hash使用场景,用Redis写一个抽奖程序

redis的String、List、Hash、SET、ZSet五中数据类型常用的一些场景总结 Key的设计注意事项 一般以业务功能模块: 比如购物车key: cart:001,表示1号用户的购物车 简短,明了以主, 节约内存。 简单字符缓存 set key value get key 结构体或对象的存储 a) set user:1 value //value为XML或Json格式 b) mset user:1:name deer user:1:age 18 c) mget user1:name user:1:age 计数功能(... 阅读详情

Redis中的List、Set、Hash实际使用场景

List 结构

常见的操作:

  • LRANGE : LRANGE key start stop

# 从头到尾取出key为:testlist 的元素
LRANGE testlist 0 -1
  • LPUSH : LPUSH key element [element ...] 从上个元素左侧添加元素,或者说从头部添加。

LPUSH testlist 1 2 3 4
# 这里容易理解成摆放顺序为 1 2 3 4,实则不然。
LRANGE testlist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
  • LPOP:LPOP key 从集合的最左侧弹出一个元素。

LTRIM:LTRIM key start stop,截取元素,类似 java List 的 subList(),截取的下标包前不包后。

  • LLEN:LLEN key 获取 list 元素个数。

  • LREM:LREM key count element删除 count 个 element 元素。当 count 为负数,从后往前删指定的 |count| 个元素

  • BLPOP/BRPOP:BLPOP key [key ...] timeout,阻塞式地从左右侧弹出一个元素,当key里没有元素能弹出时一直阻塞等待,或者重试等待timeout秒,没有元素弹出则返回nil。

Redis value存放List类型使用场景:

  1. 基于 redis 反向命令实现先进后出的队列结构:like:lpush,lpop,基于Redis的消息队列其实就是这个原理。

  2. 基于 redis 同向命令实现后进先出的栈结构:like:lpush,lpop

  3. 基于下标操作的数组结构

  4. 阻塞队列

  5. 推荐文章列表的分页查询。

Set 结构

常用命令操作:

  • SADD 添加元素:SADD key member [member ...]

  • SISMEMBER 是否是这个集合的子集:SISMEMBER key member

  • SMEMBERS 获取集合的所有元素:SMEMBERS key

  • SMOVE 从source移动元素到destination:SMOVE source destination member

  • SPO 从集合中取出count个元素并移除:SPOP key [count]。

  • SRANDMEMBER 从集合中查询(并不移除)一个随机元素出来。

  • SUNION 求N个集合的并集:SUNION key [key ...]

  • SINTER 求N个集合的交集:SINTER key [key ...]

  • SDIFF 求N个集合的差集:SDIFF key [key ...]

Set结构的使用场景:

  • 取集合的交并差运算:共同好友

  • 用户随机抽奖

    准备key为prizevalue为:存放每位参与用户ID的Set集合。每次抽count个名额。

    • a:奖品多人少:srandmember prize count,count为负数时单人可以重复中奖。

    • b:奖品少人多:spop prize count,

    • c:抽取之后,奖品仍在奖池,下次还能重复中。srandmember prize count

    • d: 抽取之后,奖品直接从奖池拿走,不能重复中同一个奖,公司年会场景。spop prize count

  • 用户系统:用户打标签。某两位用户有相同的关注内容,那么后期用来做内容精准推荐。

Hash 结构

常用命令操作:

  • HSET设置key的field值:HSET key field value [field value ...]

  • HGET获取key的field值:HGET key field

  • HINCRBY 自增一个field 的int/folat,增幅为:increment HINCRBY/HINCRBYFLOAT key field increment

Hash结构的使用场景:

  • 存放商品明细信息,商品的浏览量,收藏量,下单量,可以通过field的自增来累计。

  • 用户的购物车信息。

    • 以客户id作为key,每位用户创建一个hash存储结构存储对应的购物车信息。

    • 将商品编号作为field,购买数量作为value进行存储

    • 添加商品:追加全新的field与value

    • 浏览:遍历hash

    • 更改数量:自增/自减,设置value值

    • 删除商品:删除field

    • 清空:删除key

    • 全选:hgetall

    • 购物车总数量:hlen

    • 增加某件商品的数量:hincrby

userId1:{
  “productId1”:2
  “productId2”:3
}
“

但是购物车商品明细数据并没有得到加速,商品信息还要二次查询数据库,面向对象再优化一把。把商品信息和购买数量再包装一层呗。

userId1:
{
  {
  “count_productId1”:2,
  “info_productId1”:"{}"
},
  {
  “count_productId2”:3,
  “info_productId2”:"{}"
},
}

好了今日 Redis的List、Set、Hash到此结束。

下期规划:

Redis中的消息订阅以及pipeline,敬请期待。

【ESP32实战】SPI驱动ILI9341屏幕:从基础绘图到汉字显示 本文详细介绍了如何使用ESP32通过SPI驱动ILI9341屏幕,从基础连接、SPI初始化到实现基础绘图、数字显示及汉字显示的全过程。文章包含实用的代码示例和优化技巧,帮助开发者快速掌握屏幕驱动技术,提升显示性能。特别针对常见问题如花屏、刷新率等提供了解决方案。 阅读详情

相关推荐

【前端HTML生成条形码——MQ】

本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例):

weixin_42588676的博客 1955

redis实现抽奖php,使用redis zset实现抽奖,奖池商品按时间随机分布

话不多说,直接上需求描述:最近需要上一期活动,这个活动是以转盘抽奖为形式的抽奖活动,要求每个用户用积分进行抽奖,且中奖率为100%即不可出现不中任何奖品的情况,之后,又加了一个要求,即不能实行纯随机的抽取,如果如此会产生一个极端情况,如果开始的时候活动极其火爆由于随机的不可控性头一天用户便将所有优质奖品全部抽走,那么后来的用户将只会抽到保底奖品。那么奖品就需要按时间分布在从活动开始到结束的时间段,...

weixin_35421203的博客 979

WRF后处理避坑指南:从namelist配置到降水计算的全流程解析

本文提供了一份详尽的WRF模式后处理避坑指南,涵盖从理解wrfout文件结构、核心变量解析到累计降水计算与专业气象图绘制的全流程。重点解析了RAINC与RAINNC的正确处理方法,并分享了使用wrf-python库高效绘制位势高度叠加风场图、累计降水图等专业图表的实战技巧与代码,旨在帮助用户规避常见错误,提升后处理效率与图表质量。

weixin_29200485的博客 362

使用redis zset实现抽奖,奖池商品按时间随机分布

话不多说,直接上需求描述:   最近需要上一期活动,这个活动是以转盘抽奖为形式的抽奖活动,要求每个用户用积分进行抽奖,且中奖率为100%即不可出现不中任何奖品的情况,之后,又加了一个要求,即不能实行纯随机的抽取,如果如此会产生一个极端情况,如果开始的时候活动极其火爆由于随机的不可控性头一天用户便将所有优质奖品全部抽走,那么后来的用户将只会抽到保底奖品。   那么奖品就需要按时间分布在...

weixin_38167363的博客 1293

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 334

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1581

022 redis场景应用-抽奖

场景分析:奖品、数量、概率; 1.应用redis做一个奖池,即存储好码(实际应该过程中应该落在数据库中); 2.用户进入抽取号码; 模拟实现: 1.依赖配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin...

诸般世界 544

AI量化学习入门指南:从零开始掌握人工智能投资策略

量化投资:利用数学模型和计算机算法进行投资决策的方法算法交易:自动执行预定义交易规则的系统机器学习:让计算机从数据中学习并改进的技术回测:用历史数据检验交易策略表现的过程特征工程:将原始数据转化为模型可理解的输入过拟合:模型过度适应历史数据,导致未来表现不佳夏普比率:衡量单位风险所获得的超额收益AI量化投资不仅仅是技术的应用,更是一种理性、系统化的投资哲学。它不追求预测市场的每一个拐点,而是通过概率思维和风险管理,在不确定性的市场中寻找统计优势。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1132

【代码笔记】抽奖算法

原来抽奖是这么一回事

youm2003的博客 679

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4503

【Agent实战】Agent Skills 深度解析:从原理到落地的完整指南

本文深入解析了Agent Skills的概念及其在AI协作中的实际应用。Skill是一种可被AI按需发现和加载的任务执行说明书,它将团队经验、规则和步骤固化为结构化文档,如SKILL.md。文章阐明了Skill与Prompt、MCP、Function Calling的关系,强调Skill专注于"怎么做"而非底层能力。重点介绍了SKILL.md的编写规范,包括元数据命名规则、描述技巧和正文内容优化,旨在帮助开发者高效构建可复用的知识资产,提升Agent的任务执行稳定性与专业性。通过清晰的示例和对比,为AI架构

少说,多做 116

使用Redis Set实现抽奖小程序

使用Redis Set实现抽奖小程序,先介绍Set的相关命令。 1、Redis Set相关命令 1.1 SADD SADD key member [member ...] 将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。 假如key不存在,则创建一个只包含member元素作成员的集合。 当key不是集合类型时,返回一个错误。 在Redis2.4版本以前,SADD 只接受单个member值。 时间复杂度: O(N),...

river106的博客 2110

电机控制基础,小白入门篇

电机,这个藏在风扇、电动车、机器人里的“动力心脏”,如何精准控制它的转速、方向甚至力量?这篇博客专为完全零基础的小白打造,用“说人话”的方式拆解电机控制的底层逻辑,帮你从“看不懂电路图”到“能调个简单电机”。 电机控制不是“大神专属”,只要掌握“电生磁、磁生力”的底层逻辑,加上动手实践,小白也能快速入门。这篇博客会陪你从“看电机转”到“让电机听话”,把复杂的控制原理变成能上手玩的“小实验”。准备好你的面包板和电机,我们一起开启“电控之旅”吧!

汽车电子软件领域知识分享 5614

Redis 16 个常见使用场景

这个场景最开始是是一篇介绍微博Redis应用的PPT中看到的,其中提到微博的Redis主要是用在在计数和好友关系两方面上,当时对好友关系方面的用法不太了解,后来看到《Redis设计与实现》中介绍到作者最开始去使用Redis便是希望能通过。利用set结构的无序性,通过Spop(RedisSpop命令用于移除集合中的指定key的一个或多个随机元素,移除后会返回移除的元素。在Redis的数据结构中,在最新的评论边上我们有一个“显示全部”的链接,点击后就可以获得更多的评论。...

LoveSummer 7万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Redis7学习——Redis的十大类型String、List、Hash、Set、Zset

上篇文章中我们已经对Redis做了基本的认识,在本文中,我们来学习Redis的基本的十大数据类型。我们知道Redis是以 k-v键值对进行存储,本文我们需要注意的是这里说的数据类型是 value 的数据类型,而key的类型都是字符串。Redis的十大数据类型如下图所示下来我们就依次对上图中的数据类型做介绍。

学习日记 1172

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【redis-01】redis基本数据类型和使用场景

redis基本数据类型和使用场景

zhenghuishengq的博客 1886

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Redis 数据类型String Hash list set使用场景

String类型使用场景 计数器 例如一篇文章有多少人看过使用 INCR article:readcount:文章id 取值为GET article:readcount:文章id hash类型使用场景 电商的购物车 hset cart:用户id 商品id 商品数量 增加同样商品的数量 hincrby cart:用户id 商品id 商品数量 取出某商品的数量 hget ca...

qq_33348135的博客 733

3. Redis(String,Stream,List,Set,Zset,Hash)

常用五大数据类型 9大类型:String(字符类型)、Hash(散列类型)、List(列表类型)、Set(集合类型)、SortedSet(有序集合类型,简称zset)、Bitmap(位图)、HyperLogLog(统计)、GEO(地理)、Stream Stream(了解即可) Redis Stream是 Redis 5.0 版本新增加的数据结构 Redis Stream主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列.

lxsxkf的博客 1919

Redis 5 种数据结构的用法&场景

Redis 提供了五种基本数据类型:String、Hash、List、Set、Sorted Set。以下是每种类型的定义、使用场景和常用命令。

Mylqs的博客 2951

Redis的五种数据结构(String、Hash、List、Set、ZSet)

第一节 Redis的安装在这一小节中,小编整理的是redis的五种数据结构,包含String、Hash、List、Set、ZSet,分别记录他们的一些常见命令和用法。首先redis不是严格意义上的单线程,它的单线程主要指的是redis的网络IO和键值对读写是由一个线程来完成的,也就是通俗来讲指的是执行客户端命令的那部分是由单线程来操作的,例如持久化操作(bgsave),集群数据同步等操作是由其它线程进行执行。主要是由于它所有的数据都是在内存中,所有的运算也就是在内存中进行运算,并且单线程的操作避免了多线程的

IUNIQUE技术册 975

Redis的list、hash、set、sorted_set

目录一、list二、hash三、set四、sorted_set 上一篇我们聊了Redis的String类型,我们都知道Redis有五大类型,除了String,还剩list、hash、set、sorted_set。同时,Redis命令的首字母很多都是和类型直接相关的,比如list中的 l ,一部分表示是list类型(除了表示left的 l )、hash的 h、set的 s,那为啥sorted_set就直接是 z 了呢,很简单,s 不是已经表示set了吗,Redis就直接取26个字母的最后一个 z来表示sort

Java和算法学习的博客 477

redis的list、hash、set、sorted_set

list 双向链表 有存取顺序 可重复 hash (map(k-v)) 支持对field进行数值计算 应用场景:点赞、收藏、详情页(面向一个人/一个事物的doc) set 无序 去重 集合操作 随机事件: srandmember key count 正数:取出一个去重结果集 不能超过已有集合 负数:取出一个可带重复的结果集,满足你要的数量 0:不返回 应用场景:抽奖 奖品:10 用户:<10/>10 中奖:是否多次 正数:每人最多一份...

weixin_43752427的博客 793

Redis不止能存储字符串,还有List、Set、Hash、Zset,用对了能给你带来哪些优势?

Redis不止能存储字符串,还有List、Set、Hash、Zset,用对了能给你带来哪些优势?

我是Java程序员廖志伟,感谢朋友们的支持! 471

Redis 核心数据类型及典型使用场景详解

Redis核心数据类型解析:深入理解五种基础数据类型的底层实现与应用场景。文章详细介绍了String(缓存/计数器)、Hash(结构化对象)、List(队列/消息)、Set(去重统计)和ZSet(排行榜)的特点与典型用法,给出类型选择建议,强调避免大Key、合理分页、设置TTL等实践要点。通过掌握这些数据结构的特性,开发者可以更高效地利用Redis构建健壮系统。文中还预告了后续将分享Redis高级特性。

m0_74023628的博客 1228

关于redis的string,list,set,zset,hash五种数据结构,各自的应用场景你能想出几个?

数据结构典型场景关键命令String缓存、计数器、分布式锁GETSETINCRList消息队列、最新动态LPUSHRPOPBRPOPSet去重、社交关系、随机抽取SADDSINTERSPOPZSet排行榜、时间线、热门搜索ZADDZINCRBYHash对象存储、配置管理、购物车HSETHGETALLHINCRBY。

weixin_42930616的博客 978

redis一共有哪些数据类型?使用场景是什么?底层原理是什么?

通过这些数据类型和底层原理,Redis 能够满足各种场景下的高性能需求。Redis 是一个高性能的键值存储系统,支持多种数据类型。

长风破浪会有时的博客 876
上一篇: 什么是G1垃圾回收器,什么是三色标记?
下一篇: Redis的发布订阅以及事务介绍
程序员阿歪
博客等级 码龄9年 8粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值