您现在的位置是:首页  > 后端  > 数据库  > Redis Redis

redis基础

2020-05-09【Redis】1165人已围观

简介1. 什么是RedisRedis是Remote Dictionary Server(远程数据服务)的缩写由意大利人 antirez(Salvatore Sanfilippo)  开发的一款 内存高速缓存数据库该软件使用C语言编写,它的数据模型为 key-value它支持丰富的数据结构(类型),比如 String  list  hash   set  sorted set。可持久化,保证了数据安全。 http://doc.redisfans.com/缓存:

1. 什么是Redis

RedisRemote Dictionary Server(远程数据服务)的缩写

由意大利人 antirez(Salvatore Sanfilippo)  开发的一款 内存高速缓存数据库

该软件使用C语言编写,它的数据模型为 key-value

它支持丰富的数据结构(类型),比如 String  list  hash   set  sorted set

可持久化,保证了数据安全。

http://doc.redisfans.com/

缓存:

有两种类型 :数据缓存、页面缓存(smarty)

使用缓存减轻数据库的负载。

在开发网站的时候如果有一些数据在短时间之内不会发生变化,而它们还要被频繁访问,为了提高用户的请求速度降低网站的负载,就把这些数据放到一个读取速度更快的介质(或者是通过较少的计算量就可以获得该数据) ,该行为就称作对该数据的缓存。

介质可以是文件、数据库、内存,内存经常用于数据缓存。

缓存的两种形式:

页面缓存经常用在CMS(content manage system)内存管理系统里边

数据缓存经常会用在页面的具体数据里边

新闻页面(内容主题单一、集中)适合做页面缓存

商品页面的组成部分有本身的的业务特点,各个部分数据比较独立,适合给他们分别做数据缓存”:

2. redismemcache比较

①Redis不仅仅支持简单的k/v类型的数据,同时还提供listsetzsethash等数据结构的存储。

②Redis支持master-slave()模式应用。

③Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

④Redis单个value的最大限制是1GBmemcached只能保存1MB的数据

一般redis中的key是如何设计的?

表名:主键名称:主键值:对应的字段

oa_user:uid:1:username

oa_user:uid:1:passwrod

获取用户其他字段信息keys oa_user:uid:1:*

key操作

exists key 测试指定key是否存在

del key 删除指定key的value值

type key 返回key 的value 值

rename oldkey newkey  修改key名

ttl key 返回key的剩余过期秒数(当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。)

select db-index 选择指定数据库

dbsize 返回当前数据库指定key数量

move key db-index 将key从当前数据库移动到指定数据库

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

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

string操作

set key value 设置key对应的值

mset key1 key2 val1 val2 一次设置多个key值

mget key1 key2 一次获取多个key值

incr key 对key的值做加加操作,并返回新的值

decr key 自减

incrby key integer 指定加值

decrby key integer 指定减值

append key value 给指定key的字符串追加value

substr key start end 返回截取过的key 字符串值

3. 数据类型List链表

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。

这使得list既可以用作栈,也可以用作队列。

上进上出

上进下出 队列

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

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

llen key 返回key对应list长度,key不存在返回0,不是list返回错误

lrange key string 返回指定区域的元素

list链表类型应用场合:

获得最新的10个登录用户信息: select * from user order by logintime desc limit 10;

以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(idlogintime)设置索引,索引也比较耗费系统资源

如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新数据就删除一个旧数据。每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗

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

jim   xiaoli  jack   xiaoming   linken   mary  tom

设置一个list链表key  newlogin,内部有5个元素:

该链表每增加一个新元素,就删除一个旧元素:

通过范围查找链表内部的全部元素信息:

4. set集合类型

redissetstring类型的无序集合。

set元素最大可以包含(232次方-1)个元素。

关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union)交集(intersection)差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能

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

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

元素存在返回0,key对应的set合集不存在返回错误

smove p1 p2 member 从p1中移除给定元素,成功返回1

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

该类型应用场合:qq好友推荐。

tom朋友圈(与某某是好友)mary  jack  xiaoming  wang5  wang6

linken朋友圈(与某某是好友)yuehan  daxiong  luce  wang5  wang6

创建tomFriset集合类型数据,内部有5个元素:

再创建一个linkenFriset集合key

集合取交集并集

两个集合互取差集

总结:

1. 安装redis并使用

2. key的操作: exists   keys *      rename    select   flushdb   flushall

3. String字符串类型操作:

set   get    mset   mget   incr   decr    incrby  decrby  append

substr

4. list链表类型操作

lpush    rpop   rpush  lpop

llen   lrange

