Redis缓存机制
一、缓存机制说明
1.原理图
2.缓存机制原理说明
缓存中的数据,一定是数据库中的数据,使用缓存主要的目的就是降低用户访问物理设备的频次。如果数据库记录更新,则缓存应该同步更新。
(1)缓存的数据结构是以K-V结构进行数据保存。
(2)开发语言是C语言程序。
(3)缓存数据的运行环境在内存中,断电即擦除。所以要考虑将内存数据进行持久化操作。
(4)如果不停的添加缓存的记录,肯定会造成内存溢出。所以要考虑定期优化缓存机制。
①LRU算法;②LFU算法;③Random;④TTL
(5)缓存也需要实现高可用机制。所以要考虑搭建缓存集群。
3.Redis介绍
3.1官网介绍
URL地址: http://www.redis.cn
Redis 是一个开源(BSD许可)的 内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
效率: 读: 11.2万次/秒 写: 8.6万次/秒 平均:10万次/秒
口诀: 1-5-8
3.2知识扩展
(1)数据库
①关系型数据库:mysql数据库/oracle数据库 2维表 行/列
②非关系型数据库:mongodb/hbase/Redis 1维表
(2)中间件:
50万次/秒 吞吐量
4Redis安装
4.1上传安装包
通过MobaXterm上传文件到linux系统的 /usr/local/src/目录下
4.2解压Redis
说明:
解压命令:tar -xvf redis-5.0.4.tar.gz
解压完成之后删除安装包/修改文件名称,删除文件命令为:rm -f 文件名;修改文件名称命令为:mv 文件原名称 文件现名称
4.3安装Redis
说明:在redis根目录中执行如下命令
命令1:make 对文件进行编译
命令2:make install 安装文件
4.4进制换算
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 10241024 bytes
1g => 1000000000 bytes
1gb => 10241024*1024 bytes
4.5修改Redis配置文件
redis.conf文件是redis的配置文件,通过修改配置文件来更改redis的状态。
(1)修改ip绑定
注释掉bind 127.0.0.1,意味着解除本机绑定,外界ip可以访问
(2)关闭保护模式
protected-mode no为关闭保护模式,相当于关闭管理员模式
(3)开启后端运行
命令:daemonize yes
redis.conf配置文件中daemonize守护线程,默认是NO。daemonize是用来指定redis是否要用守护线程的方式启动。
daemonize:yes:
redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
daemonize:no:
当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
4.6服务器命令
①启动redis redis-server redis.conf
②进入客户端 redis-cli -p 6379 exit 退出|quit|ctrl+c
③关闭redis redis-cli -p 6379 shutdown
4.7客户端命令 redis命令
String类型
命令 | 说明 | 案例 |
---|---|---|
set | 添加key-value | set username admin |
strlen | 根据key获取值的长度 | strlen key |
exists | 判断key是否存在 | exists name 返回1存在 0不存在 |
del | 删除redis中的key | del key |
Keys | 用于查询符合条件的key | keys * 查询redis中全部的key keys n?me 使用占位符获取数据 keys nam* 获取nam开头的数据 |
mset | 赋值多个key-value | mset key1 value1 key2 value2 key3 value3 |
mget | 获取多个key的值 | mget key1 key2 |
append | 对某个key的值进行追加 | append key value |
type | 检查某个key的类型 | type key |
select | 切换redis数据库 | select 0-15 redis中共有16个数据库 |
flushdb | 清空单个数据库 | flushdb |
flushall | 清空全部数据库 | flushall |
incr | 自动加1 | incr key |
decr | 自动减1 | decr key |
incrby | 指定数值添加 | incrby 10 |
decrby | 指定数值减 | decrby 10 |
expire | 指定key的生效时间 单位秒 | expire key 20 key20秒后失效 |
pexpire | 指定key的失效时间 单位毫秒 | pexpire key 2000 key 2000毫秒后失效 |
ttl | 检查key的剩余存活时间 | ttl key -2数据不存在 -1该数据永不超时 |
persist | 撤销key的失效时间 | persist key |
另外Redis命令还包含Hash类型命令、List类型命令、以及事物命令。
Hash类型命令:
说明:可以用散列类型保存对象和属性值
例子:User对象{id:2,name:小明,age:19}
List类型命令:
说明:Redis中的List集合是双端循环列表,分别可以从左右两个方向插入数据.
List集合可以当做队列使用,也可以当做栈使用
队列:存入数据的方向和获取数据的方向相反
栈:存入数据的方向和获取数据的方向相同
Redis事物命令:
说明:redis中操作可以添加事务的支持.一项任务可以由多个redis命令完成,如果有一个命令失败导致入库失败时.需要实现事务回滚.