打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PHP教程 63 - redis服务器使用
userphoto

2022.07.20 广东

关注

目录

一、什么是nosql

(1)NoSQL的基本说明:

(2)兴起的原因:

(3)特点:

(4)常见的nosql产品

二、redis的基本介绍

三、完成安装

四、redis的数据类型

1、string类型,

2、哈希(hash)类型

3、链表(list):

4、集合(set)

5、有序集合

五、redis的数据类型讲解相关命令

1、string类型

2、hashes类型

3、lists类型及操作

4、sets类型及操作

5、sorted sets类型及操作

6、redis常用命令

六、安全性(设置密码)

七、持久化的方式:

1、snapshotting(快照)默认方式

2、append-only file( 缩写aof)的方式

八、php支持redis

九、案例:

一、什么是nosql

(1NoSQL的基本说明:

NoSQL(NoSQL = Not Only SQL),意味反sql运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。

(2)兴起的原因:

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模高并发sns类型的web2.o纯动态网站已经显得力不从心,暴露了很多难以克服的 问题,而非关系型的数据库则由于本身的特点得到了非常迅速的发展。

(3)特点:

优点:

高并发读写的性能

大数据量的扩展(分布式存储)

配置简单

灵活、高效的操作与数据模型

低廉的成本

不足之处:

没有统一的标准

没有正式的官方支持

各种产品还不算成熟

(4)常见的nosql产品

新浪微博            Redis

Google                              Bigtable

Amazon                             SimpleDB

淘宝数据平台                         Tair

优酷视频                                 MongoDB

飞信空间                                 HandlerSocket

视觉中国网站                         MongoDB

二、redis的基本介绍

redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串哈希链表集合有序集合

1redis也是一个c/s 架构,

2memcache的数据是存储到内存中,redis数据也可以存储到内存里面,会同步到磁盘中,达到数据存储的持久化。

3memcache的数据存储是键值对,同样的话redis也是键值对,只不过redis值的类型比较丰富,有string(字符串),hash(哈希)list(链表),set(集合)zset(有序集合)

基本介绍:

1Redis是一个Key-Value存储系统。

2)它支持存储的value类型很多,包括string(字符串)list(链表)set(集合)Zset(有序集合)。这些数据类型都支持push/popadd/remove及取交集和并集及更丰富的操作、Redis支持各种不同方式的排序。

3)为了保证效率数据都是缓存在内存中,它也可以期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

4)提供的API语言包括:CC++C#Clojure     Common Lisp  Erlang  Haskell Java Javascript Lua Objective-C Perl PHP Python Ruby Scala Go Tcl

三、完成安装

(1)下载安装包:

http://redis.googlecode.com/files/redis-2.4.17.tar.gz

2)编译程序:

tar zxvf redis-2.4.17.tar.gz

cd redis-2.4.17

make

#安装到指定的目录,比如/usr/local/redis

make  PREFIX=/usr/local/redis install

: PREFIX要大写

安装后在/usr/local/redis/bin目录下面生成如下文件:

redis-benchmark  性能测试工具

redis-check-aof  日志文件检测工具(比如断电造成日志损坏,可以检测并修复)

redis-check-dump 快照文件检测工具,效果类上

redis-cli  客户端连接程序

redis-server 服务端启动程序

3)从解压包里面复制配置文件到新建的redis目录

cp    redis.conf      /usr/local/redis/redis.conf

4)修改该配置文件,让进程在后台运行

编辑conf配置文件(vi redis.conf),修改如下内容;

 daemonize yes

5启动与连接

服务器端启动

使用bin里面的redis-server命令,来完成启动,在启动时要指定配置文件。

语法redis-server  指定的配置文件

进入到redisbin目录执行redis-server  ../redis.conf

查看是否正常启动:启动后,默认的端口是6379

ps –ef |grep redis

netstat –tunpl | grep 6379

客户端连接

使用bin目录里面的redis-cli命令来完成连接启动。

进入到redisbin目录执行redis-cli

四、redis的数据类型

1string类型,

字符串类型,键值对形式存储,值为字符串。

name  xiaogang

age     12

email   nihao@sohu.com

2、哈希(hash)类型

哈希里面的值,又为键值对:

3、链表(list)

可以模拟队列和栈。

值里面可以存储多个值,

4、集合(set)

集合的特点:集合里面的数据是唯一的,无序性。

5、有序集合

五、redis的数据类型讲解相关命令

1string类型

String是最简单的类型,一个 key对应一个ValueString类型是二进制安全的。Redis string可以包含任何数据,比如jpg图片或者序列化的对象。

1set

设置键,值

语法:set 键名称 

例如:我们添加一个name=“hanguo”的键值对。

重新设置则直接覆盖。

2get

获取key对应的string值,如果key不存在返回 nil,

语法:get 键值

3Setnx

