你离高薪 offer 只差一个Redis入门,我是认真的

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

你离高薪 offer 只差一个Redis入门,我是认真的

说起来,可能有些小伙伴会不相信,我是第一次用 Redis,真的。因为公司小,业务量小,Redis 根本派不上用场。不过,最近打算把系统升级一下,顺带把当下时髦的技术入个门,“与时俱进”嘛,虽然进的有“一点点”晚(注意双引号)。

作为一名富有责任心的技术博主,我觉得有必要把我入门 Redis 的过程分享出来,供一些小伙伴作为参考。要是我哪里写错了,别客气,过来给我一巴掌,就行了(温柔点,别打肿,影响颜值就不好了)。

01、Redis 是什么
Redis 是互联网技术领域中使用最广泛的存储中间件,它是 Remote Dictionary Service 三个单词中加粗字母的组合。你别说,组合起来后念着挺自然的。

Redis 以超高的性能、完美的文档、简洁的源码著称,国内外很多大型互联网公司都在用,比如说阿里、腾讯、GitHub、Stack Overflow 等等。它的版本更新非常的快,功能也越来越强大,最初只是用来作为缓存数据库,现在已经可以用它来实现消息队列了。

可以这么说吧,掌握 Redis 已经变成了一项后端工程师必须具备的基础技能。

Redis 的作者是一名意大利人,网名 Antirez,长相还是过得去的,感兴趣的小伙伴可以 Google 一下。知道为什么 Redis 的默认端口是 6379 吗?

据说是手机键盘上“MERZ”的位置决定的,小伙伴们可以打开自己手机上九宫格键盘感受一下。“MERZ”是什么意思呢?据说是“愚蠢”的意思。这?是不是感觉程序员的生活中还是有蛮多神秘色彩的?

02、安装 Redis
Redis 针对不同的操作系统有不同的安装方式,我们这篇入门的文章就以 Windows 为例吧。

下载地址如下:

https://github.com/MicrosoftArchive/redis/releases

Windows 最新的版本是 3.2.100。从下图中可以看得出,Redis 的体积非常的轻量级,还不到 6 M。体积越小,让我感觉 Redis 越牛逼,你是不是也有这种感觉?

有两种安装方式,第一种是 msi 的方式,双击运行后安装;第二种是免安装,绿色版,只需要把 zip 包解压就可以了。

里面有一份英文版的文档——Windows Service Documentation.docx,教我们如何安装 Redis 服务、如何启动、如何关闭,以及如何使用自定义端口启动服务。

打开命令行,进入到当前解压后的目录,输入启动命令:

redis-server redis.windows.conf
然后你就会看到 Redis 启动后的欢迎画面,左边这个盒子感觉好有艺术感啊!有小伙伴知道是怎么生成的吗?

还有一些其他的提示信息:

Redis 当前的版本号为 3.2.100
端口是 6379
进程 ID,也就是 PID 为 12636
Redis 官方地址为:http://redis.io
那如何停止服务呢?可以直接按下 Ctrl+C 组合键——粗暴、壁咚(当然可以直接点右上角的叉号)。

PS:本来想用 Linux 版或者 OSX 版的,怕入门的小伙伴没有环境。后面可以整一个。

03、Redis 的数据结构
Redis 有 5 种基础数据结构,String、Hash、List、Set、SortedSet,也是学 Redis 必须掌握的。除此之外,还有 HyperLogLog、Geo、Pub/Sub,算是高级数据结构了。我们这篇入门的文章就以 String 为例吧。

String 结构使用非常广泛,比如说把用户的登陆信息转成 JSON 字符串后缓存起来,等需要取出的时候再反序列化一次。

小伙伴们应该都知道,Java 的 String 是不可变的,无法修改。Redis 的 String 是动态的,可以修改的,两者不同哦。关于 Redis 的 String 结构,我觉得老钱的 Redis 教程上讲得非常明白,大家一起拜读下。

Redis 的 String 在内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。如上图所示,当前字符串实际分配的空间为 capacity,一般高于实际的字符串长度 len。当字符串长度小于 1M 时,扩容是对现有空间的成倍增长;如果长度超过 1M 时,扩容一次只会多增加 1M 的空间。最大长度为 512M。

04、实操 Redis
好了好了,我估计很多小伙伴们已经整装待发,准备实操一把了。这就来。

Redis 的解压目录下有一个名叫 redis-cli.exe 的文件,这是 Redis 自带的一个客户端工具,可以用来连接之前我们启动好的 Redis 服务。双击启动它。

