| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> redis核心数据结构及命令操作 -> 正文阅读 |
|
[数据结构与算法]redis核心数据结构及命令操作 |
一、centos7环境安装redis1.wget?http://download.redis.io/releases/redis‐x.x.x.tar.gz 2.tar xzf redis‐x.x.x.tar.gz 3. #进入redis目录进行编译安装 cd redis‐x.x.x ????????make 4.vi redis.conf #修改配置 ????????daemonize yes? ? #后台启动 ???????? protected‐mode no #关闭保护模式,使其他机器也能访问redis 5.启动redis src/redis-server redis.conf 6.验证redis启动是否成功,以及启动redis客户端连接redis服务端 ps -ef|grep redis src/redis-cli 二、redis五大数据结构及操作命令1、String结构1.1 字符串常用命令 SET key value? ? ? //Set the string value of a key MSET key value [key value ...]? ? ? ? ? //Set multiple keys to multiple values GET key? ? ? //Get the value of a key MGET key [key ...]? ? //Get the values of all the given keys SETEX key seconds value? ? //Set the value and expiration of a key SETNX key value? ? //Set the value of a key, only if the key does not exist 1.2原子加减操作 INCR key? ?//Increment the integer value of a key by one DECR key? ? ?//?Decrement the integer value of a key by one INCRBY key increment? ? ?//Increment the integer value of a key by the given amount DECRBY key decrement? ? //Decrement the integer value of a key by the given number 1.3 String应用场景 单值缓存:set key value,get key 对象缓存:set user:id value(user对象json字符串);mset user:id:name rick user:id:sex male,mget?user:id:name?user:id:sex. 分布式锁:setnx lock:id true? ? ?//return 1,means get the lock success ? ? ? ? ? ? ? ? ? setnx lock:id false? ??//return 0,means get the lock failed ? ? ? ? ? ? ? ? ? del lock:id? ? ? ? ? ? ? ? //release lock ? ? ? ? ? ? ? ? ? set lock:id true ex 10 nx? ?//set a timeout of?10 seconds to prevent deadlock 计数器:比如计算文章阅读数量:INCR article:readcout:{id},get?article:readcout:{id} web集群session共享:spring session+redis 分布式系统全局序列号:INCRBY userId 1000? //批量生成序列化号提升性能 2、Hash结构2.1、常用命令 HSET key field value? ?//Set the string value of a hash field HGET key field? ? ? ? ? ? //Get the value of a hash field HMSET key field value [field value ...]? ? //Set multiple hash fields to multiple values HMGET key field [field ...]? ? ? ? //Get the values of all the given hash fields HDEL key field [field ...]? ? ? ? ? //Delete one or more hash fields 更多命令使用? help @Hash 2.2、应用场景 缓存用户对象:HMSET user 1:name rick 1:sex male ? ? ? ? ? ? ? ? ? ? ? ? ?HMGET user 1:name 1:sex 电商购物车:用户id为key,用户所添加的商品id为field,商品数量为value。 ????????????????添加商品:hset cart:{userId} {prodId} 1 ? ? ? ? ? ? ? ? 增加商品数量:hincrby?cart:{userId} {prodId} 1 ? ? ? ? ? ? ? ? 商品总数:hlen?cart:{userId} ? ? ? ? ? ? ? ? 删除商品:hdel?cart:{userId} {prodId} ? ? ? ? ? ? ? ? 获取购物车所有商品:hgetall?cart:{userId} 2.3、优缺点 优点 同类数据归类整合储存,方便数据管理;相比string操作消耗内存与cpu更小;相比string储存更节省空间 缺点 过期功能不能使用在field上,只能用在key上;Redis集群架构下不适合大规模使用 3、List结构3.1、常用操作 LPUSH key value [value ...]? ? ?//Prepend one or multiple values to a list RPUSH key value [value ...]? ? ?//Append one or multiple values to a list LPOP key? ? ? ?//Remove and get the first element in?a list? RPOP key? ? ? //Remove and get the last element in?a list? LRANGE key start stop? ? //Get a range of elements from a list 3.2、应用场景 ?常用数据结构:stack(栈)=lpush+lpop;queue(队列)=lpush+rpop;Blocking queue=lpush+brpop ?微博、微信公众号消息流: rick关注了xx博主,xx博主发布了一条微博消息,消息id为1:Lpush msg:{rickId} 1;rick查看微博:LRANGE msg:{rickId} 0 10 4、set结构4.1、set常用操作? SADD key member [member ...]? ?//Add one or more members to a set SMEMBERS key? ? ?//Get all the members in a set SDIFF key [key ...]? ? //Subtract multiple sets SPOP key [count]? ? ?//Remove and return one or multiple random members from a set 4.2、应用场景 抽奖小程序:点击参与抽奖:SADD key {userId};查看参与抽奖所有用户:SMEMBERS key;抽取count名中奖者:SRANDMEMBER key [count] / SPOP key [count] 微信点赞功能:SADD like:{userId}:{msgId} {userId};取消点赞功能:SREM like:{userId}:{msgId} {userId};检查某用户是否点赞:SISMEMBER ?like:{userId}:{msgId} {userId};获取点赞的用户:SMEMBERS like:{userId}:{msgId};获取点赞的用户数:SCARD? like:{userId}:{msgId}; 微博微信关注模型: rick关注的人:rickSet-{james,paul} tony关注的人:tonySet-{james,paul,wade,anthony} james关注的人:jamesSet-{rick,tony,paul,wade,anthony} rick和tony共同关注:SINTER rickSet?tonySet---{james,paul} rick关注的人也关注了他(wade):SISMEMBER jamesSet wade,SISMEMBER paulSet wade。 rick可能认识的人:SDIFF jamesSet rickSet---{tony,paul,anthony} 集合操作实现电商商品筛选: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 0:30:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |