相关使用官网介绍的很详细

简介

  • 运行在内存里面
  • 是一款开源的、高性能的一个第三方软件,就是一个key-value存储系统(即基于KV系统的数据库)
  • redis是一种Nosql数据库,Nosql全称是Not Only SQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调Key-Value 存储和文档数据库的优点,而不是单纯的反对RDBMS

  • 与传统关系型数据库(例如mysql)不同的是,传统关系型数据库使用sql语句来操纵数据库,而redis是通过命令行来实现的。另一大相比于传统关系型数据库的优势是,由于值可以存放任意的数据类型,所以存储值类型可变动范围更大,更容易进行扩展。

持久化存储

redis持久化RDB和AOF

两种存储方式:

  • RDB
    • 记录某一个时刻的数据库当前的状态
    • 适用于当一个值经常被改动的情况下,即命令很多,但操作的一直是一个数,我们想要的只是最终结果
  • AOF
    • 记录执行的所有的命令
    • 好处是丢失数据的几率会更小

特点

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储,即“键-值”存储关系中的值是可以放置任何数据结构的,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型(当然也可以放置JSON这样的数据)。对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。
  • Redis支持数据的备份,即master-slave模式的数据备份

优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

与其他key-value存储有什么差异

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问

可用场合

一个网站,底层的静态数据存储可以用关系型数据库,如mysql,缓存系统可以用redis,牛客网就是这么做的

可以用redis来做页面浏览量的记录,验证码存储时间的记录(jedis.setex(“hello2”, 1800, “world”); ),赞/踩的数量,

当遇到短时间内要记录的数量可能发生急剧变化的场合(比如秒杀系统),可以考虑使用redis,因为redis是运行在内存里面的,传统的关系型数据库为了数据安全性,没进行一次操作都会先将数据锁住,然后再进行更改,这在这种场合下容易导致系统性能下降

  • PV(页面浏览)
  • 点赞
  • 关注
  • 排行榜
  • 验证码
  • 缓存
  • 异步队列
  • 判题队列

简单操作

下载安装完redis并配置完系统环境变量之后,打开一个命令行窗口,输入:

redis-server

开启服务程序,然后打开另一个命令行(前一个命令行不能关闭),输入:

redis-cli

这样就可以开始使用redis了。

当redis 服务器初始化时,会预先分配16个数据库(该数量可以通过配置文件配置),所有数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中。当我们选择数据库 select number 时,程序直接通过 redisServer.db[number] 来切换数据库。有时候当程序需要知道自己是在哪个数据库时,直接读取 redisDb.id 即可。

存值

set testKey abc

取值

get testKey

查看所有存在的键

keys *