【Redis】Windows下的安装(绿色版)及入门使用

Redis入门

  • 1.NOSQL概念
  • 2.什么是Redis
  • 3.Windows下Redis的下载和安装
  • 4.Redis的数据类型和简单操作
  • 5.Redis持久化
  • 6.Redis Java客户端Jedis操作
  • 7.Redis高级客户端Lettuce

1.NOSQL概念

redis是一款高性能的NOSQL系列非关系型数据库

  • 什么是NOSQL
    NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,这是一项全新的数据库理念,泛指非关系型数据库。
    NoSQL 这个词同时还有一种接地气的解释方式为 “没有SQL”,因为其为非关系型的数据库,所以并不支持统一的SQL查询标准(结构化查询语言),其不采用SQL进行数据处理,而是拥有自己独立的处理API

  • NOSQL发展的时代背景
    随着互联网web2.0网站的逐步兴起,传统的关系数据库在对应web2.0网站已经显得招架不住,暴露了很多问题,而非关系型的数据库则由于其本身速度非常快的特点得到了蓬勃的发展。
    NoSQL数据库的出现是为了解决大规模数据集合和多重数据种类带来的挑战,尤其是大数据应用方向的难题。

  • NOSQL和关系型数据库比较

    • 优点:

      • 成本:nosql数据库简单易部署,基本都是一些开源软件,不需要像使用Oracle那样花费大量成本购买使用,相比来说关系型数据库价格更加便宜。
      • 查询速度:nosql数据库将数据存储于缓存之中,而关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
      • 存储数据格式:nosql的存储格式是key和value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础的类型。
      • 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很难。
    • 缺点:

      • 维护的工具和资料有限,因为nosql是属于较新的技术,不能和关系型数据库这种十几年的技术同日而语。
      • 不提供对sql的支持,如果不支持sql这样的查询结构语言,则将产生一定的学习和使用成本。
      • 不提供类似关系型数据库的事务处理。

  • 非关系型数据库的优势:

    • 性能NOSQL是基于键值对的,可以想象其就为一个简单的map结构,而且不需要经过SQL语言再进行解析,所以性能很高
    • 可扩展性同样也是因为基于键值对,数据间没有耦合性,所以就容易水平扩展

  • 关系型数据库的优势:

    • 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
    • 事务支持使得对于安全性能很高的数据访问要求得以实现。

  • 总结

    • 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下会使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。
    • 一般我们会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的部分数据

  • 主流的NOSQL产品如下:

    • 键值(Key-Value)存储数据库
      相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
      典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
      数据模型: 键值对
      优势: 查询快速
      劣势: 存储的数据缺少结构化
    • 列存储数据库
      相关产品:Cassandra, HBase, Riak
      典型应用:分布式的文件系统
      数据模型:以列簇式存储,将同一列数据存在一起
      优势:查找速度快,可扩展性强,更容易进行分布式扩展
      劣势:功能相对局限
    • 文档型数据库
      相关产品:CouchDB、MongoDB
      典型应用:Web应用(与Key-Value类似,Value是结构化的)
      数据模型: 一系列键值对
      优势:数据结构要求不严格
      劣势: 查询性能不高,而且缺乏统一的查询语法
    • 图形(Graph)数据库
      相关数据库:Neo4J、InfoGrid、Infinite Graph
      典型应用:社交网络
      数据模型:图结构
      优势:利用图结构相关算法。
      劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

2.什么是Redis

Redis是一个用C语言开发的开源的高性能键值对(key-value)数据库,经官方提供的测试数据,由50个并发执行100000个请求,其读的速度是110000次/s,而写的速度是81000次/s,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下

  • 字符串类型 string
  • 哈希类型 hash
  • 列表类型 list
  • 集合类型 set
  • 有序集合类型 sortedset

redis的应用场景

  • 缓存(数据查询、短连接、新闻内容、商品内容等等)
  • 聊天室的在线好友列表
  • 任务队列。(秒杀、抢购、12306等等)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒)
  • 分布式集群架构中的session分离

补上两个链接:
Redis官网
Redis中文网

3.Windows下Redis的下载和安装

首先在redis中文网的安装教程中,有提供三种安装方式,分别是

  1. Window 下安装
  2. Linux 下安装
  3. Ubuntu 下安装

但是这里的版本都比较低,不太建议下载
【Redis】Windows下的安装(绿色版)及入门使用_第1张图片
这里最高是只有到2.4x的版本
【Redis】Windows下的安装(绿色版)及入门使用_第2张图片
这里推荐一个地址,版本比较新一点:
https://github.com/microsoftarchive/redis/releases
页面如下:
【Redis】Windows下的安装(绿色版)及入门使用_第3张图片
找到你想下载的版本,点击进去直接下载,文件是很小的,因为咱们这边是windows下使用,直接就下载了zip,绿色版直接解压使用
【Redis】Windows下的安装(绿色版)及入门使用_第4张图片
解压后目录文件如下:
【Redis】Windows下的安装(绿色版)及入门使用_第5张图片
可以把没用的东西都删一下,整理之后目录为:
【Redis】Windows下的安装(绿色版)及入门使用_第6张图片
其中主要我们会用到的是以下三个文件:
redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端


