Redis特点、安装和数据库相关指令

142 阅读10分钟

Redis特点、安装和数据库相关指令

NoSQL

NoSQL(Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出, 发展至2009年趋势越发高涨。

  • RDBMS:    关系型数据库  sql语句
  • NoSQL Not Only Sql 不仅仅是sql:   泛指非关系数据库

随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。
商城网站中对商品数据频繁查询对热搜商品的排行统计订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。
nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。

NoSQL的四大分类

键值(Key-Value)存储数据库

  1. 说明:
  • 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
    Map<key,value>
  1. 特点
  • Key/value模型对于IT系统来说的优势在于简单、易部署。
  • 但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。因为要先对整体进行遍历
  1. 相关产品
  • Tokyo Cabinet/Tyrant,
  • Redis  key value  内存 快 运行软件 ---> 磁盘---> 内存--->操作
  • SSDB  key value  硬盘---> 内存
  • Voldemort
  • Oracle BDB

列存储数据库

  1. 说明
  • 这部分数据库通常是用来应对分布式存储的海量数据。
  1. 特点
  • 键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。
    key  rouingkey 设计
  1. 相关产品
  • Cassandra、HBase、Riak.

文档型数据库(document)

  1. 说明
  • 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。

{"id":"21", "name":"张三", "age":"23" ,"tags":["帅哥","学霸"],"clazz":{"id":"21"}} ---> document
{"id":"21", "name":"xxx"} BSON

  1. 特点
  • 以文档形式存储
  1. 相关产品
  • MongoDB、CouchDB、 MongoDb(4.x). 国内也有文档型数据库SequoiaDB,已经开源。

图形(Graph)数据库

  1. 说明
  • 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
  • NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
  1. 特点
  2. 相关产品
  • Neo4J、InfoGrid、 Infinite Graph、

NoSQL应用场景

  • 数据模型比较简单
  • 需要灵活性更强的IT系统(系统设计灵活 性能要求比较高)
  • 对数据库性能要求较高
  • 不需要高度的数据一致性(Nosql产品对于事务支持都不是特别良好)

什么是Redis

image.png

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis 开源 遵循BSD 基于内存数据存储 被用于作为数据库缓存、消息中间件
Redis 数据内存中 内存:读写快 断电立即消失
机制:持久化机制 内存数据 定期写入到磁盘中

  • 总结: redis是一个内存型的数据库

内存 ram: 读写快
硬盘 rom: 数据持久化
数据库: 硬盘存储 --->内存--->操作

Redis特点

  • Redis是一个高性能key/value内存型数据库
  • Redis支持丰富的数据类型 (Memcache "字符串" Object) String,List,Set,ZSet,Hash)
  • Redis支持持久化  内存数据 持久化到硬盘中
  • Redis单线程,单进程 (线程安全 Redis分布式锁)Memechache key value 多线程

Redis实现分布式锁 java 多线程 Synchronized jvm ---> java 多线程 Synchronized jvm ---> java 多线程

Redis安装

准备环境

  • vmware15.x+
  • centos7.x+

下载redis源码包

  1. redis.io/
    image.png

  2. 下载完整源码包

  • redis-4.0.10.tar.gz
  1. 将下载redis资料包上传到Linux中
    image.png

  2. 解压缩文件
    tar -zxvf xxx
    image.png
    image.png

  3. 安装gcc

  • yum install -y gcc
    image.png
  1. 进入解压缩目录执行如下命令
  • make MALLOC=libc
    image.png
  1. 编译完成后执行如下命令
  • make install PREFIX=/usr/redis image.png image.png
  1. 进入/usr/redis/bin目录启动redis服务
  • ./redis-server
    image.png image.png
  1. Redis服务端口默认是 6379
    image.png

  2. 进入bin目录执行客户端连接操作

  • ./redis-cli –p 6379
    cd /usr/redis/bin/
    ./redis-cli -h localhost -p 6379
    image.png
  1. 连接成功出现上面界面连接成功

redis细节

1. redis启动服务的细节

注意: 直接使用./redis-server方式启动使用的是redis-server这个shell脚本中默认配置

2. 如何在启动redis时指定配置文件启动

注意: 默认在redis安装完成之后在安装目录没有任何配置文件, 需要在源码目录中复制redis.conf配置文件到安装目录
image.png

  1. 进入源码目录 cp redis.conf /usr/redis/ image.png
  2. 进入/usr/redis安装目录查看复制配置文件
    cd /usr/redis
    ls
  3. 进入bin目录加载配置启动
    ./redis-server ../redis.conf

3. 修改redis默认端口号

vim ../redis.conf image.png

image.png

想要配置修改生效,配置启动 ./redis-server ../redis.conf image.png

连接redis
./redis-cli -p 7000 image.png

4. Redis中库的概念

  • 库:database 用来存放数据一个基本单元 一个库可以存放key-value键值对,redis中每一个库都有一个唯一名称|编号从0开始
  • 默认库的个数: 16个库  库的编号: 0-15,默认使用0号库
  • 切换库命令: select dbid(库编号)
    image.png
    库的编号最大是15
    image.png
    修改库的编号
    image.png image.png

5. redis中清除库的指令

flushDB 清空当前库
flushAll 清空所有库
image.png

6. redis客户端显示中文

  • ./redis-cli -p 7000 --raw

Redis数据库相关指令

1. 操作key相关指令

DEL指令

  • 语法 : DEL key [key ...]
  • 作用 : 删除给定的一个或多个 key 。不存在的key会被忽略。
  • 可用版本: >= 1.0.0
  • 返回值: 被删除key 的数量。
  • 测试
    image.png image.png

