Redis配置与优化

一.Redis概念

1.关系数据库SQL与非关系数据库NoSQL

关系数据库
  • 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
  • SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
  • 主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
  • 以上数据库在使用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,如果数据与表结构不匹配就会存储失败。
非关系数据库
  • NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
  • 除了主流的关系型数据库外的数据库,都认为是非关系型。
  • 不需要预先建库建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。
  • 主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached、ElasticSearch、TSDB 等。

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

数据存储方式不同

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

扩展方式不同

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

对事务性的支持不同

  • 关系型数据库遵循ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))。
  • NoSQL数据库遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state)、最终一致性(Eventual Consistency))。
  • 由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。
  • NoSQL数据库是在CAP(一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,不可能同时全部满足,所以对事务的支持不是很好。

总结:

关系型数据库:
实例-->数据库-->表(table)-->记录行(row)、数据字段(column)

非关系型数据库:
实例-->数据库-->集合(collection)-->键值对(key-value)
非关系型数据库不需要手动建数据库和集合(表)。

3.redis概念

Redis(远程字典服务器) 是一个开源的、使用C语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。端口号:TCP/6379

Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时,会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。

4.redis优点 

具有极高的数据读写速度:数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
支持丰富的数据类型:支持 key-value、Strings、Lists、Hashes、Sets 及 Ordered Sets 等数据类型操作。
支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
原子性:Redis 所有操作都是原子性的。
支持数据备份:即 master-salve 模式的数据备份。

5.redis使用场景

Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。

6.redis为什么那么快?

  • redis是基于内存运行,数据的读写都是在内存中完成的
  • 数据结构简单,可以直接使用 键值对 的方式存储数据
  • 数据读写采用单线程模型,避免了多线程切换带来的CPU性能损耗,同时也不用考虑各种锁的影响
  • 采用IO多路复用模型,非阻塞IO可以使网络线程处理更多的网络连接请求,提高了网络并发能力

7.数据类型:五大基础数据类型

string(字符串)
list(列表)  
hash(哈希/散列)  
set(集合/无序集合)  
zset/sorted set(有序集合)
Redis 命令工具

redis性能压测攻击

redis-benchmark -h <redis服务器地址> -p <redis端口> -a <redis密码> -c <并发连接数> -n <总请求数> -d <请求的数据大小> -t <测试的命令列表> -q

redis命令行客户端工具

redis-cli -h <redis服务器地址> -p <redis端口> -a <redis密码> [命令]

 二.常用命令

1.string类型操作:(计数器)
set 键 值
get 键
setex 键 秒数 值       #创建键并设置过期时间
incr 键                #数字递增+1
decr 键                #数字递减-1
STRLEN 键              #统计键值的字符长度
mset 键1 值1 键2 值2
mget 键1 键2
2.list类型操作:(消息队列) 
lpush 键 值1 值2 ....                #从左边开始插入元素
rpush 键 值1 值2 ....                #从右边开始插入元素
lrange 键 起始位置  终止位置         #起始位置 0表示左边开始的第一个元素,终止位置 -1表示到最后一个元素
lpop 键                              #显示并删除左边第一个元素
rpop 键                              #显示并删除右边第一个元素
lrem 键 N 值                         #从左边开始删除N个指定元素
llen 键                              #统计元素的数量
lindex 键 元素位置                   #查看第N个元素的值
linsert 键 before|after 元素 值      #在指定元素前|后插入
3.hash类型操作:(存储对象描述) 
hset 键 字段 值
hmset 键 字段1 值1 字段2 值2 ....
hget 键 字段
hkeys 键                            #查看所有的字段
hvals 键                            #查看所有字段的值
hdel 键 字段                        #删除指定字段
4.set类型操作:(抽奖,求交集、差集、并集) 
sadd 键 值1 值2 ....         #元素不能重复
smembers 键                  #查看元素,无序的
srem 键 值1 值2 ...          #删除指定的元素
srandmember 键 N             #随便显示N个元素
scard 键                     #统计元素的数量
spop 键                      #随机显示并删除一个元素
smove 键1 键2 值             #将键1的元素移动到键2中
sinter 键1 键2               #求键1与键2的交集
sdiff 键1 键2                #求键1与键2的差集
sunion 键1 键2               #求键1与键2的并集
5.zset类型操作:(排行榜,热搜) 
zadd 键 权重1 值1  权重2 值2  ....                  #score权重是可以重复的,元素值是不可以重复的
zrange 键  起始位置  终止位置 [withscores]          #起始位置 0表示左边开始的第一个元素,终止位置 -1表示到最后一个元素
zrangebyscore 键 起始权重  终止权重 [limit N M]     #查看指定权重范围的元素,按score从小到大,limit N M 表示只显示第N个之后的M个元素(不包括第N个元素)
zrevrange 键  起始位置  终止位置                    #降序查看
zrevrangebyscore 键 起始权重  终止权重 [limit N M]  #按score从大到小查看
zcard 键                                            #统计元素的数量
zcount 键 起始权重  终止权重                        #统计指定权重范围的元素数量
zrem 键  值1 值2 ...                                #删除指定的元素
zincrby 键 权重 值                                  #添加新的元素或增加指定元素的权重
6.通用操作 
del 键                 #删除键
type 键                #查看键的数据类型
keys 键                #查询键,支持通配符 * ?
exists 键              #判断键是否存在
expire 键 秒数         #为键设置过期时间
ttl 键                 #查看键当前的过期时间,-1 永不过期,-2 已过期
rename 键 新键         #重命名键,会覆盖已存在的键
renamenx 键 新键       #重命名键,不会覆盖已存在的键
dbsize                 #统计当前库中键的总数
config set requirepass '密码'      #设置redis密码
config get requirepass             #查看redis密码
select 库ID            #切换库,默认库ID为 0~15
move 键 库ID           #移动键到指定的库
flushdb                #清空当前库所有键(慎用)
flushall               #清空所有库所有键(慎用)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值