设置键时,先判断一下该键是否存在,如果key已经存在,返回0,nxnot exist的意思。

若键已经存在,则设置不成功,返回0

4setex

设置key对应的值为string类型的value,并指定此键值对应的有效期。

语法:setex名称 有效期  

例如:我们添加一个color = red的键值对,并指定有效期为10秒。

5setrange

替换字符串中某些字符

语法:setrange   键名称    开始替换的序号   替换为的内容

例如:我们希望将hanguosohu邮箱替换为qq.com邮箱

6mset

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。

语法:

mset 名称1   1   名称2   2     

7msetnx

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key

8getset

设置key的值,并返回key的旧值。(设置新值,获取旧值。)

9getrange

获取keyvalue值的范围内的子字符串

getrange name 0 5

10mget

一次获取多个key的值,如果对应key不存在则对应返回nil

11incr

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

incrby

incr类似,加指定值,key不存在时候会设置key,并认为原来的value0

12decr

key的值做减减操作。

decrby

decr类似,减指定值

13append

给指定key的字符串追加value,返回新字符串值的长度。

14strlen

取指定keyvalue值的长度。

2hashes类型

Redis hash是一个string类型的fieldvalue的映射表。它的添加、删除操作都是01)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

1hset

设置hash field为指定值,如果 key不存在,则先创建。

语法:

hset  哈希名称  字段名称  

2hget

取出hash field的值。语法:hget 哈希名称  字段名称

3hsetnx

设置hash field为指定值,如果key不存在,则先创建,如果存在则返回0

4hmset

同时设置hash的多个field

语法:hmset哈希名称  field1  value1 field2 value2

5hmget

获取全部指定的hash field

语法:hmget哈希名称 field1 field2

6hincrby

指定的 hash  field加上给定的值。

7hexists

测试指定的 field是否存在。

8hlen

返回指定hashfield数量。

9hdel

删除指定hashfield

语法:hdel哈希名 field

10hkeys

返回hash的所有field

11hvals

返回hash的所有value

12hgetall

获取某个hash中全部的fieldvalue

3lists类型及操作

list是一个链表结构,主要功能是pushpop、获取一个范围的所有值等等,操作中key 理解为链表的名字。redislist类型其实就是一个每个子元素都是string 类型的双向链表。我们可以通过pushpop操作从链表的头部或者尾部添加删除元素,这样list即可以作为栈,又可以作为队列。

1lpush

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

语法:lpush链表名称  值内容

2lrange

获取链表里面的值,语法:lrange 链表名称  0 -1

注意0 -1 表示取值范围,从头部到尾部。

3rpush

key对应list的尾部添加字符串元素。

语法:rpush链表名称  值内容

3linsert

key对应list的特定位置前或后添加字符串。

4lset

设置list中指定下标的元素值。注:下标从0开始计算

5lrem

key对应list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)

6ltrim

保留指定key的值范围内的数据。

7lpop

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

8rpop

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

9rpoplpush

从第一个list的尾部移除元素并添加到第二个list的头部。

 

10lindex

返回名称为keylist index位置的元素。

11llen

返回key对应list的长度。

4sets类型及操作

set是集合,它是string类型的无序集合。set是通过hash table实现的、添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blogtag功能。

1sadd

向名称为keyset中添加元素。

语法:sadd集合名   元素

2smembers 获取集合中内容,语法:smembers集合名称

3srem

删除名称为keyset中的元素.

4spop

随机返回并删除名称为keyset中一个元素。

5sdiff

返回所有给定key与第一个key的差集。

6sdiffstore

返回所有给定key与第一个key的差集,并将结果存为另一个key

语法:sdiffstore新的集合  集合1  集合2

7sinter

返回所有给定key的交集.

8sinterstore

返回所有给定key的交集,并将结果存为另一个key

9sunion

返回所有给定key的并集

10sunionstore

返回所有给定key的并集。

11smove

从第一个key对应的set中移除member并添加到第二个对应的set中。

12scard

返回名称为keyset的元素个数。

11sismember

测试member是否是名称为 keyset的元素

12srandmember

随机返回名称为keyset的一个元素,但不删除元素

5sorted sets类型及操作

sorted setset的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中的key理解为zset的名字。

1zadd

向名称为keyzset中添加元素。如果该元素存在,则更新其顺序。

语法:zadd集合名  序号  内容

2zrange

获取有序集合中的内容

3zrem

删除名称为keyzset中的元素member

4zincrby

如果在名称为keyzset中已经存在元素member,则该元素的score增加increment否则向该集合中添加该元素,其score的值为increment

5zrank

返回名称为keyzsetmember元素的排名(按score从小到大排序)即下标。

6zrevrank

返回名称为keyzsetmember元素的排名(按score从大到小排序)即下标。

7zrevrange

返回名称为keyzset(score从大到小顺序)中的indexstartend的所有元素。

