Redis简介:基本数据类型以及应⽤场景
本⽂使⽤的⼯具是:redis-desktop-manager
1.1:Redis数据库基本概念
1,redis也有数据库的概念,⼀个数据库中可以保存⼀组数据;
2,各个数据库之间是相互隔离的,当然也可以在不同数据库之间复制数据;
3,每⼀个数据库都有⼀个id号,默认的数据库id为0;
4,可以使⽤select命令选择当前使⽤的数据库:
5,redis初始化的时候会默认创建16个数据库(这个配置可以在redis配置⽂件中databases 16);
6,特别注意,类似redis的key-value数据库系统,是绝对没有表的概念,可以简单理解为,所有的数据都是乱七⼋糟的堆在⼀起的;
:1.2:Redis的命令组
Redis命令⼗分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions⼀共14个redis命令组两百多个redis命令。每个命令都代表着⼀种操作,有点类似mysql的命令。
这些命令组可以按功能分为以下⼏种类型:
1,对数据的操作:
Strings、Lists、Sets、SortedSets、Hashes、Geo
其中Geo可以做附近的⼈的功能
2,发布/订阅相关操作:
Pub/Sub
3,事务控制:
Transactions
4,脚本命令;
Scripting
5,⽹络连接命令;
Connection
6,数据库服务相关命令;
Keys
Server
Cluster
HyperLogLog
:1.3:Redis数据类型:key & value
1,key⽤来标记⼀个数据;⼀般在key中需要体现出数据模型的结构。
⽐如最简单的模型:
key:1
value:{
"id":1,
"name":"swk"
}
//但是上⾯的key容易产⽣key覆盖的问题,因为假如多个对象都是⽤ID做key
//所以⼀般都是这样做
key:
user:1
employee:1
value:
employee:{
"id":1,
"deptId":1,
"name":"mgr"
}
user:{
"id":1,
"name":"swk"
}
2,value表⽰⼀个key对应的值;在redis中,value可以是任何内容,redis把所有的value都作为byte处理;所以可以⽤来保存任何内容;
3,redis最突出的特点是提供了5种常⽤的数据存储类型(value的类型),深刻理解这5中数据结构和各⾃的使⽤场景,对redis的使⽤有很⼤帮助;
:1.4:Redis中的查询
1,在redis中,不⽀持对value进⾏任何形式的查询;
catalog:1
catalog:2
//想要查catalog的话
keys catalog:*
2,redis不是⼀个适⽤于任何场景的存储⽅案,考虑使⽤redis需要对业务进⾏考评,⽤redis的思想去重新设计数据结构;
2,1 Redis的基本数据类型:String
1,redis中最常见的数据类型,内容可以是任何值;
2,常⽤的字符串操作:
1)set key value:设置⼀个值;
2)get key:返回key对应的value;
并且这⾥还可以对user:1 设置额外的属性,⽐如以⼀个JSON对象去描述它
3)strlen key:返回key对应的value字符串长度;
4)append key value:给key对应的value追加值,如果key不存在,相当于set⼀个新的值;
注意:如果我们想要输⼊空格字符,那么只是敲⼀个空格是⽆法⽣效的,必须⽤双引号包⼀个空格字符的⽅式来引⼊空格
5)getrange key start stop:返回key对应value的⼀个⼦字符串,位置从start到stop;
与Java不同的是Redis中的区间通常是:前闭后闭
⽽Java中的区间通常是:前闭后开的
3,如果字符串的内容是数值(integer,在redis中,数值也是string),那么有如下常⽤的操作:
1)incr key:在给定key的value上增加1,并返回增加后的值,redis中的incr是⼀个原⼦操作,⽀持并发;
2)incrby key value:给定key的value上增加value值,并返回增加后的值,相当于key=key.value+value;这也是⼀个原⼦操作;
3)decr:在给定key的value上减少1;
4)decrby key value:给定key的value上减少value值;
2.1.1 String的应⽤场景
1、缓存功能:字符串最经典的使⽤场景,redis最为缓存层,Mysql作为储存层,绝⼤部分请求数据都是在redis中操作,由于redis具有⽀撑⾼并发特性,所以缓存通常能起到加速读写和降低 后端压⼒的作⽤。
2、计数器:许多运⽤都会使⽤redis作为计数的基础⼯具,他可以实现快速计数、查询缓存的功能。
如:视频播放数系统就是使⽤redis作为视频播放数计数的基础组件。
⽐如:优酷视频的播放:incr video:videoId:playTimes
或者:⽂章浏览量:incr article:aricleId:clickTimes
或者粉丝数量:取关 decr author:authorId:fansNumber
这样的话就能极快的提⾼视频或者是⽂章的访问速度
简单总结就是:能够利⽤redis在缓存中做统计的⼯作,省去了在sql联表查询的功夫
3、id⽣成器:我们在使⽤mysql时,把数据存在mysql后,该数据就会⾃动⽣成⼀个⾃增长的id,这个id肯定是不重复的,那类似这种⽣成⼀个不重复的id也可以⽤redis的string数据结构来做。
为user的模型设计⼀个id⽣成器
incr user:id:generate
那么就可以利⽤该ID⽣成器做ID的⾃动⽣成
拿到的ID值,就可以赋予下⾯的对象
user:1{
id:1,
name:lili
}
2,2 Redis的基本数据类型:List
1、Redis中的List类似Java中的queue,也可以当做List来⽤.
List类型是⼀个链表结构的集合,其主要功能有push,pop,获取元素等.更详细的说,List类型是⼀个双端链表的结构,我们可以通过相关操作进⾏集合的头部或者尾部添加删除元素,list的设计⾮常简单精巧,即可以作为栈,⼜可以作为队列.满⾜绝⼤多数需求.
2、常⽤的list操作:
1)lpush key value…:在⼀个list最前⾯添加⼀个或多个元素。
其具体的数据模型是:
由于redis中的List是个双端链表,所以插⼊数据后就变成了这样
2)rpush key value…:在⼀个list最后⾯添加⼀个或多个元素。
3)llen key:返回指定list的元素个数。
4)lrange key start stop:获取⼀个list中的指定元素(如果是0,-1则表⽰从头取到末尾所有元素)
这⾥有个特殊的语法:lrange class 0 -1 表⽰显⽰list中的所有内容
如果要开查看指定位置的元素
5)ltrim key start stop:裁剪指定list,剩下的内容从start到stop。
redis支持的数据结构这⾥相当于对list进⾏剪裁,剪裁范围以外的元素丢弃
6)lpop key :从list最前⾯弹出⼀个元素。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论