4.Redis的数据类型和简单操作

双击redis-server.exe(redis服务器端) ,出现如下界面:端口号是6379
【Redis】Windows下的安装(绿色版)及入门使用_第7张图片
不要关闭此界面,关闭此界面等于关闭了redis服务器。
再双击点开**redis-cli.exe(客户端)**即可,在客户端的控制台上就可以开始操作redis了。
上边有提到过redis的五种数据结构类型:

  • redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
    • value的数据结构:
      1. 字符串类型 string
      2. 哈希类型 hash : map格式
      3. 列表类型 list : linkedlist格式。支持重复元素
      4. 集合类型 set : 不允许重复元素
      5. 有序集合类型 sortedset:不允许重复元素,且元素有顺序

其分别有对应的独立命令来操作,在我们的redis中文网上就有其相关教程:
【Redis】Windows下的安装(绿色版)及入门使用_第8张图片
示例如下:
【Redis】Windows下的安装(绿色版)及入门使用_第9张图片
中文网上会有比较完整的命令总结和点击进去的示例命令,因为这里对应得命令内容较多,这里我们暂且对一些简单的必须掌握的内容进行一个简单的使用示例以及总结,具体其他的命令有空了可以再自己学习掌握:

  1. 字符串类型 string
    ① 存储: set key value
    ② 获取: get key
    ③ 删除: del key
    当你打出set等redis命令关键字的时候,他是会有后续提示的
    【Redis】Windows下的安装(绿色版)及入门使用_第10张图片
    简单操作一下:
    【Redis】Windows下的安装(绿色版)及入门使用_第11张图片

  2. 哈希类型 hash : map格式
    ① 存储: hset key field value
    ② 获取: hget key field
    ③ 删除: hset key field value
    这里整个hash值的删除需要用到通用命令,这个在最后会有说
    简单操作一下:
    【Redis】Windows下的安装(绿色版)及入门使用_第12张图片

  3. 列表类型 list : linkedlist格式。支持重复元素
    可以添加一个元素到列表的头部(左边)或者尾部(右边)
    ① 添加:
    lpush key value: 将元素加入列表左表
    rpush key value:将元素加入列表右边
    ② 获取: lrange key start end
    ③ 删除:
    lpop key: 删除列表最左边的元素,并将元素返回
    rpop key: 删除列表最右边的元素,并将元素返回

简单操作一下:
【Redis】Windows下的安装(绿色版)及入门使用_第13张图片


4. 集合类型 set : 不允许重复元素
① 添加: sadd key value
② 获取: smembers key 获取set集合中所有元素
③ 删除: srem key value 删除set集合中的某个元素

简单操作一下:
【Redis】Windows下的安装(绿色版)及入门使用_第14张图片


5. 有序集合类型 sortedset:不允许重复元素,且元素有顺序
每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
① 添加: zadd key score value
② 获取: zrange key start end 加上[withscores]参数可以将对应分数一起打印出来
③ 删除: zrem key value

简单操作一下:
【Redis】Windows下的安装(绿色版)及入门使用_第15张图片


通用命令:

  • keys * : 查询所有的键
  • type key : 获取键对应的value的类型
  • del key:删除指定的key value

简单操作一下:
【Redis】Windows下的安装(绿色版)及入门使用_第16张图片

5.Redis持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
redis已经为我们提供了两种持久化机制:

  • RDB:默认方式,不需要进行配置,默认就使用这种机制
    也称之为快照模式,在某一段时间后会进行一次持久化,这个持久化触发条件是我们在配置文件中自己设置的,由于这种持久化方式的粒度可能比较大,是可能会出现数据丢失的情况的。

     * 在一定的间隔时间中,检测key的变化情况,然后持久化数据
     1. 编辑redis.windwos.conf文件
     	#   after 900 sec (15 min) if at least 1 key changed
     	save 900 1
     	#   after 300 sec (5 min) if at least 10 keys changed
     	save 300 10
     	#   after 60 sec if at least 10000 keys changed
     	save 60 10000
     	
     2. 重新启动redis服务器,并指定配置文件名称
     	D:\...\redis\windows-64\redis>redis-server.exe redis.windows.conf
    

我们打开并且编辑配置文件:
找到 SNAPSHOTTING ,就是快照的意思
【Redis】Windows下的安装(绿色版)及入门使用_第17张图片
我们加上一句 save 10 1,意思就是
在十秒中至少有一个键值被修改的时候会触发持久化,注意这里查询是不会触发持久化的,我们来启动一下服务
进入你的redis-server所在的文件夹,shift + 鼠标右键,点击在此处打开命令窗口,我们使用带配置文件的启动方式:redis-server.exe redis.windows.conf
笔者这里启动有报错:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
据查询可能是客户端没有成功退出的原因,解决方案如下:
解决 Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
后来启动成功:

