非关系型数据库---Redis

目录

一,缓存的概念

1,引入缓存 

2,缓存保存的位置及分层结构

1,DNS缓存

2,应用层缓存

3,数据层缓存

4,硬件缓存

二,Redis基础

1,关系型数据库与非关系型数据库(NOSQL)

1,关系型数据库

2,非关系型数据库

3,关系型数据库与非关系型数据库的区别

4,非关系型数据库产生的背景

2,Redis简介

3,Redis与memcached对比

三,Redis安装

四,Redis命令相关

五,数据库常用的命令


一,缓存的概念

1,引入缓存 

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Redis是一个开源(BSD许可),内存中的数据结构存储,用作数据库、缓存和消息代理。

缓存的概念

缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率

系统缓存中的buffer与cache

buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存再写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后由内核在后续的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。

cache:缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有就先从硬盘读到内存再读到CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。

2,缓存保存的位置及分层结构

非关系型数据库---Redis_第1张图片

 非关系型数据库---Redis_第2张图片

互联网应用领域,提到缓存为王

  • 用户层: 浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端

  • 代理层: CDN,反向代理缓存

  • Web层: Web服务器缓存

  • 应用层: 页面静态化

  • 数据层: 分布式缓存,数据库

  • 系统层: 操作系统cache

  • 物理层: 磁盘cache, Raid Cache

1,DNS缓存

浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析

2,应用层缓存

Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:

PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执

行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线

新版前,需要先将应用缓存清理,再上线新版。

另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态

页面文件html 电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。

3,数据层缓存

  • 分布式缓存服务

Redis

Memcached

  • 数据库

MySQL 查询缓存

innodb缓存、MYISAM缓存

4,硬件缓存

  • CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存

  • 磁盘缓存:Disk Cache

  • 磁盘阵列缓存: Raid Cache,可使用电池防止断电丢失数据

二,Redis基础

1,关系型数据库与非关系型数据库(NOSQL)

1,关系型数据库

关系型数据库是一个结构化的数据库,创建在关系模型 (二维表格模型) 基础上,一般面向于记录。 SQL语句 (标准数据查询语言) 就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。

2,非关系型数据库

NoSQL (NoSQL=NotOnlySQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。 除了主流的关系型数据库外的数据库,都认为是非关系型。 主流的 NoSQL 数据库有Redis、 MongBD、 Hbase、 Memcached 等。

NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。

Oracle,mysql 等传统的关系数据库非常成熟并且已大规模商用,为什么还要用 NoSQL 数据库呢?

主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高。

3,关系型数据库与非关系型数据库的区别

(1)、数据存储方式不同

关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

① 关系型:依赖于关系模型E-R图,同时以表格式的方式存储数据

② 非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据

(2)、扩展方式不同

SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。 而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器 (节点) 来分担负载。

① 关系:纵向(天然表格式)

② 非关:横向(天然分布式)

(3)、对事务性的支持不同

如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。 虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

① 关系型:特别适合高事务性要求和需要控制执行计划的任务

② 非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

4,非关系型数据库产生的背景

可用于应对Web2.0纯动态网站类型的三高问题。

(1) High performance-------对数据库高并发读写需求

(2) HugeStorage--------------对海量数据高效存储与访问需求

(3) High Scalability && High Availability------- 对数据库高可扩展性与高可用性需求

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。 Mysql 高热数据——》redis web ——》redis ——》mysql CPU——》内存/缓存 ——》磁盘

总结:

关系型数据库: 实例–>数据库–>表(table)–>记录行(row)、数据字段(column)——》存储数据

非关系型数据库: 实例–>数据库–>集合(collection) -->键值对(key-value)

2,Redis简介

Redis (Remote Dictionary Server)在2009年发布,开发者Salvatore Sanfilippo是意大利开发者,他本想为自己的公司开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等。Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-valuedatabase),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能

Redis特性

  • 速度快: 10W QPS,基于内存,C语言实现

  • 单线程

  • 持久化

  • 支持多种数据结构

  • 支持多种编程语言

  • 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能

  • 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单

  • 主从复制

  • 支持高可用和分布式

单线程的优点:

  • 纯内存

  • 非阻塞

  • 避免线程切换和竞态消耗

Redis的典型应用场景

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享

  • 缓存:数据查询、电商网站商品信息、新闻内容

  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景

  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等

  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统

  • 地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

3,Redis与memcached对比

  • 支持数据的持久化:可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用

  • 支持更多的数据类型:支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zset(有序集合)

  • 支持数据的备份:可以实现类似于数据的master-slave模式的数据备份,另外也支持使用快照+AOF

  • 支持更大的value数据:memcache单个key value最大只支持1MB,而redis最大支持512MB(生产不建议超过2M,性能受影响)

  • 在Redis6版本前,Redis 是单线程,而memcached是多线程,所以单机情况下没有memcached 并发高,性能更好,但redis 支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发

  • 支持集群横向扩展:基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性

  • 都是基于 C 语言开发

