带你走进NoSql——Redis篇

目录

Redis简介

缓存的概念

        系统缓存

                buffer和cache

                缓存保存位置及分层结构

应用层缓存

关系型数据库和NoSql数据库

                关系型数据库

                非关系型数据库

                关系型数据库和非关系型数据库区别

                非关系型数据库产生背景

 redis基础

        redis特性

                单线程

                redis 对比 memcached

                redis 典型应用场景

 安装redis

redis相关命令

 Redis数据库常用命令

 总结       

———————————————————————————————————————————

Redis官方地址:Redis

Redis简介

        Redis (Remote Dictionary Server)在2009年发布,开发者Salvatore Sanfilippo是意大利开发者,他本想为自己的公司开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等。

        Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-valuedatabase),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。

        在说Redis之前,我们要知道缓存是个是什么东西

缓存的概念

                 

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

        系统缓存

                buffer和cache

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

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

                缓存保存位置及分层结构

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

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

  • 代理层: CDN(Content Delivery Network,内容分发网),反向代理缓存

  • Web层: Web服务器缓存

  • 应用层: 页面静态化

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

  • 系统层: 操作系统cache

  • 物理层: 磁盘cache, Raid Cache

DNS缓存

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

应用层缓存

        Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线新版前,需要先将应用缓存清理,再上线新版。

        另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态页面文件html ,电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。

数据层缓存

  • 分布式缓存服务

Redis

Memcached

  • 数据库

MySQL 查询缓存、innodb缓存、MYISAM缓存

硬件缓存

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

  • 磁盘缓存:Disk Cache

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

关系型数据库和NoSql数据库

        数据库主要分为两大类:关系型数据库NoSQL 数据库。

                关系型数据库

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

                非关系型数据库

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

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

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

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

                关系型数据库和非关系型数据库区别

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

        ① 关系型数据库:依赖于关系模型E-R图,同时以表格式的方式存储数据 ② 非关系型数据库:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据

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

        ① 关系型数据库:纵向(天然表格式) ② 非关系型数据库:横向(天然分布式)

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

         ① 关系型数据库:特别适合高事务性要求和需要控制执行计划的任务 ② 非关系型数据库:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

                非关系型数据库产生背景

        可用于应对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) workdir=/usr/local/mysql

非关系型数据库不需要手动建数据库和集合(表)。

 redis基础

        redis特性

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

        单线程

        持久化

        支持多种数据结构

        支持多种编程语言

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

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

        主从复制

        支持高可用和分布式

                单线程

Redis 6.0版本前一直是单线程方式处理用户的请求

单线程为何如此快?

  • 纯内存

  • 非阻塞

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

                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 语言开发

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

                redis 典型应用场景

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

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

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

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

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

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

 安装redis

首先安装依赖包

[root@localhost ~]# yum install -y gcc gcc-c++ make

解压

[root@localhost /opt]# tar zxvf redis-5.0.7.tar.gz 
[root@localhost /opt]# cd /opt/redis-5.0.7/
[root@localhost /opt/redis-5.0.7]# make

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

[root@localhost /opt/redis-5.0.7]# make PREFIX=/usr/local/redis install

执行软件包提供的 install_server.sh 脚本文件设置Redis服务所需要的相关配置文件

[root@localhost /opt/redis-5.0.7/utils]# ./install_server.sh

 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     #客户端命令工具

可以查看redis是否开启

[root@localhost /opt/redis-5.0.7/utils]# ss -natp |grep redis

 编辑配置文件

[root@localhost /opt/redis-5.0.7/utils]# vim /etc/redis/6379.conf

重启

[root@localhost /opt/redis-5.0.7/utils]# /etc/init.d/redis_6379 restart

可以在查看有一下redis

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

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