8zrangebyscore

返回集合中score在给定区间的元素

9zcount

返回集合中score在给定区间的数量。

10zcard

返回集合中元素的个数

11zremrangebyrank

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

12zremrangebyscore

删除集合中score在给定区间的元素。

6redis常用命令

redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用。

1、键值相关的命令

1keys

返回满足给定参数的所有key

用表达式*,代表取出所有的key

2exists

确认一个key是否存在。

3expire

设置一个key的过期时间

4move:

将当前数据库中的key转移到其它数据库中。

5persist

移除给定key的过期时间

6randomkey

随机返回key空间的一个key

7rename

重命名key

8type:返回值的类型

2、服务器相关命令

1select

选择数据库。redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取。

当选择16时,报错,说明没有编号为16的这个数据库。

2quit

退出连接

3dbsize

返回当前数据库中key的数目

4info

获取服务器的信息和统计。

5config get

获取参数的配置。

本例中我们获取了dir这个参数配置的值,如果想获取全部参数的配置只需要执行”config get *”即可将全部的值都显示出来

6flushdb

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

7flushall

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

六、安全性(设置密码)

设置客户端连接后进行任何其他操作前需要使用的密码。

注意:因为 redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

方法:打开配置文件redis.conf

语法:

requirepass 设置的密码

requirepass guangzhou

密码验证方式有两种:

第一种:在客户端登录后,在执行某些操作时,执行auth  输入设置密码

第二种:在客户端登录时,执行验证,

redis-cli  -a  输入设置的密码 

七、持久化的方式:

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。

redis支持两种持久化方式:

1snapshotting(快照)默认方式

rdb的工作原理:

每隔N分钟或N次写操作后,

从内存dump数据形成rdb文件,

压缩

放在备份目录

save 900 1    #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。

save 300 10  #必须是300秒之后至少10个键的值发生变化。

save 60 10000 #必须是60秒之后至少10000个键的值发生变化。

(以上3个选项都屏蔽,则rdb禁用)

stop-writes-on-bgsave-error      yes    #后台存储错误停止写。

rdbcompression     yes   #使用LZF压缩rdb文件。

rdbchecksum      yes   #存储和加载rdb文件时校验。

dbfilename     dump.rdb    #设置rdb文件名。

dir     ./   #设置工作目录,rdb文件会写入该目录。

2append-only file( 缩写aof)的方式

aof方式

当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。

可以通过配置文件告诉reids我们想要通过fsync函数强制os写入到磁盘的时机。

appendonly      yes    //启用 aof 持久化方式

appendfilename  appendonly.aof   //保存命令的文件名称

# appendfsync always   //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

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

# appendfsync no   //完全依赖 os,性能最好,持久化没保证

no-appendfsync-on-rewrite no #重写aof时同步最新数据

aof重写:内存中的数据,逆化成命令,写入到.aof日志里面。以解决aof日志过大过程中。

auto-AOF-rewrite-percentage 100     当前aof文件是上次重写是增加N%时重写

auto-AOF-rewrite-min-size   64mb   aof重写至少要达到的大小

64M   =è50M         100M      =è80M(重写后)     

第一次重新完成:       第二次重到100M        第三次重写160M

手动完成重写:bgrewriteaof

注意点:

两种备份方式可以同时使用,而且推荐这么做。

恢复时,rdbaof哪个恢复的块。

rdb快,因为rdb数据是内存的映射,直接载入到内存,而aof是命令,需要逐条执行。

八、php支持redis

1、准备扩展文件。扩展文件要和php的版本一致,具体是vc几的,是否是ts的或nts的。

2、把扩展拷贝到php的安装目录下面的ext目录下面。

3、打开php.ini文件,配置加载扩展,(重启apache

4、通过phpinfo函数进行测试。

入门案例使用:

九、案例:

用户注册    用户登录   用户的删除和修改  分页显示用户   添加用户的好友

register.php用户注册页面,

思考:如何来存储用户的具体信息,使用哈希,构造一个用户键

user:id

index.php 首页面,用于显示用户列表页面。

del.php 用于删除用户,要注意删除  哈希键  ,还要删除链表里面用户的id

login.php:用户登录的页面,

loginok.php处理用户登录的页面:

接收到$username  $password  如何验证用户合法呢?

用户的数据是存储到哈希里面,哈希的键user:id

思路:根据用户输入的用户名,获取到用户的id,根据id从哈希里面获取用户的密码,该密码再和用户输入的密码进行比较。

在用户注册时,通过设置一个字符串,该字符串用于存储用户的id.

字符串的键:如何设计:’username:’.$username,$userid

addfield.php  添加好友页面,

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于redis,学会这8点就够了
Redis安装与使用
介绍Redis的各种用途以及使用场景
RedisTemplate常用方法总结
springboot2.X手册:redis的7种类型100个方法全解析
redis 数据类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服