Redis快速入门(究极新手教程)


入门经典问题

每次开始学习一项新技术的时候,我总是喜欢问自己接下来学习的到底是个什么?我能用它来解决一个什么样的问题?他未来对于自身来说有什么用?
在这里插入图片描述


一、Redis是什么?

首先先问第一个问题Redis他到底是一个什么?(如果用较为官方的话写下来还不如百度百科和大多大佬博主)其实不难发现,这款由2010年开始研发,2012年发布小型更新版,由它真正问世也有八个年头,想做程序员尤其是web开发一类的人对于redis不会用也应该有所耳闻,与在学校中学习的mysql,sql server不同,redis是一种用c语言写的非关系型数据库。在这里插入图片描述
在这里插入图片描述
可能有人不知道什么是关系型数据库和非关系型数据库的区别,我用我自己的理解讲一讲mysql就像是一对腻歪的情侣,他们之间有第一次碰面纪念日,第一次牵手纪念日,第一次亲嘴纪念日,第一次咳咳,反正这些是他们可以有交集一起的,而Redis则是一个男同学A在江苏,一个女同学B在东北,他们连面都没有碰过也更谈不上什么交集了。所以非关系型数据库Redis就是以大家熟知的key-value形式储存的,json的解析数据也是key-value的模式,所以说他其实无处不在。而且Redis与Mysql这种关系型数据库还有点大不同的地方,mysql的数据库更像是个文件夹里面摆放的一张张表就是文件,而Redis则是运行在内存上的他的数据也是内存上的,我看过一个博客,好比文件存在固态盘比机械盘快了好几倍,然而内存的读写速度比SSD更快,有把安装在机械盘的游戏转移到固态的同学就知道,转完之后读取加载速度更快了,感觉操作都变强力了。(菜就是菜!)
到这我们第一个问题问完了,redis究竟是个啥,那我们接下来要开始认识它怎么操作能解决什么问题?

二、搭建环境,初识Redis

1.环境搭建

redis的环境十分简单,首先需要下载redis(因为Redis支持所有的POSIX,所以在官网的下载版本也是linux的,博主用的windows下载,了解到是微软的技术小组根据redis推出windows测试版,在github可以下载最新版)虽然说官方没有推出正式windows版本,不过依然不可否认他的功能强大与方便使用。下载完后的文件夹是这样的如图
在这里插入图片描述
我们首先会看到两个word文档,这是微软开发redis windows版的留下的使用笔记及其一些指南,里面也都是全英文的比较难啃如果对于自己英文水平比较自信的可以去看看,不过这些没什么作用也可以选择删除。这其中最常使用的就是redis-server和redis-cli,因为我没有经过专业的学习所以我对于redis-server的了解他就是redis服务器的启动程序。
在这里插入图片描述
Redis的端口号为什么是6379?这其中还有一端小故事在这就不讲了有兴趣地可以自己去百度了解一下,这简单的程序却是往后秒杀大量数据交互问题的“杀手”,到这其实redis搭建就完成了,是不是非常地简单,下载压缩包–解压–开启程序,让我们接下来继续看另外一个常用的程序:redis-cli.exe。在这里插入图片描述
什么,他居然什么都没有这么简易吗?这肯定是很多没学过redis的人有的疑问,在我看来这就是一个能从redis服务器拿到数据的简单程序,在这里处理数据肯定用命令行处理mysql方便多了,说明研发人员还是较为人性化的(博主曾经刚学习mysql的时候一直用命令行写查询,知道有一天才知道有Navicat等极其好用!!!的可视化工具)接下来我们终于可以接触操作了。Let’s go!

2.基本数据类型和基本操作

Redis严格地来说是拥有5种基本数据类型

  • string
  • hash
  • list
  • set
  • sortedset

他们也都遵循key-value的数据储存形式,如果有一定语言基础的同学肯定对这些数据类型有一定了解。
String是字符串类型他可以存储一条字符串,他的基本用法如下:

set key value //设置
get key value //获取
del key //删除

hash类型,如果对于java基本知识比较熟悉的人肯定知道HashMap类型,hash类型就是存储类型hashmap数据,这也是一个key-(field)-value类型(field其实可以理解为hashmap中的key),他的基本用法:

hset key (field) value
hget key (field)
hgetall key
hdel key (field)

list类型,就是一个有序列表,他的数据结构和入栈出栈比较相似,他基本用法:

lpush key value //从列表左边压入元素
rpush key value //从列表右边压入元素
lrange key start stop //从左到右查看所有元素(0,-1代表所有)
lpop key //从左边弹出一个元素
rpop key //从右边弹出一个元素

set类型,众所周知java中的set类型是去重无序的,redis也是一样的,他的基本用法如下:

sadd key member //member成员我认为和value没有太大区别可能便于区分
smembers key //set中所有元素
srem key member //删除元素