memcached redis
类型 key-value key-value
过期策略 支持 支持
数据类型 单一数据类型 五大数据类型
持久化 不支持 支持
主从复制 不支持 支持
虚拟内存 不支持 支持

三,Redis安装

1,关闭防火墙和selinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

2,进入指定目录将安装包放入

[root@localhost opt]# cd /opt
[root@localhost opt]# ls
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
redis-5.0.7.tar.gz

3,安装环境依赖包

[root@localhost opt]# yum install -y gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
centos                                                | 3.6 kB     00:00     
Determining fastest mirrors
软件包 gcc-4.8.5-16.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-16.el7.x86_64 已安装并且是最新版本
软件包 1:make-3.82-23.el7.x86_64 已安装并且是最新版本
无须任何处理

4,解压编译安装

由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装

[root@localhost opt]# tar zxf redis-5.0.7.tar.gz 
[root@localhost opt]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make
cd src && make all
make[1]: 进入目录“/opt/redis-5.0.7/src”
    CC Makefile.dep
make[1]: 离开目录“/opt/redis-5.0.7/src”
...........
    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

make[1]: 离开目录“/opt/redis-5.0.7/src”
[root@localhost redis-5.0.7]#
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install ##指定目录
cd src && make install
make[1]: 进入目录“/opt/redis-5.0.7/src”
    CC Makefile.dep
make[1]: 离开目录“/opt/redis-5.0.7/src”
make[1]: 进入目录“/opt/redis-5.0.7/src”

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: 离开目录“/opt/redis-5.0.7/src”
[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/utils 
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]  ##回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] ##回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] ##回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] ##回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server 
                                             ###手动输入路径
..........
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!   ##完成

上文各字段含义:

Selected config:
Port               : 6379                               #默认侦听端口为6379
Config file        : /etc/redis/6379.conf               #配置文件路径
Log file           : /var/log/redis_6379.log            #日志文件路径
Data dir           : /var/lib/ redis/6379               #数据文件路径
Executable         : /usr/local/redis/bin/redis-server  #可执行文件路径
Cli Executable     : /usr/local/redis/bin/redis-cli     #客户端命令工具

查看开启

[root@localhost utils]# ss -natp|grep redis
LISTEN     0      128    127.0.0.1:6379                     *:*    
               users:(("redis-server",pid=79032,fd=6))

修改配置文件70行改为自己的ip

[root@localhost utils]# vim /etc/redis/6379.conf
70 bind 127.0.0.1 192.168.18.100
  71 

重启服务查看

[root@localhost utils]# /etc/init.d/redis_6379 restart  ##重启服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost utils]# ss -natp |grep redis    ##查看
LISTEN     0      128    192.168.18.100:6379                     *:*   
                users:(("redis-server",pid=79130,fd=7))
LISTEN     0      128    127.0.0.1:6379                     *:*     
              users:(("redis-server",pid=79130,fd=6))

把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

四,Redis命令相关

------Redis命令工具----------
redis-server:              
#用于启动 Redis 的工具
redis-benchmark:         
#用于检测 Redis 在本机的运行效率
redis-check-aof:              
#修复 AOF 持久化文件
redis-check-rdb:           
#修复 RDB 持久化文件
redis-cli:            
#是 Redis 命令行工具

---redis-cli 命令行工具------
语法:
redis-cli  -h host -p port  -a password -n 数据序号(0-15)
-h:指定远程主机
-p:指定redis服务端口
-a:指定密码,未设置数据库密码可以省略-a选项
-n:指定数据序号 库默认是0号库redis有16个库(0-15)
若不添加任何选型表示,则使用127.0.0.1:6379 连接本机上的redis 数据库

