网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
+ - [下载redis安装包](#redis_24)
+ [Redis的数据类型](#Redis_177)
+ - [4.1 对字符串string的操作](#41_string_188)
- [4.2 对hash列表的操作](#42_hash_194)
- [4.3 对list列表的操作](#43_list_201)
- [4.4 对set集合的操作](#44_set_209)
- [4.5 对key的操作](#45_key_217)
- [4.6 对ZSet的操作](#46_ZSet_221)
- [4.7 对位图BitMaps的操作](#47_BitMaps_226)
- * [4.7.1 设置值](#471__232)
* [4.7.2 获取值](#472__245)
* [4.7.3 获取Bitmaps指定范围值为1的个数](#473_Bitmaps1_249)
* [4.7.4 Bitmaps间的运算](#474_Bitmaps_254)
- [4.8 对HyperLogLog结构的操作](#48_HyperLogLog_270)
- * [4.8.1 应用场景](#481__272)
* [4.8.2 UV计算示例](#482_UV_277)
* [4.8.3 HyperLogLog为什么适合做大量数据的统计](#483_HyperLogLog_328)
+ [Redis Java API操作[重点]](#Redis_Java_API_335)
+ - [创建maven工程并导入依赖](#maven_337)
- [API操作](#API_375)
+ [总结](#_538)
引言
大家好,我是ChinaManor,直译过来就是中国码农的意思,我希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,平凡但不甘于平庸的人。
一文快速搞懂系列讲究快速入门掌握一个新的大数据组件,帮助新手了解大数据技术,以下是系列文章:
文章传送门:
一文快速了解Elastic Search 开源搜索引擎(技术选型+启动命令)
一文快速了解ClickHouse 战斗民族的开源搜索引擎(超详细解读+快速入门)
这是一文快速搞懂系列的:一文快速搞定Redis
Windows版Redis安装
https://www.cnblogs.com/pretty-sunshine/p/10615287.html
Linux版Redis安装
下载redis安装包
node1.itcast.cn服务器执行以下命令下载redis安装包
cd /export/software
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
3.2.2 解压redis压缩包到指定目录
node1.itcast.cn执行以下命令进行解压redis
cd /export/software
#上传redis-3.2.8.tar.gz到linux此目录下
mkdir -p /export/server/
tar -zxvf redis-3.2.8.tar.gz -C ../server/
3.2.3 安装C程序运行环境
node1.itcast.cn执行以下命令安装C程序运行环境
yum -y install gcc-c++
3.2.4 安装较新版本的tcl
下载安装较新版本的tcl
3.2.4.1 使用压缩包进行安装
node1.itcast.cn执行以下命令下载tcl安装包
cd /export/software
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
解压tcl
tar -zxvf tcl8.6.1-src.tar.gz -C ../server/
进入指定目录
cd ../server/tcl8.6.1/unix/
./configure
make && make install
3.2.4.2 在线安装tcl(推荐)
node1.itcast.cn执行以下命令在线安装tcl
yum -y install tcl
3.2.5 编译redis
node1.itcast.cn执行以下命令进行编译:
cd /export/server/redis-3.2.8/
#或者使用命令 make 进行编译
make MALLOC=libc
make test && make install PREFIX=/export/server/redis-3.2.8
3.2.5.1 Host配置-Windows
修改windows中的Host文件(C:\Windows\System32\drivers\etc\host):
# 注释掉教育数仓
#192.168.52.150 hadoop01
#192.168.52.151 hadoop02
#192.168.52.152 hadoop03
# 新加redis配置
192.168.52.150 node1.itcast.cn
192.168.52.151 node2.itcast.cn
192.168.52.152 node3.itcast.cn
3.2.5.2 Host配置-Linux
vim /etc/hosts
192.168.52.150 node1.itcast.cn
192.168.52.151 node2.itcast.cn
192.168.52.152 node3.itcast.cn
3.2.5.3 HostName配置-Linux
第一台
hostnamectl set-hostname node1.itcast.cn
后续第二台和第三台,分别配置为node2.itcast.cn、node3.itcast.cn
3.2.6 修改redis配置文件
node1.itcast.cn执行以下命令修改redis配置文件
cd /export/server/redis-3.2.8/
mkdir -p /export/server/redis-3.2.8/log
mkdir -p /export/server/redis-3.2.8/data
vim redis.conf
# 修改第61行,接收的访问地址
bind node1.itcast.cn
# 修改第128行,后台守护执行
daemonize yes
# 修改第163行,日志目录
logfile "/export/server/redis-
3.2.8/log/redis.log"
# 修改第247行,数据持久化目录
dir /export/server/redis-3.2.8/data
3.2.7 启动redis
node1.itcast.cn执行以下命令启动redis
cd /export/server/redis-3.2.8/
bin/redis-server redis.conf
3.2.8 关闭redis
bin/redis-cli -h node1.itcast.cn shutdown
3.2.9 连接redis客户端
node1.itcast.cn执行以下命令连接redis服务端
cd /export/server/redis-3.2.8/
bin/redis-cli -h node1.itcast.cn
3.3 Redis Desktop Manager
一款基于Qt5的跨平台Redis桌面管理软件,支持:Windows 7+、Mac OS X 10.10+、 Ubuntu 14+,特点: C++ 编写,响应迅速,性能好。
下载地址:http://docs.redisdesktop.com/en/latest/install/#windows
安装客户端,连接本地Redis服务:
备注说明:Redis Desktoo Manager老版本免费,新版本收费。
Redis的数据类型
redis当中一共支持五种数据类型,分别是:
string字符串
list列表
set集合
hash表
zset有序集合
通过这五种不同的数据类型,可以实现各种不同的功能,也可以应用在各种不同的场景。
Redis当中各种数据类型结构如上图:
Redis当中各种数据类型的操作
4.1 对字符串string的操作
下表列出了常用的 redis 字符串命令
4.2 对hash列表的操作
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
下表列出了 redis hash 基本的相关命令:
4.3 对list列表的操作
list列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
下表列出了列表相关的基本命令:
4.4 对set集合的操作
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)[最低时空复杂度,耗时与输入数据大小无关]。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
下表列出了 Redis 集合基本命令:
4.5 对key的操作
下表给出了与 Redis 键相关的基本命令:
4.6 对ZSet的操作
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
它用来保存需要排序的数据,例如排行榜,一个班的语文成绩,一个公司的员工工资,一个论坛的帖子等。
有序集合中,每个元素都带有score(权重),以此来对元素进行排序
它有三个元素:key、member和score。以语文成绩为例,key是考试名称(期中考试、期末考试等),member是学生名字,score是成绩。
4.7 对位图BitMaps的操作
计算机最小的存储单位是位bit,Bitmaps是针对位的操作的,相较于String、Hash、Set等存储方式更加节省空间
Bitmaps不是一种数据结构,操作是基于String结构的,一个String最大可以存储512M,那么一个Bitmaps则可以设置2^32个位
Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把Bitmaps想象成一个存储0、1值的数组,数组的每个单元值只能存储0和1,数组的下标在Bitmaps中叫做偏移量
BitMaps 命令说明:将每个独立用户是否访问过网站存放在Bitmaps中, 将访问的用户记做1, 没有访问的用户记做0, 用偏移量作为用户的id 。
4.7.1 设置值
SETBIT key offset value
setbit命令设置的vlaue只能是0或1两个值
设置键的第offset个位的值(从0算起),假设现在有20个用户,uid=0,5,11,15,19的用户对网站进行了访问, 那么当前Bitmaps初始化结果如图所示
具体操作过程如下, unique:users:2016-04-05代表2016-04-05这天的独立访问用户的Bitmaps
setbit unique:users:2016-04-05 0 1
setbit unique:users:2016-04-05 5 1
setbit unique:users:2016-04-05 11 1
setbit unique:users:2016-04-05 15 1
setbit unique:users:2016-04-05 19 1
很多应用的用户id以一个指定数字(例如10000) 开头, 直接将用户id和Bitmaps的偏移量对应势必会造成一定的浪费, 通常的做法是每次做setbit操作时将用户id减去这个指定数字。
在第一次初始化Bitmaps时, 假如偏移量非常大, 那么整个初始化过程执行会比较慢, 可能会造成Redis的阻塞。
4.7.2 获取值
GETBIT key offset
获取键的第offset位的值(从0开始算),例:下面操作获取id=8的用户是否在2016-04-05这天访问过, 返回0说明没有访问过
getbit unique:users:2016-04-05 8
4.7.3 获取Bitmaps指定范围值为1的个数
BITCOUNT key [start end]
例:下面操作计算2016-04-05这天的独立访问用户数量:
bitcount unique:users:2016-04-05
4.7.4 Bitmaps间的运算
BITOP operation destkey key [key, …]
bitop是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中。 假设2016-04-04访问网站的userid=1, 2, 5, 9, 如图3-13所示:
setbit unique:users:2016-04-04 1 1
setbit unique:users:2016-04-04 2 1
setbit unique:users:2016-04-04 5 1
setbit unique:users:2016-04-04 9 1
例1:下面操作计算出2016-04-04和2016-04-05两天都访问过网站的用户数量, 如下所示。
bitop and unique:users:and:2016-04-04_05 unique:users:2016-04-04 unique:users:2016-04-05
bitcount unique:users:2016-04-04_05
例2:如果想算出2016-04-04和2016-04-03任意一天都访问过网站的用户数量(例如月活跃就是类似这种) , 可以使用or求并集, 具体命令如下:
bitop or unique:users:or:2016-04-04_05 unique:users:2016-04-04 unique:users:2016-04-05
bitcount unique:users:or:2016-04-04_05
4.8 对HyperLogLog结构的操作
4.8.1 应用场景
HyperLogLog常用于大数据量的去重统计,比如页面访问量统计或者用户访问量统计。
要统计一个页面的访问量(PV),可以直接用redis计数器或者直接存数据库都可以实现,如果要统计一个页面的用户访问量(UV),一个用户一天内如果访问多次的话,也只能算一次,这样,我们可以使用SET集合来做,因为SET集合是有去重功能的,key存储页面对应的关键字,value存储对应的userid,这种方法是可行的。但如果访问量较多,假如有几千万的访问量,这就麻烦了。为了统计访问量,要频繁创建SET集合对象。
Redis实现HyperLogLog算法,HyperLogLog 这个数据结构的发明人 是Philippe Flajolet(菲利普·弗拉若莱)教授。Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
4.8.2 UV计算示例
node1.itcast.cn:6379> help @hyperloglog
PFADD key element [element …]
summary: Adds the specified elements to the specified HyperLogLog.
since: 2.8.9
PFCOUNT key [key …]
summary: Return the approximated cardinality(基数) of the set(s) observed by the HyperLogLog at key(s).
since: 2.8.9
PFMERGE destkey sourcekey [sourcekey …]
summary: Merge N different HyperLogLogs into a single one.
since: 2.8.9
Redis集成的HyperLogLog使用语法主要有pfadd和pfcount,顾名思义,一个是来添加数据,一个是来统计的。为什么用pf?是因为HyperLogLog 这个数据结构的发明人 是Philippe Flajolet教授 ,所以用发明人的英文缩写,这样容易记住这个语法了。
下面我们通过一个示例,来演示如何计算uv。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
,一个是来添加数据,一个是来统计的。为什么用pf?是因为HyperLogLog 这个数据结构的发明人 是Philippe Flajolet教授 ,所以用发明人的英文缩写,这样容易记住这个语法了。
下面我们通过一个示例,来演示如何计算uv。
[外链图片转存中…(img-NQO5Yy2f-1715722470526)]
[外链图片转存中…(img-FLsJDB20-1715722470526)]
[外链图片转存中…(img-LtI9uoMU-1715722470526)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新