【Redis】Windows下的安装(绿色版)及入门使用_第18张图片
一波操作之后会出现一个 .rdb的文件
【Redis】Windows下的安装(绿色版)及入门使用_第19张图片
这里你再重启服务后之前存储的键值就会一直存在于你的内存数据中,直到你将其删除,这里需要注意的就是快照的频率,也就是其触发条件。


第二种持久化方法:

  • AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
  1. 编辑redis.windwos.conf文件
    appendonly no(关闭aof) --> appendonly yes (开启aof)
    # appendfsync always : 每一次操作都进行持久化
    appendfsync everysec : 每隔一秒进行一次持久化
    # appendfsync no : 不进行持久化

这里我们找到 附加模式 APPEND ONLY MODE
【Redis】Windows下的安装(绿色版)及入门使用_第20张图片
选择开启aof
appendonly yes (开启aof)
【Redis】Windows下的安装(绿色版)及入门使用_第21张图片
稍微下划一点,找到对应aof的持久化粒度设置,我们可以发现aof的持久化粒度是很小的,很精细,但是也是非常消耗资源的,看业务数据如何取舍了。
【Redis】Windows下的安装(绿色版)及入门使用_第22张图片
这里我们依旧用带配置文件参数的方式启动redis,并且随便做一做键值的设定添加和修改
【Redis】Windows下的安装(绿色版)及入门使用_第23张图片
这里启动之后就直接生成了 .aof 文件,就是存储命令记录的文件,因为我们没有操作所以大小为0,我们随便做几个操作:
【Redis】Windows下的安装(绿色版)及入门使用_第24张图片
就可以发现其大小发生了改变,我们关闭服务端再打开,看一看键值还在不在
【Redis】Windows下的安装(绿色版)及入门使用_第25张图片
么得问题。

6.Redis Java客户端Jedis操作

Jedis: 一款java操作redis数据库的工具,下载jedis的jar包后即可使用。
简单举例:

public class JedisTest {

    @Test
    public void test() {

        // 获取连接
        Jedis jedis = new Jedis("localhost", 6379);

        // 操作

        /**
         * String类型操作
         * 添加,修改:set
         * 获取(单个):get
         * 删除:del
          */
        jedis.set("name", "zhangsan");
        String name = jedis.get("name");
        jedis.del("name");
        // 设置带失效时间的key-value
        jedis.setex("code", 20, "cfl777");

        /**
         * hash类型操作
         * 添加,删除:hset
         * 获取(单个):hget
         * 删除:hdel
         * 获取(全部):hgetall
         */
        jedis.hset("person", "name", "cfl");
        jedis.hset("person", "age", "23");
        String hget = jedis.hget("person", "name");
        Map<String, String> person = jedis.hgetAll("person");
        jedis.hdel("person", "name");

        /**
         * list类型操作
         * 添加:lpush,rpush
         * 获取(范围):lrange start end
         * 删除:rpop,lpop
         */
        jedis.lpush("list", "aaa");
        jedis.lpush("list", "bbb");
        jedis.rpush("list", "ccc");
        List<String> list = jedis.lrange("list", 0, -1);
        String lpop = jedis.lpop("list");
        String rpop = jedis.rpop("list");

        /**
         * set类型操作 不允许重复元素
         * 添加:sadd
         * 获取(全部):smembers
         * 删除:srem
         */
        jedis.sadd("myset", "aaa", "bbb");
        Set<String> myset = jedis.smembers("myset");
        jedis.srem("myset", "aaa");

        /**
         * sortedSet 带排序(得分)的set → ztree → z
         * 添加:zadd
         * 获取(范围):zrange
         * 删除:zrem
         * 可选项:withscores,表示元素值得同时表示出其得分(排序)
         */
        jedis.zadd("zset", 3, "aaa");
        jedis.zadd("zset", 1, "bbb");
        jedis.zadd("zset", 2, "ccc");
        Set<String> zset = jedis.zrange("zset", 0, -1);
        Set<Tuple> zset1 = jedis.zrangeWithScores("zset", 0, -1);
        jedis.zrem("zset", "bbb");

        /**
         * 通用方法
         */
        // 通过正则获取匹配到的key
        Set<String> keys = jedis.keys("*");
        // 直接删除对应key的元素
        jedis.del("key");
        // 获取此key对应的元素值类型
        String type = jedis.type("key");

        // 关闭连接
        jedis.close();

    }

}

以及Jedis自己提供的连接池:

public class JedisPoolTest {

    public static void main(String[] args) {

        // 创建连接池配置文件
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(50);
        // ...

        // 创建连接池
        JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);

        // 获取连接
        Jedis jedis = jedisPool.getResource();

        // 使用...

        // 关闭连接,归还至连接池
        jedis.close();

    }

}

7.Redis高级客户端Lettuce

这里想提一下Lettuce,虽然和Jedis一样,他们都是Java对redis操作命令的封装,但是Lettuce获得了Spring生态的认可,被集成到spring-data-redis驱动中,必有其过人之处,笔者这里只有简单的了解了一点,所以这里附上一个之前看过的觉得讲的很好的一个链接,一起学习,共勉:
Redis高级客户端Lettuce详解

你可能感兴趣的:(Redis,redis,jedis)