EXISTS指令

  • 语法: EXISTS key
  • 作用: 检查给定key 是否存在。
  • 可用版本: >= 1.0.0
  • 返回值: 若key 存在,返回1 ,否则返回0。 image.png

EXPIRE

  • 语法: EXPIRE key seconds
  • 作用: 为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 返回值:设置成功返回1 。 image.png

KEYS

  • 语法 : KEYS pattern
  • 作用 : 查找所有符合给定模式 pattern 的key 。
  • 语法:
    KEYS * 匹配数据库中所有key 。
    KEYS h?llo 匹配hello ,hallo 和hxllo 等。
    KEYS h*llo 匹配hllo 和heeeeello 等。
    KEYS h[ae]llo 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 \ 隔开
  • 可用版本: >= 1.0.0
  • 返回值: 符合给定模式的key 列表。
  • 测试
    image.png
    KEYS * 可以匹配0到任意多个字符
    image.png
    KEYS h? 只能严格匹配1个任意字符
    image.png
    KEYS h[ae]llo 匹配hello 和hallo,中括号也只能匹配1个
    image.png
    KEYS h[ae][ae]llo,中括号能匹配2个,必须满足长度是6位
    image.png

MOVE

  • 语法 : MOVE key db
  • 作用 : 将当前数据库的key 移动到给定的数据库db 当中。
  • 可用版本: >= 1.0.0
  • 返回值: 移动成功返回1 ,失败则返回0 。
    image.png

PEXPIRE

  • 语法 : PEXPIRE key milliseconds
  • 作用 : 这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。
  • 可用版本: >= 2.6.0
  • 时间复杂度: O(1)
  • 返回值:设置成功,返回1 key 不存在或设置失败,返回0 image.png

PEXPIREAT

  • 语法 : PEXPIREAT key milliseconds-timestamp
  • 作用 : 这个命令和EXPIREAT 命令类似,但它以毫秒为单位设置key 的过期unix 时间戳,而不是像EXPIREAT那样,以秒为单位。
  • 可用版本: >= 2.6.0
  • 返回值:如果生存时间设置成功,返回1 。当key 不存在或没办法设置生存时间时,返回0 。(查看EXPIRE 命令获取更多信息)

TTL

  • 语法 : TTL key
  • 作用 : 以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
  • 可用版本: >= 1.0.0
  • 返回值: 当key 不存在时,返回-2 。 当key 存在但没有设置剩余生存时间时,返回-1 。 否则,以秒为单位,返回key 的剩余生存时间。
  • Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
    image.png

PTTL

  • 语法 : PTTL key
  • 作用 : 这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。
  • 可用版本: >= 2.6.0
  • 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
  • 否则,以毫秒为单位,返回key 的剩余生存时间。
  • 注意 : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
    image.png

RANDOMKEY

  • 语法 : RANDOMKEY
  • 作用 : 从当前数据库中随机返回(不删除) 一个key 。
  • 可用版本: >= 1.0.0
  • 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。
    image.png

RENAME

  • 语法 : RENAME key newkey
  • 作用 : 将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。
  • 可用版本: >= 1.0.0
  • 返回值: 改名成功时提示OK ,失败时候返回一个错误。 image.png

TYPE

  • 语法 : TYPE key
  • 作用 : 返回key 所储存的值的类型。
  • 可用版本: >= 1.0.0
  • 返回值:
    none (key 不存在)
    string (字符串)
    list (列表)
    set (集合)
    zset (有序集)
    hash (哈希表)
    image.png

2. String类型

1. 内存存储模型

image.png

2. 常用操作命令

image.png

3. 测试

image.png
strlen
image.png
append
image.png
getrange
image.png
-1是直接到末尾
image.png
image.png
setex age 超时时间 值
image.png
psetex
image.png
setnx
image.png
msetnx 只要有一个存在,所有的都不会添加
image.png
decr
image.png
decrby
image.png
Incr
image.png
incrby
image.png
incrbyfloat
image.png

重启redis

ps aux|grep redis image.png
redis是支持持久化的
image.png

4. List类型

list 列表 相当于java中list 集合 特点 元素有序 且 可以重复

1. 内存存储模型

在redis中不仅可以往左边放元素,还可以往右边放元素
image.png

2. 常用操作指令

image.png

3. 测试

type
image.png
lpush
image.png
lrange
image.png
rpush
image.png
lpushx 不能创建列表,只能对已经存在的列表做操作(从左边添加)
image.png
rpushx 不能创建列表,只能对已经存在的列表做操作(从右边添加)
image.png
lpop从左边依次弹出(移除) image.png
rpop
image.png
llen
image.png
lset
image.png
lindex
image.png
lrem
image.png
ltrim
image.png
linsert before
image.png
linsert after
image.png

5. Set类型

特点: Set类型 Set集合 元素无序 不可以重复

1. 内存存储模型

image.png

2. 常用命令

image.png

3. 测试

sadd
image.png
sdiff sets1 sets2 以sets1为基础
image.png
smembers
image.png
sinter
image.png
sunion 求并集
image.png

6. ZSet类型

特点: 可排序的set集合 排序 不可重复

ZSET 官方 可排序SET sortSet

1. 内存模型

image.png

2. 常用命令

image.png

3. 测试

zadd
image.png
zrange
image.png
zrangebyscore
image.png
zrank
image.png
zrevrank
image.png
zscore
image.png
zrem
image.png
zincrby
image.png

7. hash类型

特点: value 是一个map结构 存在key value ,key 无序的

1. 内存模型

image.png

2. 常用命令

image.png

3. 测试

hset
image.png
hget
image.png
hgetall
image.png
hdel
image.png
hmset
image.png
hmget
image.png
hsetnx
image.png
hincrby
image.png
hincrybyfloat
image.png

引用 编程不良人