[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 
192.168.18.100:6379> quit  ##指定ip和端口号
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -n 10
192.168.18.100:6379[10]> quit ##指定数据库号
[root@localhost utils]# redis-cli  ##不指定默认127.0.0.1:6379
127.0.0.1:6379>

---------redis-benchmark-------
redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性
能。 基本的测试语法为
redis-benchmark [选项] [选项值]
-h: 指定服务器主机名。
-p: 指定服务器端口。
-s: 指定服务器 socket。
-c: 指定并发连接数。
-n: 指定请求数。
-d: 以字节的形式指定 SET/GET 值的数据大小。
-k: 1=keep alive 0=reconnect 。
-r: SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P: 通过管道传输请求。
-q: 强制退出 redis。 仅显示 query/sec 值。
--csv: 以 CSV 格式输出。
-l: 生成循环, 永久执行测试。
-t: 仅运行以逗号分隔的测试命令列表。
-I: Idle 模式。 仅打开 N 个 idle 连接并等待。

[root@localhost utils]# redis-benchmark -h 192.168.18.100 -p 6379 -c 100 -n 100000
命令即可向 IP 地址为 192.168.18.100、 端口为 6379 的 Redis 服务器发送 
100 个并发连接与 100000 个请求测试性能。
====== PING_INLINE ======
  100000 requests completed in 0.47 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1
..........
====== MSET (10 keys) ======
  100000 requests completed in 0.41 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
242130.77 requests per second
[root@localhost utils]# redis-benchmark -h 192.168.18.100 -p 6379 -q -d 100
测试存取大小为 100 字节的数据包的性能
PING_INLINE: 244498.77 requests per second
PING_BULK: 238095.25 requests per second
SET: 240384.61 requests per second
GET: 236406.61 requests per second
INCR: 238663.48 requests per second
LPUSH: 248756.22 requests per second
RPUSH: 247524.75 requests per second
LPOP: 244498.77 requests per second
RPOP: 240963.86 requests per second
SADD: 238095.25 requests per second
HSET: 242130.77 requests per second
SPOP: 233644.86 requests per second
LPUSH (needed to benchmark LRANGE): 248138.95 requests per second
LRANGE_100 (first 100 elements): 99800.40 requests per second
LRANGE_300 (first 300 elements): 40683.48 requests per second
LRANGE_500 (first 450 elements): 28304.56 requests per second
LRANGE_600 (first 600 elements): 21413.28 requests per second
MSET (10 keys): 211416.50 requests per second
[root@localhost utils]# redis-benchmark -t set,lpush -n 1000 -q
命令的作用是测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能。
SET: 249999.98 requests per second
LPUSH: 249999.98 requests per second

五,数据库常用的命令

登录数据库:redis-cli

[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 
192.168.18.100:6379> quit  ##指定ip和端口号
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -n 10
192.168.18.100:6379[10]> quit ##指定数据库号
[root@localhost utils]# redis-cli  ##不指定默认127.0.0.1:6379
127.0.0.1:6379>

设置键和值
set
get

192.168.18.100:6379> set students yangguo  ##创建键和值
OK
192.168.18.100:6379> get students  ##查看键值
"yangguo"
192.168.18.100:6379>
192.168.18.100:6379> set k1 22
OK
192.168.18.100:6379> get k1 
"22"
192.168.18.100:6379> set k1 ll  ##用set可以直接重新赋值
OK
192.168.18.100:6379> get k1  
"ll"
 

-keys
使用 keys 命令可以取符合规则的键值列表, 通常情况可以结合*、 ? 等选项来使用

192.168.18.100:6379> keys *  ##查看所有键
1) "students"
2) "mylist"
3) "counter:__rand_int__"
4) "myset:__rand_int__"
5) "key:__rand_int__"
192.168.18.100:6379> keys s*  ##查看以s开头的键
1) "students"
192.168.18.100:6379> keys m?s* ##查看m开头与s之间有一个字符的键
1) "myset:__rand_int__"

--exists
exists 命令可以判断键值是否存在。

192.168.18.100:6379> exists s1  ##不存在返回0
(integer) 0
192.168.18.100:6379> exists k1  ##存在返回1
(integer) 1
192.168.18.100:6379>

--type
使用 type 命令可以获取 key 对应的 value 值类型

192.168.18.100:6379> type k2
string
192.168.18.100:6379> type students
string    

---rename
rename 源 key 目标 key
rename 命令是对已有 key 进行重命名, 其命令格式为: rename 源 key 目标 key。 使用
rename 命令进行重命名时, 无论目标 key 是否存在都进行重命名, 且源 key 的值会覆盖目
标 key 的值。 在实际使用过程中, 建议先用 exists 命令查看目标 key 是否存在, 然后再决
定是否执行 rename 命令, 以避免覆盖重要数据

192.168.18.100:6379> keys k?        ##查看
1) "k2"
2) "k1"
192.168.18.100:6379> rename k1 k5    ##将k1改名为k5
OK
192.168.18.100:6379> keys k?       ##查看
1) "k2"  
2) "k5"

----renamenx
renamenx 命令的作用是对已有 key 进行重命名, 并检测新名是否存在。 其命令格式与
rename 的命令格式除命令关键字不同外基本相同, renamenx 源 key 目标 key。 使用
renamenx 命令进行重命名时, 如果目标 key 存在则不进行重命名

192.168.18.100:6379> renamenx k2 k6   ##k2改名为k6 
(integer) 1    ##改名成功
192.168.18.100:6379> keys k?  ##查看
1) "k6"
2) "k5"
192.168.18.100:6379> renamenx  k6 k5  ##k6改名k5
(integer) 0   ##因k5已存在未改名
192.168.18.100:6379> keys k?  ##查看
1) "k6"
2) "k5"

