redis

目录

redis是什么

关系型数据库

非关系型数据库

关系型与非关系型数据库之间的区别

非关系型数据库的主要运用场景

常见的缓存需求场景

架构

Redis的特点

*Redis数据类型,五大数据类型

安装redis

redis常用命令


redis是什么

Redis是一个开源的软件,使用c语言编写的NQL数据库,redis基于内存运行,支持持久化(数据恢复),采用的就是key-value(键值对,一个key对应一个value)存储形式,目前再分布式架构中,非常重要的一环
Redis 是非关系型数据库,缓存型数据库

关系型数据库

关系型数据库是一个结构化的数据,行和列

列:声明对象

行:记录对象的属性

表与表之间是有关联得,使用sql语句来对指定的库,表,进行增删改查

在创表时,是设计好了表的结构,按照表的结构来存储数据,同时如果数据与表结构不匹配那么存储数据就会失败

非关系型数据库

非关系型数据库 : nosql      not only sql  不仅仅是数据库 ,是非关系型数据库的总称,除了主流的关系型数据库外的数据库,都认为是非关系型

不需要预先建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(如微信群聊里的文字,图片,视频,音乐等)

redis key : value 键值对 形式存储,每个键之间没有直接关联,库与库之间也是互相独立

关系型与非关系型数据库之间的区别

1 数据的存储方式不同
2 扩展方式不同,性能上的提升不同,关系型数据库靠的是提升本机性能,非关系型数据库可以横向扩展,加入节点如服务器的方式提高性能
3 对事物的支持性,mysql支持事务(mysql支持4种事务(4大特性)原子性,一致性,隔离性,持久性),非关系型数据库也支持事务,redis也可以支持事务,但是稳定性和处理能力都不如关系型数据库

非关系型数据库的主要运用场景

1 操作的扩展
2

海量数据处理

为什么需要海量数据处理,因为web2.0(核心是交互)技术的发展会产生纯动态网站的三高问题

1.对数据库高并发读写的需求

2.对海量数据搞笑存储与访问的需求

3.对数据库的高可扩展性与高可用性的需求

常见的缓存需求场景

1                   数据库缓存
2                   Web页面缓存
3              Cpu和硬盘之间的缓存

关系型数据库:先有库再有表,再到行,列最后存储数据

非关系型数据库:先到库再到集合再到键值对,它不需要手动创建库和集合

架构

redis_第1张图片

Redis服务器程序,是一个单进程模式,即只有一个主进程工作,也就是说在一台服务器上可以启动多个redis(端口号不能冲突)
Redis的实际处理速度是完全依靠主进程的执行效率,这时会产生一个问题,服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降,如果部署了多个redis进程,虽然能提高redis的并发处理能力,但是会给服务器的cpu带来很大的压力(工作当中一般一台服务器,一般部署3个redis进程(根据情况来看,高并发要部署多个,一般情况单进程足够))。

Redis的特点

1 redis拥有极高的读写速度,它数据读取每秒可以执行11万次,写入数据每秒可以执行8万1千次
2 支持的数据类型很多,支持丰富的数据类型
3 支持持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可以实现备份
4 原子性,所有的操作都是原子性,要么都成功,要么都失败
5 支持主从模式也就是master    slave 模式

*Redis为什么这么快

1 redis是纯内存结构,避免磁盘I/O(读写)的耗时
2 核心模块是一个单进程,减少了线程切换和回收线程的时间(线程回收失败会导致出现僵尸进程(只能重启才能解决僵尸进程))
3 I/O(读写)的多路复用机制,每个执行线路都可以同时执行读和写,使高并发的效率大大提高(特殊说明:redis的读写仍然是单进程模式)

*Redis数据类型,五大数据类型

1

string(字符串)

是redis最基本的类型,最大能存储512MB的数据,也可以春初任何数据如数字,文字,图片等等

2

list 数据类型

列表当中的元素还是string

3

Hash 类型

hash类型用于存储对象,采用hash格式来进行操作,占用的磁盘空间很少而且一个hash可以存储4294967295个键值对

4 set(无序合集)数据类型元素类型也是string,元素是唯一的,不允许重复,多个集合类型可以进行并集,交集,差集运算,主要运用,set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,访问微博的用户名,只要把对应的名称redis,set集合可以自动保存唯一性,方便下一次的访问。
5

zset 有序集合元素类型也是string

元素唯一,不能重复,每个元素,每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小,进行排序,元素的权重可以相同

zset在线积分的排行榜,可以实时更新用户的分数,可以使用zrange命令获取积分比top 10 的用户,还可以使用zrank命令通过username来获取用户的排行信息,按照权重排列

Set 和hset 创建普通类型和hash类型,一般情况下如无特殊需求,普通的创建方式即可

对一个键进行多字段存储,节省内存,使用hash方式

安装redis
systemctl stop firewalld
setenforce 0

yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/
#opt目录下要有安装包才能解压

cd /opt/redis-5.0.7/

make -j 2 && make install

make PREFIX=/usr/local/redis install

cd /opt/redis-5.0.7/utils

./install_server.sh
#一直回车确定
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server  	
#这里需要手动修改为 /usr/local/redis/bin/redis-server ,注意要一次性正确输入

