什么是redis??

关系数据库与非关系型数据库

关系型数据库( sql)
关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上(E-R图),一般面向于SQL语句 (标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的松主流的关系型数据库包括Oracle、MysQL、sQL Server、Microsoft Access、DB2等。
关系型数据库:主要以二维表结构方式存储数据/实体属性,同时相互关联的一种数据库类型。
非关系型数据库(nosql )
NosQL(NosQL=Not Only sQL),意思是"不仅仅是sQL",是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型。
主流的NosQL数据库有Redis、MongBD、Hbase、Memcached Postgresql (pg)等。

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

可用于应对Web2.0纯动态网站类型的已高间题。
高并发读写需求,
海量数据高效存储与访问需求,
对数据库高扩展性和高可用性需求。

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

1,数据存储方式不同
关系型:依赖于关系模型E-R图,同时以表格的方式存储数据。
非关系型:除了以表格得方式储存数据外,还会以大块的形式组合在一起进行存储数据。
2,扩展方式不同(最大差异
关系型:要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
非关系型:而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点) 来分担负载。
3、对事务性的支持不同
关系型:特别适合高事务性要求和需要控制执行计划的任务。
非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面
4,关系数据库:保存位置 磁盘。
非关数据库(内存/缓存数据库) :保存的位置是缓存/内存(效率、速度块)特殊的是redis, 因为redis可以将内存中的数据保存在磁盘中。
5,非关系型数据库不需要手动建数据库和集合(表)。

redis介绍

Redis是一个开源的、使用C语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
Redis服务器程序是单进程模型
一台redis服务器可以同时启动多个redis进程,redis得实际处理速度完全依赖于主进程得执行效率。若在服务器上只运行一个redis进程,当多个客户端同时访问时,服务器处理能力会有一定程度下降:若开启多个redis进程虽然会提高处理并发的能力,但也会给cpu造成很大压力。
建议开启2个redis,既能备份,又能提高处理并发的能力还不给cpu造成过分大压力。

redis优点

1,和MySQL相比具有极高的读写速度,
2,和其她非关数据库相比支持丰富的数据类型
例如:
string 字符串(可以为证书,浮点,字符)
list 列表(实现队列,元素不唯一,先入先出原则)
set 集合 (各不相同的元素)
set 集合
ordered sets 有序集合
hash 散列值(hash的key必须是唯一的)
3,支持数据持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
4、支持数据备份}即master-salve 模式的数据备份。
5、原子性:Redis所有操作都是原子性的。

redis使用场景

缓存高热数据
获取最新N个数据的操作
排行榜应用
计数器应用
存储关系
实时分析系统
日志记录

安装redis

// 
[root@localhost ~]# yum -y installl gcc gcc-c++ make
[root@localhost ~]# cd /opt
[root@localhost ~]# tar zxvf redis-5.0.5.tar.gz -C 
[root@localhost opt]# cd redis-5.0.7
[root@localhost redis-5.0.7]# make && make PREFIX-/usr/local/redis install
[root@localhost redis-5.0.7]# cd utils
[root@localhost utils]# ./install_server.sh
一直回车,但是在可执行文件路径这里要改成/usr/local/redis/bin/redis-server如果本来就是,就不改。
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/  ##可执行文件放到路径环境变量,便于系统识别

当install_server.sh脚本运行完毕,redis服务就已经启动了,默认监听端口为6379
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redis命令工具

在这里插入图片描述

redis-benchmark 测试工具

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

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

redis-cli 远程登录的命令行工具

redis-cli的全程即redis-client,表示以客户端的身份登录
语法:redis-cli -h host -p port -a password
若不添加任何选项,则表示用127.0.0.1:6379 连接本机上的redis数据库

// 
-h                    指定远程主机
-p                    指定redis服务器的端口号
-a                    指定密码,未设置数据库密码可以省略-a选项

向ip地址为192.168.226.128,端口为6379的redis服务器发送100个并发连接与10000请求测试性能

