一、redis介绍

1.1 NoSQL 数据库的分类

1.1.1键值(Key-Value)存储数据库
相关产品有 Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB,
主要应用于内容缓存,主要用于处理大量数据的高访问负载。

1.1.2列存储数据库
相关产品有 Cassandra, HBase, Riak,典型应用于分布式的文件系统。

1.1.3文档型数据库
相关产品有 CouchDB、MongoDB,典型应用于 Web 应用,可以突破传统
关系型数据库的结构限制,存储数据更为灵活。

1.1.4图形(Graph)数据库
相关数据库有 Neo4J、InfoGrid、Infinite Graph,典型应用于社交网络,
存储数据采用图结构利用图结构相关算法

1.2 redis是什么

  1. redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。提供很多种语言的API。<br />redis的官网地址:[https://redis.io/](https://redis.io/)<br />所有的版本的下载列表:[https://download.redis.io/releases/](https://download.redis.io/releases/)

1.3作用

  1. 持久化
  2. 效率高,高速缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计数器,计时器(浏览量
  6. 。。。

    二、redis安装

    安装 redis 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc:yum install gcc-c++。
    redis.io下载最新版redis-5.0.9.tar.gz后解压。

  7. 然后将下载的 redis 上传到虚拟机的/usr/local 目录下

  8. 接下来解压 Redis 压缩包,使用命令:tar -xf redis-5.0.9.tar.gz
  9. 进入解压后的目录进行编译和安装,编译使用命令 make,安装使用命令make install。

安装之后,默认情况下,redis安装时产生的命令文件是在 user/local/bin 目录中

  1. ./redis-benchmark //用于进行redis性能测试的工具
  2. ./redis-check-dump //用于修复出问题的dump.rdb文件
  3. ./redis-cli //redis的客户端
  4. ./redis-server //redis的服务端
  5. ./redis-check-aof //用于修复出问题的AOF文件
  6. ./redis-sentinel //用于集群管理


三、redis的启动停止

3.1 redis的启动

启动redis非常简单,直接./redis-server就可以启动服务端。
默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。
查看服务器是否启动:ps -ef | grep redis

使用客户端:redis-cli //在6379端口下

3.2 redis的停止

要停止正在运行的 Redis 服务,可以采用 Linux 命令的方式直接杀掉 Redis服务的进程,也可以使用 Redis 客户端想服务器发送 shutdown 指令来关闭Redis 服务器。
1.使用客户端指令

./redis-cli SHUTDOWN

2.使用命令

./redis-cli -p 6379 shutdown

四、常用命令

  1. #切换数据库
  2. select 3
  3. #查看数据库大小
  4. DBSIZE
  5. #查看数据库所有key
  6. key *
  7. #清除当前数据库
  8. FLUSHDB
  9. #清除所有数据库
  10. FLUSHALL

五、redis的五大数据类型(value)

redis是一种高级的key:value存储系统,其中value支持五种数据类型

4.1.字符串(strings)

  1. redis中没有intbooleandouble等等这些类型,所有的java中的基本类型和Stringredis中都是<br />string。**

4.1.1插入数据的操作

redis 中赋值操作使用 set 命令,语法 set key value
多个值的插入使用mset命令,语法 mset key1 value1 key2 value2 …

  1. set name wyb //键为name,值为wyb
  2. mset name wyb age 23 //姓名和年龄为键,wyb 23为值

**

4.1.2取值的操作

redis 中进行取值操作使用 get 命令,语法:get key
多个值的获取使用mget命令, 语法:mget key1 key2 …
注意:使用get时如果键不存在则返回(nil)

  1. get name //取值
  2. mget name age //

**

4.1.3获取对应的值并修改

  1. getset name lqy //将name的值改为lqy

4.1.4删除命令

在 Redis 中删除数据使用 del 命令,语法:del key

  1. del age //删除

注:如果字符串里面有特殊符号,比如空格,就需要用””包裹起来。

4.1.5自增自减

当存储的字符串是整数时,让当前键值递增,并返回递增后的值。语法:incr key。

  1. get num //假设有num且为1
  2. incr num //结果:(integer)2
  3. get num //结果:2

注:如果key不存在会自动创建key并赋值为1
可以使用incrby num 20 自定义每次加20.

自减命令:decr key.

4.1.6追加数据

语法:append key value

  1. //birthday:2021-3-5
  2. append birthday " 18:57:20"
  3. get birthday //"2021-3-5 18:57:20"

4.1.7获取长度

语法:strlen key

4.2.字符串列表(list)

  1. 列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。<br /> 列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为 0(1),获取越接近两端的元素速度就越快。这意味着 即使是一个有几千万个元素的列表,获取头部或尾部的 10 条记录也是极快的。
  1. # 添加元素 :使用lpush rpush
  2. 127.0.0.1:6379> lpush list1 1 2 3 4 5 #←左插入
  3. (integer) 5
  4. 127.0.0.1:6379> rpush list2 a b c d e #右插入
  5. (integer) 3
  6. #查看元素 - range
  7. lrange list1 0 6
  8. #5 4 3 2 1 a b
  9. #-1表示最后一个元素,索引是从0开始的
  10. lrange list1 0 -1
  11. # 5 4 3 2 1 a b c d e
  1. #在列表中可以使用 lpop 和 rpop 分别列表的左侧和右侧弹出一个数据,该数据会首先返回,然后再从原列表中删除
  2. lpop list1
  3. #获取list1长度
  4. llen list1

小结:

  • 实际上是一个链表
  • 在两边插入值或者改动,效率最高。中间的插入修改,相对效率低
  • 消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)

    4.3.字符串集合(set)

    redis的set类型和java中的HashSet一样,无序且不重复
    集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等, 由于集合类型的 Redis 内
    部是使用值为空的散列表实现,所有这些操作的时间复 杂度都为 0(1)。 Redis 还提供了多个集合之间的
    交集、并集、差集的运算。
    1. #添加元素
    2. sadd set1 1 2 3 4 5 a b c d e
    3. #获取所有元素
    4. SMEMBERS set1
    5. #删除元素
    6. srem set1 2 5
    7. #查询是否存在某个元素
    8. SISMEMBERS set1 a
    9. #集合中元素个数
    10. SCARD set1

    4.4.有序字符串集合(sorted set)

4.5.哈希(hash)