最后一个数据类型是sortedset,他是一个有序的set集合,根据score排序,不过经我研究,我认为他也是拥有字典排序的(如有错误及时指出,在下虚心受教),他的基本操作如下:

zadd key score member //与set不同的就是他通过score排序
zrange key start stop [WITHSCORES] //找出想要的元素通过score排序
zrem key member [member ...]

redis的基本数据类型和操作十分简单,比起关系型数据库,类型redis的非关系型数据库入门地更快,不过他能实现的功能也是十分多样的。接下来我们要进行与其他语言的结合学习,用到平日开发当中。


三、深交Redis

1.Jedis入门操作

redis与java的整合使用

在很多时候我们在做web开发我们就需要用到redis,看到这个文章的很多人肯定对于java对于关系型数据库的操作有所了解,通过和mysql等数据库服务器的连接完成持久层获取数据,这个是jdbc那么jedis也是如此,与jedis服务器连接获取数据,其实一个语句就完成jedis入门了。

Jedis jedis = new Jedis("localhost", 6379);

这样就完成与jedis服务器连接了,同时也获取到一个jedis对象,接下来我们就可以使用jedis操作redis数据库了,大量代码预警!!!
与上文基本操作对应:
String

        jedis.set("username","warren");
        jedis.setex("activecode",20,"155246"); 20s删除

hash(这边所用的第一个遍历算法推荐在大量数据时使用)

        jedis.hset("myhash","username","warren");
        jedis.hset("myhash","password","123");
        Map<String, String> map = jedis.hgetAll("myhash");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String,String> entry:entries){
            System.out.println(entry.getKey()+"  "+entry.getValue());
        }
        jedis.hset("ithash","username","zhangsan");
        jedis.hset("ithash","password","132");
        jedis.hset("ithash","gender","female");
        Map<String, String> map = jedis.hgetAll("ithash");
        Set<String> strings = map.keySet();
        for(String mes:strings){
            System.out.println(mes+":"+map.get(mes));
        }

list

        jedis.lpush("mylist", "a", "b", "c");
        jedis.rpush("mylist", "a", "b", "c");
        List<String> mylist1 = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist1);
        String str1 = jedis.lpop("mylist");
        String str2 = jedis.rpop("mylist");
        System.out.println(str1);
        System.out.println(str2);
        List<String> mylist2 = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist2);

在这里插入图片描述
我把这个代码的运行结果放出来是为了让大家更加直观地感受到元素添加和弹出list的过程。

set

        jedis.sadd("myset","a","b","c");
        Set<String> myset1 = jedis.smembers("myset");
        System.out.println(myset1);
        jedis.srem("myset","a");
        Set<String> myset2 = jedis.smembers("myset");
        System.out.println(myset2);

sortedset

        jedis.zadd("mysortedset", 100, "warren");
        jedis.zadd("mysortedset",20,"zhangsan");
        jedis.zadd("mysortedset",50,"lisi");
        Set<String> mysortedset1 = jedis.zrange("mysortedset", 0, -1);
        System.out.println(mysortedset1);
        jedis.zrem("mysortedset","lisi");
        Set<String> mysortedset2 = jedis.zrange("mysortedset", 0, -1);
        System.out.println(mysortedset2);

结果如下:
结果
再看看redis里面
结果
十分简单的操作,java代码也并不复杂,将java代码与redis的基本操作一起来看就十分清楚了,在实际开发中对于redis的基本操作也就如此简单。


2.Jedis连接池

与durid等关系型数据库的连接池不同,jedis是自带的jedispool,通过jedispoolConfiguration可以配置关于jedis连接池。他简化了不断创造和销毁连接而是可以从连接池中拿和取,同时可以设置最大连接数等等,他的基本创建如下:

     JedisPool jedisPool=new JedisPool("localhost",6379);
     Jedis jedis = jedisPool.getResource();

这样就获取了一个jedis对象用来操作,十分方便。同样我们也可以像初学jdbc那样创建一个静态工具类来方便从jedispool中拿取一个和redis服务器的连接,不过我在这就不在写代码了,因为现在拥有的springboot整合redis也是更加地主流的办法。(springboot真不戳!我后面应该会开一篇springboot的整合博客再来细讲这边。)


四、展望未来

redis数据库在各种场合都发挥着他的作用,我们也到了最后一个问题,他的未来?我在上一篇博客也写到了我是一个十分喜欢看各种公众号和博客的人,我对于未来也有一些了解,现在电商平台的秒杀设计就是用redis来解决的,听着是不是很玄幻,这种缓存的nosql数据库提供了极快的速度去查询数据,如今的几大问题高并发分布式都可以用redis作为一种解决方案,同时redis也有潜在的威胁,比如缓存击穿,缓存雪崩等等。。。。。。但是我相信redis在未来会变得越来越好,我同样也会随着学习与自己做项目的经历推出更多的博客分享给大家,共同进步。在这里插入图片描述
非盈利博客,图片如有侵权请及时评论纠正。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值