Redis学习

 

1. 概述

 

redis是一款高性能的NOSQL系列的非关系型数据库,其存储结构为key-value形式。

1.1 什么是NoSql?

NoSql(Not Only SQL),指非关系型的数据库,是一种新的数据库理念。

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

1.1.1 NoSql与关系型数据库比较

优点:

1)nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

2)nosql的数据存在于缓存中,关系型数据库的数据存储在硬盘上,nosql的数据操作更快速。nosql基于键值对不需要经过sql的解析,性能非常高。

3)nosql的存储格式为key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种形式,而数据库一般存储基本类型,而图片、文档等大文件另存硬盘。

4)nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展;关系型数据库的表与表之间有关联关系的限制导致扩展比较困难。

缺点:

1)不提供对sql的支持,没有统一工业标准,每个nosql产品都是不同的,会产生一定学习和使用成本。

2)不提供关系型数据库对事物的处理

总结:

关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据。
 

1.2  常见NoSql产品

1.2.1 键值存储数据库

  相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
       典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 
       数据模型: 一系列键值对
       优势: 快速查询
       劣势: 存储的数据缺少结构化

1.2.2 列存储数据库

  相关产品:Cassandra, HBase, Riak
       典型应用:分布式的文件系统
       数据模型:以列簇式存储,将同一列数据存在一起
       优势:查找速度快,可扩展性强,更容易进行分布式扩展
       劣势:功能相对局限

1.2.3 文档型数据库

  相关产品:CouchDB、MongoDB
  典型应用:Web应用(与Key-Value类似,Value是结构化的)
  数据模型: 一系列键值对
  优势:数据结构要求不严格
  劣势: 查询性能不高,而且缺乏统一的查询语法

1.2.4 图形数据库

  相关数据库:Neo4J、InfoGrid、Infinite Graph
  典型应用:社交网络
  数据模型:图结构
  优势:利用图结构相关算法。
  劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

1.3 Redis

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

redis有5中数据类型:

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

1.3.1 redis的应用场景

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

2. 下载安装

 官网:https://redis.io

 

3.命令操作

作为一个java开发者自然要在ide中操作,可以使用jedis(下文介绍),但是基本的命令还是要会的。

redis的命令是针对每种数据类型的,它的key-value格式中,key是字符串,value是上述5中数据类型。

3.1 字符串类型 string

存储:set key value

获取:get key

删除:del key

3.2 哈希类型 hash (每个值相当于一个Map)

存储:hset key field value

  field value为hash中的键值对,field是唯一的

获取:hget key field

删除 hdel key field

3.3 列表类型 list (双向链表相当于LinkedList)

可以进行两端操作

存储:lpush key value    从左侧插入

      rpush key value   从右侧插入

获取:lrange key start end  范围获取从0开始

  lrange key 0 -1  可以获取所有元素

删除:lpop key     rpop key

3.4 集合类型 set  无重复元素

存储: sadd key value

获取: smember key   获取set集合中所有元素

删除:srem key value :     删除set集合中的某个元素

3.5 有序集合类型 zset  无重复元素,通过double类型的分数按从小到大自动排序

存储:zset key score value

获取:zrange key start end [withscores]    带上withscores可以显示分数

删除:zrem key value

3.6 通用命令

查询所有键:keys *

获取键对应的value类型:type key

删除指定的key-value:del key  

 

除了上述命令外还有其他很多操作,自行查阅文档学习即可。

 

4.持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

redis持久化机制:

    1. RDB:默认方式,不需要进行配置,默认就使用这种机制

         在一定的间隔时间中,检测key的变化情况,然后持久化数据
         1)编辑redis.windwos.conf文件
          save 900 1  #每隔900秒有1条数据改变
          save 300 10   #每隔300秒有10条数据改变
          save 60 10000   #每隔60秒有10000条数据改变
          
         2)重新启动redis服务器,并指定配置文件名称
          要在cmd下运行server:redis-server.exe redis.windows.conf  
        
      2. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
          编辑redis.windwos.conf文件
          appendonly no(关闭aof) --> appendonly yes (开启aof)
          
          # appendfsync always : 每一次操作都进行持久化
          appendfsync everysec : 每隔一秒进行一次持久化
          # appendfsync no   : 不进行持久化

 

5. Jedis

Jedis是一款用java操作redis的工具

引入jar依赖

    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.7.0</version>
    </dependency>

使用步骤:

//连接
Jedis j = new Jedis("localhost", 6379);
//Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//操作
j.set("uname", "123456");
System.out.println(j.get("uname"));;
//关闭
j.close();

使用jedis的操作命令与用redis客户端的操作命令格式是相同的。

 

posted @ 2020-05-25 15:10  liuyiyuan  阅读(121)  评论(0编辑  收藏  举报