首页  >  文章  >  后端开发  >  从零入手Redis缓存

从零入手Redis缓存

不言
不言原创
2018-06-04 09:48:581717浏览

这篇文章主要介绍了关于从零入手Redis缓存,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

  1. Redis介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010315日起,Redis的开发工作由VMware主持。从20135月开始,Redis的开发由Pivotal赞助。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)list(链表)set(集合)zset(sorted set --有序集合)hash(哈希类型)。这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

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

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

目前,Vmware在资助着redis项目的开发和维护。

2. Redis的安装

解压安装文件

解压好了后

执行make进行编译

编译ok、

进入src目录


Redis-cli 终端操作

Redis-server 启动redis服务的文件

Redis-benchmark压力测试文件

Redis-check-xx 检车备份文件脚本

创建Redis运行目录,并拷贝两个运行文件过去

拷贝配置文件过去

 

3. 启动Redis服务

前端启动redis服务成功的标志

./redis-server

 

这时有个问题,当前启动的是不能关的,一关就没了,所以需要进行修改

停止服务Ctrl+z

先停止掉redis服务

使用后台来启动redis服务

vim redis.conf

改成yes保存,设置后台启动redis

再次启动

发现还是前端启动

启动的时候带上配置文件一起启动

查看下redis进程

发现redis已经启动

4. 简单使用

设置了三个变量,这三个变量都存储在内存中

如何读取?

Get!

5. 具体操作

1.  Key的操作

在redis里面,出了“\n”和空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分,名字长度不做要求

换句话来说,就是变量名称

代码

作用

Exists key

是否存在

Del key1 key2 ….

删除指定的key

Type key

返回给定的key的value类型

Key pattern

返回匹配指定模式的所有的key

Rename oldkey newkey

改名字

Dbsize

返回当前数据库的key的数量

Expire key seconds

为key指定过期时间

Ttl key

返回key的过期秒数

Select db-index

选择数据库

Move key db-index

将key从当前数据库移动到指定数据库

Flushdb

删除当前数据库中所有的key

Flushall

删除所有数据库中的所有key


 

这里举例了一个的使用

2.  String类型的操作

String是redis最基本的类型

Redis的string可以包含任何数据,包括jpg图片或者序列化对象

单个value值最大上限是1G字节

代码

作用

Set key value

设置key对应的值为string类型的value

Mset key1 value1…keyN valueN

一次设置多个key的值

Mget key1 key2 … keyN

一次获取多个key的值

Incr key

对key的值做++操作

Decr key

同上 –操作

Incrby key integer

同incr 加指定值

Decrby key integer

同decr 减指定值

Append key value

给指定key的字符串追加value

Substr key start end

返回截取过的key的字符串值

 

 

3.  List链表类型的介绍和使用

List类型其实是一个双向链表

如果想要查询前10个最新的用户,

要一个个查,太消耗资源

List链表示例图:

通过list链表保存登陆系统的最新5个用户信息

新用户进来,旧的用户踢出

链表该如何操作?

代码

作用

Lpush key  string

在key对应list的头部添加字符串元素

Rpop key

从list的尾部删除元素,并返回删除元素

Lien key 返回 key

对应list的长度,key值不存在返回0,如果key对应类型不是list返回错误

Rpush key  string

同上,在尾部添加

Lpop key

从list的头部删除元素,并返回删除元素

Ltrim key  start end

截取list,保留指定区间内的元素


4.  Set集合类型

Redis的set是string类型的无序集合。

Set元素最大可以包含(2的32次方-1)个元素

每个集合中的各个元素不能重复

代码

作用

Sadd key  member

添加一个string元素到key对应的set集合中,返回成功1

Srem key member

从key对应·set中移除给定元素,成功返回1

Smove p1 p2  member

从p1对应set中移除member并添加到p2对应set中

Scard key

返回set的元素个数

Sismember key  member

判断member是否存在set中

Sinter key1 key2.。。。

返回所有给定key的交集

Sunion key1  key2

返回所有给定key的并集

Sdiff key1 key2.。

返回所有给定key的差集

Smembers key

返回key对应set的所有元素,结果是无序的


 

里面有一个key五个元素

接着又添加一个Linken

 

5.  SortSet排序集合类型操作

和set一样,sorted set 也是string元素的集合

不同的是,每个元素都会关联一个权

通过权值可以有序的获取集合中的元素

案例:

利用sort set实现获取最热门的前5帖子学习

排序集合中的每个元素都是值,权的组合

代码

作用

Zadd key  score member

添加元素到集合,元素在集合中存在则更新对应score

Zrem key  member

删除指定元素,1成功,0不存在

Zincrby key incr  member

按照incr幅度增加对应member的score值,返回score值

Zrank key member

返回指定元素在集合中的排名(下标),集合中元素是安score从小到大排序的

Zrange key  start end

类似Irange操作从集合中指定区间的元素,返回的是有序结果

Zrevrange key start  end

同上,返回是逆序的

Zcard key

返回集合中元素个数

Zscore key elemet

返回给定元素对应的score

Zremrangebyrank  key min max

删除集合中排名在给点区间的元素


6.  快照持久化

900秒一个Key变化就(快照)保存

300秒十个key变化就(快照)保存

一分钟一万个key变化就(快照)保存

这样控制的好处:

      数据修改的频率非常高,备份的频率也高,

       数据修改的频率低,备份的频率也低。

 

快照持久化保存的名字

 



手动发起快照持久化

如果对本机:

7.  AOF持久化

本质:把用户执行的每个“写”指令(添加,删除,修改)都备份到文件中,还原的时候执行具体的“写“指令

开启AOF持久化会清空redis内部数据

开启AOF持久化

配置文件被修改 重启服务

查看redis进程:Ps –A | grep redis

-9强制杀死进程

启动一个新的进程

 

 

Aof追加持久化的备份频率

 

Always 每次收到写指令就立刻强制写入磁盘,很慢,但能保持完全的持久化

Everysec 每秒强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

No 完全依赖OS 性能最好,持久化没保证

8.  主从模式

为了降低每个redis服务器的负载,可以设置几个,并作主从模式

一个服务器负载“写“

其他服务器负载“读”

主服务器会 自动 同步给从服务器


修改IP地址和端口号

以上是从零入手Redis缓存的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn