redis 内存缓存

redis 内存缓存。

安装:

www.redis.io

1、把安装文件复制到D:/redis/

2、打开cmd窗口,以管理员身份

3、运行命令

redis-server.exe redis.conf


通过客户端测试:

redis-cli.exe

2、打开cmd窗口

3、运行命令

redis-cli.exe -h 127.0.0.1 -p 6379


如果通过php操作redis,没有借口类,用扩展的方式,这个扩展不是PHP引擎默认自带的:去PHP的官网找

pecl.php.net

查看当前php的位数,线程安全与否:

phpinfo();

安装扩展:

1、把扩展php_redis.dll放到php安装目录ext

2、修改php.ini配置文件

extension=php_redis.dll 写配置文件中

3、重启apache


存字符串,数组,把数组序列化。serialize() 

$ob=new Redis();

//连接redis

$ob->connect("127.0.0.1",6379);

set(key,value) 写 覆盖

setnx(key,value) 写,不覆盖

get(key) 读

del(key) 删除

incrBy(key,number) 自增


把redis中,所有文章的点击数,获取出来?

2亿文章---》1-2000000000---》循环


存hash表


hset("表名",'名',值)

hget("表名",'名')

hlen("表名")

hgetall("表名")

hkeys("表名")

hvals("表名")

hincrby("表名",'名',number)


案例:学生信息进hash表


hset('student','s_1',serialize(['name'=>'n1','sex'=>1,'age'=>23]));


案例:显示一个聊天工具,基于hash表。

聊天过程中都发送哪些内容: 

内容 touserid fromuserid pubtime

hset('token_3_5','k_0',serialize(['content'=>'内容','touserid'=>5,'fromuserid'=>3,'pubtime'=>1451234567]));




集合set


列表list


redis配置文件:

# redis 配置文件示例

 

# 当你需要为某个配置项指定内存大小的时候,必须要带上单位,

# 通常的格式就是 1k 5gb 4m 等:

#

# 1kb => 1024 bytes

# 1mb => 1024*1024 bytes

# 1gb => 1024*1024*1024 bytes

#

# 单位是不区分大小写的,你写 1K 5GB 4M 也行

 

################################## INCLUDES ###################################

 

# 假如说你有一个可用于所有的 redis server 的标准配置模板,

# 但针对某些 server 又需要一些个性化的设置,

# 你可以使用 include 来包含一些其他的配置文件,这对你来说是非常有用的。

#

# 但是要注意哦,include 是不能被 config rewrite 命令改写的

# 由于 redis 总是以最后的加工线作为一个配置指令值,所以你最好是把 include 放在这个文件的最前面,

# 以避免在运行时覆盖配置的改变,相反,你就把它放在后面(外国人真啰嗦)。

#

# include /path/to/local.conf

# include /path/to/other.conf

 

################################ 常用 #####################################

 

# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。

# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。

daemonize no

 

# 当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/run/redis.pid 文件里面,

# 但是你可以在这里自己制定它的文件位置。

pidfile /var/run/redis.pid

 

# 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。

port 6379

 

# TCP 监听的最大容纳数量

#

# 在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。

# Linux 内核会一声不响的把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值,

# 所以你要修改这两个值才能达到你的预期。

tcp-backlog 511

 

# 默认情况下,redis 在 server 上所有有效的网络接口上监听客户端连接。

# 你如果只想让它在一个网络接口上监听,那你就绑定一个IP或者多个IP。

#

# 示例,多个IP用空格隔开:

#

# bind 192.168.1.100 10.0.0.1

# bind 127.0.0.1

 

# 指定 unix socket 的路径。

#

# unixsocket /tmp/redis.sock

# unixsocketperm 755

 

# 指定在一个 client 空闲多少秒之后关闭连接(0 就是不管它)

timeout 0

 

# tcp 心跳包。

#

# 如果设置为非零,则在与客户端缺乏通讯的时候使用 SO_KEEPALIVE 发送 tcp acks 给客户端。

# 这个之所有有用,主要由两个原因:

#

# 1) 防止死的 peers

# 2) Take the connection alive from the point of view of network

#    equipment in the middle.

#

# On Linux, the specified value (in seconds) is the period used to send ACKs.

# Note that to close the connection the double of the time is needed.

# On other kernels the period depends on the kernel configuration.

#

# A reasonable value for this option is 60 seconds.

# 推荐一个合理的值就是60秒

tcp-keepalive 0

 

# 定义日志级别。

# 可以是下面的这些值:

# debug (适用于开发或测试阶段)

# verbose (many rarely useful info, but not a mess like the debug level)

# notice (适用于生产环境)

# warning (仅仅一些重要的消息被记录)

loglevel notice

 

# 指定日志文件的位置

logfile ""

 

# 要想把日志记录到系统日志,就把它改成 yes,

# 也可以可选择性的更新其他的syslog 参数以达到你的要求

# syslog-enabled no

 

# 设置 syslog 的 identity。

# syslog-ident redis

 

# 设置 syslog 的 facility,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值。

# syslog-facility local0

 

# 设置数据库的数目。

# 默认数据库是 DB 0,你可以在每个连接上使用 select <dbid> 命令选择一个不同的数据库,

# 但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值

databases 16

 

################################ 快照 ################################

#

# 存 DB 到磁盘:

#

#   格式:save <间隔时间(秒)> <写入次数>

#

#   根据给定的时间间隔和写入次数将数据保存到磁盘

#

#   下面的例子的意思是:

#   900 秒内如果至少有 1 个 key 的值变化,则保存

#   300 秒内如果至少有 10 个 key 的值变化,则保存

#   60 秒内如果至少有 10000 个 key 的值变化,则保存

#  

#   注意:你可以注释掉所有的 save 行来停用保存功能。

#   也可以直接一个空字符串来实现停用:

#   save ""

 

save 900 1


 

# 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,

# 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,

# 否则就会没人注意到灾难的发生。

#

# 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。

#

# 然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。

stop-writes-on-bgsave-error yes

 

# 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串

# 默认都设为 yes

# 如果你希望保存子进程节省点 cpu ,你就设置它为 no ,

# 不过这个数据集可能就会比较大

rdbcompression yes

 

# 是否校验rdb文件

rdbchecksum yes

 

# 设置 dump 的文件位置

dbfilename dump.rdb

 

# 工作目录

# 例如上面的 dbfilename 只指定了文件名,

# 但是它会写入到这个目录下。这个配置项一定是个目录,而不能是文件名。

dir ./

 

################################# 主从复制 #################################

 

# 主从复制。使用 slaveof 来让一个 redis 实例成为另一个reids 实例的副本。

# 注意这个只需要在 slave 上配置。

#

# slaveof <masterip> <masterport>

 

# 如果 master 需要密码认证,就在这里设置

# masterauth <master-password>

 

# 当一个 slave 与 master 失去联系,或者复制正在进行的时候,

# slave 可能会有两种表现:

#

# 1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,

#    或者数据可能是空的在第一次同步的时候

#

# 2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,

#    slave 都将返回一个 "SYNC with master in progress" 的错误,

#

slave-serve-stale-data yes

 

# 你可以配置一个 slave 实体是否接受写入操作。

# 通过写入操作来存储一些短暂的数据对于一个 slave 实例来说可能是有用的,

# 因为相对从 master 重新同步数而言,据数据写入到 slave 会更容易被删除。

# 但是如果客户端因为一个错误的配置写入,也可能会导致一些问题。

#

# 从 redis 2.6 版起,默认 slaves 都是只读的。

#

# Note: read only slaves are not designed to be exposed to untrusted clients

# on the internet. It's just a protection layer against misuse of the instance.

# Still a read only slave exports by default all the administrative commands

# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve

# security of read only slaves using 'rename-command' to shadow all the

# administrative / dangerous commands.

# 注意:只读的 slaves 没有被设计成在 internet 上暴露给不受信任的客户端。

# 它仅仅是一个针对误用实例的一个保护层。

slave-read-only yes

 

# Slaves 在一个预定义的时间间隔内发送 ping 命令到 server 。

# 你可以改变这个时间间隔。默认为 10 秒。

#

# repl-ping-slave-period 10

 

# The following option sets the replication timeout for:

# 设置主从复制过期时间

#

# 1) Bulk transfer I/O during SYNC, from the point of view of slave.

# 2) Master timeout from the point of view of slaves (data, pings).

# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).

#

# It is important to make sure that this value is greater than the value

# specified for repl-ping-slave-period otherwise a timeout will be detected

# every time there is low traffic between the master and the slave.

# 这个值一定要比 repl-ping-slave-period 大

#

# repl-timeout 60

 

memcached和redis的区别:

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。


2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;


3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;


4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;


5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;


6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);


7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;


socket通信:


网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。























最后编辑于:2019/12/23作者: 牛逼PHP

发表评论