5. set集合类型操作

sadd    scard    smove    sinter   sunion   sdiff   smembers

5. Sort Set排序集合类型

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

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

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

Sort set类型适合场合:

获得热门帖子(回复量)信息select * from message order by backnum desc limit 5;

(以上需求可以通过简单sql语句实现,但是sql语句比较耗费mysql数据库资源)

案例:利用sort set实现获取最热门的5帖子信息

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

(之前的set集合类型每个元素就只是一个 )

我们只做一个sort set排序集合,里边只保留5个元素信息,该5个元素是回复量最高的

每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于在集合,回复量低的就被删除。

关于重复元素:

set类型:没有

list链表类型:有

Sort set类型:没有

创建一个sort set 排序集合hotmessagekey,内部有5个元素:

按照权值由高到低的顺序获得具体元素值的信息:

增加一个新元素,就删除一个旧元素(回复量最低的)

三. 持久化功能

redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。

数据保存到硬盘的过程就称为“持久化”效果。

1. snap shotting快照持久化

该持久化默认开启,一次性redis全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)不适合频繁进行该持久化操作。

快照持久化在本地硬盘保留的数据备份文件:

快照持久化的备份频率:

save 900 1 #900 秒内如果超过 1 key 被修改,则发起快照保存

save 300 10     #300秒超过10key被修改,发起快照

save 60 10000   #60秒超过10000key被修改,发起快照

以上三个save的意思:

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

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

快照持久化文件的名字和存储位置:

快照持久化 精细持久化  可以尽最大程度保证数据的安全:

1.1 手动发起快照持久化

手动发起快照持久化:

2. append only file AOF持久化)

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

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

(同时可以修改备份文件的名字,默认是appendonly.aof)

配置文件被修改,需要删除旧进程,再根据新的配置文件启动新进程:

新进程启动好后会看到对应的aof持久化备份文件appendonly.aof

aof追加持久化的备份频率:

2.1 aof备份文件做优化处理

appendonly.aof文件内容做优化压缩处理:

(例如多个incr指令变为一个set指令)

相关操作指令:

四. redis的主从模式

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

一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据

主服务器数据会“自动”同步给从服务器

配置redis.conf文件,称为192.168.39.159的从服务器:

之后文件保存退出,杀死旧的redis进程,启动新的redis进程

配置文件修改后,重启redis服务(杀死旧进程,启动新进程)

从服务器默认禁止写入操作(可以修改如下图参数使得其可以写入数据)

. phpredis结合

1. 安装phpredis扩展

phpredis扩展软件 和 其依赖软件上传到linux系统里边:

redis扩展解压软件目录执行指令/usr/local/php/bin/phpize

作用:可以把redis扩展反过来安装进php里边,可以给redis扩展做一些php相关的配置。

提示有autoconf软件依赖问题:

安装autoconf依赖软件:

autoconf依赖软件安装成功:

phpize指令执行成功:

redis扩展软件做configure配置:

configure执行成功:

make && make install执行成功:

redis相对php的扩展文件生成ok

php配置文件(/usr/local/php/lib/php.ini)增加redis的扩展:

php.ini被修改后重启apache

redis已经成为php的扩展:

2. 通过php操作redis

php里边,redis就是一个功能类RedisRedis类里边有许多成员方法(名字基本与redis指令的名字一致,参数也一致)

phpredis的操作:

3.phpredis的可操作方法有哪些

利用反射感知Redis类的全部操作方法:

总结:

1. 数据类型Sort  Set 排序集合

2. 持久化操作,把数据从内存备份到硬盘里边

a) 快照持久化

b) aof持久化

3. 主从模式

4. php里边安装redis扩展(phpize  configure  make  make install)

5. php语言对redis的操作

作业:

1. 在中级项目的网站首页面设置一个“最新登录系统的10个用户信息展示

用到list链表数据类型

① 把项目php程序代码都部署到linux系统里边。

② 在windows系统环境里边调用linuxphp接口,实现数据的制作和读取

设置用户: file_get_contents(http://192.168.39.159/user_add.php?userid=101);

(写入新用户、删除旧用户)

显示用户: file_get_contents(http://192.168.39.159/show_user.php);

(读取list链表的全部数据)



关注博客,更多精彩分享,敬请期待!
 

Tags:

很赞哦! (0)

上一篇:Mysql常见问题

下一篇:Mysql事务四大特性

相关文章

点击排行

redis基础redis基础

本栏推荐

redis基础redis基础

我的名片

网名:随心

职业:PHP程序员

现居:湖北省-武汉市

Email:704061912@qq.com