[root@localhost /opt/redis-5.0.7/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-cli  -h host -p port  -a password -n 数据序号(0-15)

-h指定远程主机
-p指定redis服务端口
指定redis服务端口指定密码,未设置数据库密码可以省略-a选项
-n指定数据序号 库默认是0号库redis有16个库(0-15)


若不添加任何选型表示,则使用127.0.0.1:6379 连接本机上的redis 数据库
redis-cli -h 192.168.37.106 -p 6379

--------------------------------------------------------redis-benchmark-------------------------------------------------

redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性能。

基本的测试语法为
redis-benchmark [选项] [选项值]

-h指定服务器主机名。
-p指定服务器端口。
-s指定服务器 socket。
-c指定并发连接数。
-n指定请求数。
-d以字节的形式指定 SET/GET 值的数据大小
-k1=keep alive 0=reconnect
-rSET/GET/INCR 使用随机 key, SADD 使用随机值
-P通过管道传输<numreq>请求
-q强制退出 redis。 仅显示 query/sec 值
--csv以 CSV 格式输出
-l生成循环, 永久执行测试
-t仅运行以逗号分隔的测试命令列表
-IIdle 模式。 仅打开 N 个 idle 连接并等待

结合上述选项, 可以针对某台 Redis 服务器进行性能检测,

        如执行 redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 1000 命令即可向 IP 地址为192.168.37.106、 端口,为 6379 的 Redis 服务器发送 100 个并发连接与 1000 个请求测试性能。

redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 10000

[root@localhost /usr/local/bin]# redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 10000
====== PING_INLINE ======
  10000 requests completed in 0.07 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

96.42% <= 1 milliseconds
99.97% <= 2 milliseconds
100.00% <= 3 milliseconds
142857.14 requests per second

====== PING_BULK ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.01% <= 13 milliseconds
100.00% <= 13 milliseconds
161290.33 requests per second

====== SET ======
  10000 requests completed in 0.07 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

98.98% <= 8 milliseconds
99.01% <= 9 milliseconds
99.04% <= 16 milliseconds
99.24% <= 17 milliseconds
100.00% <= 17 milliseconds
151515.16 requests per second

====== GET ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

97.21% <= 1 milliseconds
99.77% <= 2 milliseconds
100.00% <= 2 milliseconds
156250.00 requests per second

====== INCR ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

98.84% <= 1 milliseconds
100.00% <= 1 milliseconds
153846.16 requests per second

====== LPUSH ======
  10000 requests completed in 0.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
196078.44 requests per second

====== RPUSH ======
  10000 requests completed in 0.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
217391.30 requests per second

====== LPOP ======
  10000 requests completed in 0.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.93% <= 1 milliseconds
100.00% <= 1 milliseconds
217391.30 requests per second

====== RPOP ======
  10000 requests completed in 0.07 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

95.50% <= 1 milliseconds
100.00% <= 1 milliseconds
147058.81 requests per second

====== SADD ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
178571.42 requests per second

====== HSET ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.32% <= 1 milliseconds
100.00% <= 1 milliseconds
172413.80 requests per second

====== SPOP ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
175438.59 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  10000 requests completed in 0.06 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
172413.80 requests per second

====== LRANGE_100 (first 100 elements) ======
  10000 requests completed in 0.14 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

92.29% <= 1 milliseconds
97.95% <= 2 milliseconds
98.91% <= 3 milliseconds
99.32% <= 4 milliseconds
99.66% <= 5 milliseconds
99.84% <= 6 milliseconds
100.00% <= 6 milliseconds
72992.70 requests per second

====== LRANGE_300 (first 300 elements) ======
  10000 requests completed in 0.34 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.01% <= 1 milliseconds
93.98% <= 2 milliseconds
97.04% <= 3 milliseconds
97.99% <= 4 milliseconds
98.47% <= 5 milliseconds
98.75% <= 6 milliseconds
98.97% <= 7 milliseconds
99.12% <= 8 milliseconds
99.19% <= 9 milliseconds
99.27% <= 10 milliseconds
99.34% <= 11 milliseconds
99.42% <= 12 milliseconds
99.49% <= 13 milliseconds
99.55% <= 14 milliseconds
99.65% <= 15 milliseconds
99.78% <= 16 milliseconds
99.93% <= 17 milliseconds
99.99% <= 18 milliseconds
100.00% <= 18 milliseconds
28985.51 requests per second

====== LRANGE_500 (first 450 elements) ======
  10000 requests completed in 0.46 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.01% <= 1 milliseconds
20.05% <= 2 milliseconds
95.62% <= 3 milliseconds
97.55% <= 4 milliseconds
98.36% <= 5 milliseconds
98.79% <= 6 milliseconds
99.05% <= 7 milliseconds
99.18% <= 8 milliseconds
99.39% <= 9 milliseconds
99.58% <= 10 milliseconds
99.75% <= 11 milliseconds
99.87% <= 12 milliseconds
99.96% <= 13 milliseconds
100.00% <= 13 milliseconds
21929.82 requests per second

====== LRANGE_600 (first 600 elements) ======
  10000 requests completed in 0.56 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.09% <= 1 milliseconds
0.85% <= 2 milliseconds
72.41% <= 3 milliseconds
98.78% <= 4 milliseconds
99.22% <= 5 milliseconds
99.45% <= 6 milliseconds
99.80% <= 7 milliseconds
99.95% <= 8 milliseconds
100.00% <= 8 milliseconds
17985.61 requests per second

====== MSET (10 keys) ======
  10000 requests completed in 0.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
196078.44 requests per second

        执行 redis-benchmark -h 192.168.100.41 -p 6379 -q -d 100 命令的作用是测试存取大小为 100 字节的数据包的性能。
redis-benchmark -h 192.168.37.106 -p 6379 -q -d 100


[root@localhost /usr/local/bin]# redis-benchmark -h 192.168.37.106 -p 6379 -q -d 100
PING_INLINE: 226757.36 requests per second
PING_BULK: 224215.23 requests per second
SET: 227790.42 requests per second
GET: 224215.23 requests per second
INCR: 226244.34 requests per second
LPUSH: 235849.06 requests per second
RPUSH: 223214.28 requests per second
LPOP: 227790.42 requests per second
RPOP: 232018.56 requests per second
SADD: 227790.42 requests per second
HSET: 232558.14 requests per second
SPOP: 225225.22 requests per second
LPUSH (needed to benchmark LRANGE): 234741.78 requests per second
LRANGE_100 (first 100 elements): 75528.70 requests per second
LRANGE_300 (first 300 elements): 28089.89 requests per second
LRANGE_500 (first 450 elements): 18656.72 requests per second
LRANGE_600 (first 600 elements): 13831.26 requests per second
MSET (10 keys): 173913.05 requests per second

        还可以测试某些操作的性能, 例如执行 redis-benchmark -t set,lpush -n 100000 -q
命令的作用是测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能。

redis-benchmark -t set,lpush -n 100000 -q

[root@localhost /usr/local/bin]# redis-benchmark -t set,lpush -n 100000 -q
SET: 229885.06 requests per second
LPUSH: 236966.83 requests per second

 Redis数据库常用命令

登录redis

[root@localhost /usr/local/bin]# redis-cli -h 192.168.37.106 -p 6379 
192.168.37.106:6379>

设置键和值

192.168.37.106:6379> set students bb
OK
192.168.37.106:6379> get students
"bb"

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

测试,多建几个键值对 

192.168.37.106:6379> set v1 s1
OK
192.168.37.106:6379> set v2 s2
OK
192.168.37.106:6379> set v3 s3
OK
192.168.37.106:6379> set v23 s32
OK
192.168.37.106:6379> KEYS v??
1) "v23"
192.168.37.106:6379> KEYS *
1) "counter:__rand_int__"
2) "key:__rand_int__"
3) "v3"
4) "v23"
5) "students"
6) "myset:__rand_int__"
7) "mylist"
8) "v1"
9) "v2"

 查看当前数据库中以 v 开头的数据