----dbsize
dbsize 命令的作用是查看当前数据库中 key 的数目

192.168.18.100:6379> dbsize
(integer) 7   ##有7个key
192.168.18.100:6379> keys *
1) "students"
2) "mylist"
3) "k6"
4) "counter:__rand_int__"
5) "myset:__rand_int__"
6) "key:__rand_int__"
7) "k5"

-----设置密码
CONFIG SET requirepass 123123
#设置密码
auth 123123
#验证密码
CONFIG get requirepass 
#查看密码
CONFIG set requirepass ''
#注意空格也算字符

192.168.18.100:6379> CONFIG SET requirepass 123123  ##设置密码
OK
192.168.18.100:6379> auth 123123  ##验证密码
OK
192.168.18.100:6379> CONFIG get requirepass   ##查看密码
1) "requirepass"
2) "123123"
192.168.18.100:6379> CONFIG set requirepass '123321'  ##更改密码
OK
192.168.18.100:6379> CONFIG get requirepass   ##查看密码
1) "requirepass"
2) "123321"
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -a 123321
Warning: Using a password with '-a' or '-u' option on the command line 
interface may not be safe. ###提醒用密码登录不安全
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379  ##未用密码登录
192.168.18.100:6379> set k2 21     ##创建key
(error) NOAUTH Authentication required.  ###无法创建
192.168.18.100:6379> auth 123321  ##验证密码
OK
192.168.18.100:6379> set k2 21   ##再次创建创建成功
OK
192.168.18.100:6379> get key2
(nil)
192.168.18.100:6379> get k2
"21"
192.168.18.100:6379> CONFIG set requirepass ''   ##去除密码可以将密码设为空
OK                                                 注:空格也是字符
192.168.18.100:6379> quit
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379  ##无密码登录
192.168.18.100:6379> set key3 22                             ##可以创建key
OK

Redis 支持多数据库, Redis 在没有任何改动的情况下默认包含 16 个数据库, 数据库名
称是用数字 0-15 来依次命名的。 使用 Select 命令可以进行 Redis 的多数据库之间的切换,
命令格式为 select index,其中 index 表示数据库的序号。 而使用 redis-cli 连接 Redis 数
据库后, 默认使用的是序号为 0 的数据库。

----select----------
select 数据库编号

192.168.18.100:6379> select 3  ##可以跳转数据库号
OK
192.168.18.100:6379[3]> set dd 22
OK
192.168.18.100:6379[3]> keys *
1) "dd"
192.168.18.100:6379[3]> select 0
OK
192.168.18.100:6379> keys *
 1) "mylist"
 2) "key3"
 3) "k5"
 4) "k1"
 5) "k2"
 6) "students"
 7) "counter:__rand_int__"
 8) "k6"
 9) "myset:__rand_int__"
10) "key:__rand_int__"

----多数据库间移动数据--- 
Redis 的多数据库在一定程度上是相对独立的, 例如在数据库 0 上面存放的 k1 的数据,
在其它的 1-15 的数据库上是无法查看到的。

move  键名  数据库编号

192.168.18.100:6379> move key3 10   ##将键移动到10号库
(integer) 1
192.168.18.100:6379> select 10     ###进入10号库
OK
192.168.18.100:6379[10]> keys *   ##查看键
1) "key3"


清除数据库内数据
Redis 数据库的整库数据删除主要分为两个部分: 清空当前数据库数据, 
使用 FLUSHDB
命令实现; 清空所有数据库的数据, 使用 FLUSHALL 命令实现。 但是, 数据清空操作比较危
险, 生产环境下一般不建议使用。

192.168.18.100:6379[10]> flushdb   ##清空数据库
OK
192.168.18.100:6379[10]> keys *   ###数据库没有数据
(empty list or set)
192.168.18.100:6379[10]> select 3  ##转到3号库
OK
192.168.18.100:6379[3]> keys *      ##查看有文件
1) "dd"
####由此可见 flushdb 只是清空当前所在数据库号的数据
192.168.18.100:6379[3]> select 10
OK
192.168.18.100:6379[10]> flushall   ###清空数据库
OK
192.168.18.100:6379[10]> select 3   ##查看3号库数据被清空
OK
192.168.18.100:6379[3]> keys *
(empty list or set)
192.168.18.100:6379[3]> select 0    ###查看0号数据库数据被清空 
OK
192.168.18.100:6379> keys *
(empty list or set)

###由此可见flushall是清空所有库的数据,在工作环境中一般禁止使用,使用时慎重慎重慎重!!!

你可能感兴趣的:(redis,nosql,缓存)