这个客户端还是非常智能的,当键入命令的时候,会跳出对应的提示

当按下空格跟进关键字的时候,对应位置上的提示会自动消失。

以下是完整的键值对测试命令,小伙伴们可以按照格式动手实操一把。

 set name cmower
OK
 get name

"cmower"

 exists name

(integer) 1

 del name

(integer) 1

 get name

(nil)
1)set 命令用来存储一个键值对,在本例中,name 为 key,cmower 为 值。

2)get 命令用来获取一个键值对。

3)exists 命令用来测试一个键值对是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。

4)del 命令用来删除一个键值对,(integer) 1 表示执行成功,(integer) 0 表示执行失败。

5)当键值对删除后,再通过 get 命令获取时,结果就为 (nil) 。

可能有小伙伴会好奇,nil 是什么意思?它是 Objective-C、Swift、Ruby、Lua 等编程语言中的一个关键字,更详细的解释可以看一下《Programming in Lua 程序设计第二版》:

nil 是一种类型,它只有一个值 nil,它的主要功能是用于区别其他任何值,就像之前所说的,一个全局变量在第一次赋值前的默认值就是 nil,将 nil 赋予一个全局变量等同于删除它,Lua 将 nil 用于表示一种“无效值(non-value)”的情况,即没有任何有效值的情况。

想了解 Redis 命令的具体使用方法,可以参考以下链接:

http://redisdoc.com/index.html

是 Redis Command Reference 和 Redis Documentation 的中文翻译版,良心吧?

05、在 Java 中使用 Redis
有些小伙伴可能会问,“二哥,我是一名 Java 程序员,我该如何在 Java 中使用 Redis 呢?”这个问题问得好,这就来,这就来。

第一步,在项目中添加 Jedis(Java 和 Redis 的混拼) 依赖:


    redis.clients
    jedis
    3.2.0

第二步,新建 UserInfo(用户信息)类:

public class UserInfo {
    private String name;
    private int age;

    public UserInfo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }

    // getter / setter
}
第三步,在项目中添加 Gson(用于序列化和反序列化用户信息) 依赖:


    com.google.code.gson
    gson
    2.8.6
    compile

第四步,新建测试类 RedisTest:

public class RedisTest {
    private static final String REDIS_KEY = "user";
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);

        Gson gson = new Gson();
        UserInfo userInfo = new UserInfo("沉默王二", 18);

        jedis.set(REDIS_KEY, gson.toJson(userInfo));
        UserInfo getUserInfoFromRedis = gson.fromJson(jedis.get(REDIS_KEY),UserInfo.class);

        System.out.println("get:" + getUserInfoFromRedis);

        System.out.println("exists:" + jedis.exists(REDIS_KEY));
        System.out.println("del:" + jedis.del(REDIS_KEY));
        System.out.println("get:" + jedis.get(REDIS_KEY));
    }
}
1)REDIS_KEY 常量为存储用户信息到 Redis 的 key。

2)在 Jedis 的帮助下,Java 连接 Redis 服务变得非常简单,只需要一行代码:

Jedis jedis = new Jedis("localhost", 6379);
参数分别是主机名,端口号。

存储键值对用 set() 方法,获取键值对用 get() 方法,判断键值对是否存在用 exists() 方法,删除键值对用 del() 方法。

3)Gson 是谷歌提供的一个开源库,可以将 Java 对象序列化为 JSON 字符串,同样可以将 JSON 字符串反序列化(解析)为匹配的 Java 对象。

使用起来也非常简单,toJson() 方法将对象转成 JSON 字符串,fromJson() 方法将 JSON 字符串反序列化对象。

好了,来看一下程序的输出结果:

get:UserInfo{name='沉默王二', age=18}
exists:true
del:1
get:null
完全符合我们的预期,perfect!

06、鸣谢
好了,我亲爱的小伙伴们,以上就是本文的全部内容了,是不是看完后很想实操一把 Redis,赶快行动吧!如果你在学习的过程中遇到了问题,欢迎随时和我交流,虽然我也是个菜鸟,但我有热情啊。

另外,如果你想写入门级别的文章,这篇就是最好的范例。

原文地址https://www.cnblogs.com/qing-gee/p/12855763.html

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
2月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
2月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
2月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
2月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
2月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
2月前
|
NoSQL Redis
Redis6入门到实战------ 五、Redis的发布和订阅
这篇文章介绍了Redis的发布和订阅机制,包括其基本概念、客户端如何订阅频道以及如何发布消息给订阅者。
下一篇
无影云桌面