// 
[root@localhost ~]# redis-benchmark -h 192.168.142.143 -p 6379 -c 100 -n 10000

测试存取大小为100字节的数据包的性能

// 
[root@localhost ~]# redis-benchmark -h 192.168.142.143 -p 6379 -q -d 100

测试本机上redis服务在进行set与lpush操作时的性能

//
 [root@localhost ~]# redis-benchmark -t set,lpush -n 10000 -q

数据库常用命令

set:存放数据,命令格式set key value
get: 获取数据,命令格式get key
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

重命名

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

//
192.168.142.143:6379> rename k1 k2  //k2不存在
OK
192.168.142.143:6379> get k1
(nil)
192.168.142.143:6379> get k2
"1"
192.168.142.143:6379> renamenx k2 k11   //k11存在
(integer) 0
192.168.142.143:6379> get k2
"1"
192.168.142.143:6379> get k11
"2"
192.168.142.143:6379> 

renamenx 命令的作用是对已有key进行重命名,并检测新名是否存在,如果目标key存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key

//
192.168.142.143:6379> get school
"lisi"
192.168.142.143:6379> get school01
"zahngsan"

192.168.142.143:6379> renamenx school school01
(integer) 0
192.168.142.143:6379> get school
"lisi"
192.168.142.143:6379> get school01
"zahngsan"
192.168.142.143:6379> 

使用config set requirepass password 命令设置密码
使用config get requirepass 命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
在这里插入图片描述
删除密码

// 
192.168.142.143:6379> config set requirepass '' ## 将密码设置为空
OK

Redis 多数据库常用命令

Redis 支持多数据库,Redis默认情况下包含16个数据库,数据库名称使用数字0-15来依次命名的(多数据库相互独立,互不干扰)
3.1 多数据间切换
命令格式:select 序号
使用redis-cli连接redis数据库后,默认使用的是序号为0的数据库

在这里插入图片描述

性能管理

内存碎片率

操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)
跟踪内存碎片率对理解Redis实例的资源性能是非常重要的:

内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150号,其中50号是内存碎片率。需要在redis-cli工具上输入shutdown save命令,并重启Redis服务器。
内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用

内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
避免内存交换发生的方法:

针对缓存数据大小选择安装Redis实例(云平台里面使用RDS服务,ECS云主机选择内存、缓存型配置)
尽可能的使用Hash数据结构存储
设置key的过期时间

查看内存使用

// 
192.168.142.143:6379> info memory
# Memory
used_memory:904216
used_memory_human:883.02K
used_memory_rss:13340672
used_memory_rss_human:12.72M
used_memory_peak:7054672
used_memory_peak_human:6.73M
used_memory_peak_perc:12.82%
used_memory_overhead:841390
used_memory_startup:791400
used_memory_dataset:62826
used_memory_dataset_perc:55.69%
allocator_allocated:1122120
allocator_active:1486848
allocator_resident:10825728
total_system_memory:3954188288
total_system_memory_human:3.68G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.33
allocator_frag_bytes:364728
allocator_rss_ratio:7.28
allocator_rss_bytes:9338880
rss_overhead_ratio:1.23
rss_overhead_bytes:2514944
mem_fragmentation_ratio:15.45
mem_fragmentation_bytes:12477472
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
192.168.142.143:6379> 

内回收key

保证合理分配redis有限的内存资源。
当达到设置的最大阀值时,需选择–种key的回收策略,默认情况下回收策略是禁止删除。
配置文件中修改maxmemory- policy属性值

// 
vim /etc/redis/6379.conf
598 maxmemory-policy noenviction
volatile-lru ##使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl  ##从已设置过期时间的数据集合中挑选即将过期的数据淘汰
volatile-random ##从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru  ##使用LRU算法从所有数据集合中淘汰数据
allkeys-random  ##从数据集合中任意选择数据淘汰
noenviction     ##禁止淘汰数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值