ln -s /usr/local/redis/bin/* /usr/local/bin/
#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

netstat -natp | grep redis
#当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379

#Redis 服务控制
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status			#状态

#修改配置 /etc/redis/6379.conf 参数
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.233.10				#70行,添加 监听的主机地址
port 6379									#93行,Redis默认的监听端口
daemonize yes								#137行,启用守护进程(后台运行)
pidfile /var/run/redis_6379.pid				#159行,指定 PID 文件
loglevel notice								#167行,日志级别
logfile /var/log/redis_6379.log				#172行,指定日志文件

/etc/init.d/redis_6379 restart

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
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
redis-cli -h 192.168.233.67 -p 6379 -a 123456
#登录redis

#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 连接并等待。

#向 IP 地址为 192.168.233.66、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.233.66 -p 6379 -c 100 -n 100000

#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.233.66 -p 6379 -q -d 100

#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
redis常用命令
redis-cli -h 192.168.233.66 -p 6379
#redis-cli 直接使用仅限于本地登录,远程登录还是需要指定目标服务器的ip地址,上面为指定ip地址登录,-h为指定ip地址,-p为指定端口号,-a为指定登录密码

#string 类型

keys *
#展示当前所有,有多少键值对

set test gq
#新建键,set设置存放,后面加上test键的名称(自定义且不能重复),gq为值

get test
#get查看 test 对应的值为 gq

set test 10
#更新,替换原本test,直接覆盖

keys test  
keys t*
keys t???
#指定查看,模糊查找

exists test
#确认键是否存在,1为存在,0为不存在

del test test1
#删除键,可以一次性删除多个键

type test
#查看对应键的类型

append test1 hello
append test1 world
get test1 
"helloworld"
#追加如果键不存在则会创建,如果存在则会追加

strlen test1
#直接查看键的长度

incr test
#表示该键的值自增1,值必须为数字操作才会生效
decr test
#表示该键的值自减1,值必须为数字操作才会生效
incrby test 10
#表示该键的值增加10
decrby test 10
#表示该键的值减少10

setex test 15 lo
#新建创建test键,设置15秒的生命周期
ttl test
#查询生命周期 -2表示生命周期已过期,-1表示永不过期
expire test 10
#对已有键值对设置生命周期

mset k1 hello k2 world
#批量创建k1,k2
mget k1 k2
#同时打印k1 k2
#list 类型

lpush test a b c 1 2 3
#创建test列表
lrange test 0 -1
#从左往右查看创建的全部0表示列表索引第一个位置,-1为最后一个位置
lindex test 3
#索引下标指定查看
rpush test 1 2 3 4 5 6
#从右往左查
lpushx test 10
#从左往右插,插入后在第一个显示
rpushx test 10
#从右往左插,插入后在最后显示
lpop test 
#从左往右删除第一个
lrange test
#从右往左删除最后一个
llen test
#查看总长度
lset test 3 shuai
#根据索引下标来修改第4个数据
linsert test before 3 10
#在指定位置前面插入数据
*#hash类型
hset test tall yes
#创建test键,值为yes
hget test tall
#查看键值
hset test handsan yes
#添加新字段
hget test handsan
#查看
hmget test tall handsan
#查看多个
hset test age 20
hmget test tall handsan age
#还可以添加一个新字段
hdel test handsan tall
#删除,nil表示为不存在

hmset test tall rich age 23 fcz yes
hmget test tall age fcz
#rich,23,yes,一直字段对应一个值
hgetall test
hkeys test
hvals test
#直接查询全部,三种方式
#set数据类型(无序集合)

flushall
#清除所有数据,少用最好别用

sadd myset a a c
#返回的是2,里面应该只有a和c,是不允许有重复的
smembers myset
#查看集合
sismember myset c
sismember myset f
#返回1表示元素存在,返回0表示元素不存在
sadd myset a b c d e f
#添加多个,因为是无序集合,所以不会排序
srandmember myset
#随机返回一个数值
spop myset
#随机移除一个数值
srem myset a e f
#指定移除a e f三个数值
#zset有序集合,元素类型也是string,元素唯一不能重复

zadd myzset 1 "one"
# 1是权重,one是元素,元素可以加引号,可以不加
zrange myzset 0 -1 withscores
#显示权重和元素
zrange myzset 0 -1
#不加withscores没有权重,只有元素

zrank myzset one
zrank myzset four
#显示位置索引,不存在就会显示nil

zcard myzset
#查看成员数量
zcount myzset 1 4
#表示权重的范围 1<=scroe<=4

zrem myzset three
#删除

zscore myzset two
#查看权重

rename test gq
#改名


redis的库都是创建好的库,一共16个库,数字排名0-15,默认是0号库,每个数据库之间互相独立,互不干扰。

dbsize
#查看当前库的键的数量

select 1
#切换到 1 库,最高到15

move test 15
把当前库test键移动到15号库

config set requirepass 123456
#给当前库创建密码

auth 123456
#在内声明密码,需要进入redis数据库
redis-cli -h 192.168.233.66 -p 6379 -a 123456
#在外声明密码

flushdb
#删除当前库数据

flushall
#删除所有库数据

你可能感兴趣的:(redis,数据库,缓存)