192.168.37.106:6379> KEYS v*
1) "v3"
2) "v23"
3) "v1"
4) "v2"

查看当前数据库中以 v 开头后面包含任意一位的数据

192.168.37.106:6379> KEYS v?
1) "v3"
2) "v1"
3) "v2"

查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据

192.168.37.106:6379> KEYS v??
1) "v23"

-----------------exists----------------

exists 命令可以判断键值是否存在。返回0为没有,返回1则有

192.168.37.106:6379> exists bb
(integer) 0
192.168.37.106:6379> exists xb
(integer) 0
192.168.37.106:6379> exists v1
(integer) 1

---------------------type--------------

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

192.168.37.106:6379> type v1
string

---------------------rename---------------

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

192.168.37.106:6379> KEYS v*
1) "v3"
2) "v1"
3) "v2"
192.168.37.106:6379> rename v2 v33
OK
192.168.37.106:6379> KEYS v*
1) "v3"
2) "v33"
3) "v1"

 -------------------renamenx--------------

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

192.168.37.106:6379> renamex v33 v2
(error) ERR unknown command `renamex`, with args beginning with: `v33`, `v2`,

 -----------------------dbsize----------------

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

192.168.37.106:6379> dbsize
(integer) 9

-----------------------设置密码---------------

192.168.37.106:6379> CONFIG SET requirepass 123123
OK

                                                        注意空格也算字符哦 

此时看键值对是报错的

192.168.37.106:6379> KEYS *
(error) NOAUTH Authentication required.

验证密码即可

192.168.37.106:6379> AUTH 123123
OK
192.168.37.106:6379> KEYS *
1) "counter:__rand_int__"
2) "key:__rand_int__"
3) "v3"
4) "v33"
5) "students"
6) "myset:__rand_int__"
7) "mylist"
8) "23"
9) "v1"

查看密码

192.168.37.106:6379> CONFIG GET requirepass
1) "requirepass"
2) "123123"

--------------------------------------------------多数据库操作------------------------------------------------------------

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

192.168.37.106:6379> SELECT 10
OK
192.168.37.106:6379[10]> SELECT 5
OK


-----------------多数据库间移动数据------------------------ 
        

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

move  键名  数据库编号

192.168.37.106:6379[1]> MOVE xb 0
(integer) 1

        清除数据库内数据
Redis 数据库的整库数据删除主要分为两个部分: 清空当前数据库数据, 使用 FLUSHDB

命令实现

192.168.37.106:6379> SELECT 1
OK
192.168.37.106:6379[1]> set s1 12
OK
192.168.37.106:6379[1]> KEYS *
1) "s1"
192.168.37.106:6379[1]> FLUSHDB
OK
192.168.37.106:6379[1]> KEYS *
(empty list or set)

               清空所有数据库的数据, 使用 FLUSHALL 命令实现。 但是, 数据清空操作比较危险, 生产环境下一般不建议使用 

 总结       

        Redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

        Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 

        Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柏ぁ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值