Redis

特点

开源,BSD许可,高级的key-value,可以用来存储字符串、哈希结构,链表、集合,因此,常用来提供数据结构服务。

与memcached相比

1.redis可以做存储,而mencached用来做缓存,主要是因为其‘持久化’
2.存储的数据有结构(字符串、链表、哈希结构),而mencached只有字符串

安装

过程省去,其中
redis-benchmark 性能测试工具
redis-check-aof 检查aof日志的工具
redis-check-dump 检查rbd的工具
redis-cli 连接用的客户端
redis-sevser 服务进程

命令

https://redis.io/commands

键值操作

查询键值
* 任意字符
? 单个字符
[] 某一个字符

set site ..
keys * # 全部
keys site
keys sit[ey] #正则
random key #随机返回
type site # 查看类型
exists site #验证存在
del site
rename site newname
renamenx site newname # 如果新key不存在则改名,否则不改名,防止重复

默认16个数据库,从0-15
平时默认为0号数据库

select 1 #选择1号数据库
move site 1 #将某键移动到其他数据库

设置有效期

ttl site #查询有效期,-1代表永久有效,-2代表不存在或者已过期,其他情况为显示的秒数
expire site 10 #设置10s
persist site # 设置永久有效 

数据类型

string

set key value [ex 秒数] / [px 毫秒数] [nx/xx]# 设置字符串类型,同时还可以选择一个时间设置,nx代表不存在的时候生效,xx代表存在的时候才进行操作(此时为修改)
mset .. .. # 一次性设置多个
mget .. .. # 一次性get多个
setrange site 2 ! #进行偏移
append site @ #加内容
getrange site start stop # 获得某一部分的值   
getset site www # 返回旧值,设置新值

set age 10
incr age #增加值
decr age 
incrby age 5 # 增加5
decrby ahe 5
incrbyfloat age 0.5
decrbyfloat age 0.5

setbit char 2 1 # 大写变小写
setbit upper

list链表

lpush site a #向左推入
rpish
lpop
rpop

lrange site 1 3 # 从左范围取
lindex site 2 #返回索引上的值

lpush site a b c d
lrem site b #  删除某个值(用值不是索引)

ltrim site 1 3 # 截取一小段,剩余删除

llen site #查看长度

rpush num 1 3 6 8 9
linsert num before 3 2 # 1 2 3 6 8 9 
linsert num after 9 10 # 1 2 3 6 8 9 10

rpoplpush site num # 将一个链表最后一位弹出到另外一个链表开始

brpop site 10 # 值不存在就一直等待到实践结束 

集合

无序,唯一

sadd gender male female #增加元素
srem gender male # 删去元素
smembers gender # 查看所有元素
spop gender # 随机弹出(因为无序所以没有元素索引)
srandmember gender # 随机得到一个单元
sismember gender male# 是否存在
scard gender # 返回长度
smove upper lower A #在两个集合之间移动元素
sinter A B C #求三个集合的交集
sunion A B #并集
sdiff A B #差集
sintersore result A B C #将结果进行存储

有序集合

zadd class 12 lily 13 lucy 18 lilei 6 #添加元素和对应分数
zrange class 0 4 # 取排序后的第0名到第4名
zrangebysore class 1 20 limit 1 2# 按分数取范围,并跳过第一个然后取两个
zrange class 1 3 withscores #带分数地取

zrank class lily # 返回顺序值(默认升序)

zremrangebyscore class 10 15 # 根据分数进行删除
zremrangebyrank class 0 1 # 按照排名进行删除
zrem class lily #直接删除

zcard class # 返回元素个数
zcount class 20 30 # 返回20到30之间的元素个数

 

哈希

field 域 value 值

hset user1 name lisi
hset user1 age 17
hset user1 height 175
hmset user2 name wang age 18 height 170

hget user1 age
hget user2 height
hgetall user1

hdel user1 age 

hlen user1 #查看域数

hexists user1 age #是否存在

hkeys user1 # 返回域

事务

在mysql中将一组语句绑定在一起,要么都执行成功,执行失败则进行回滚,使用的命令:开启start transcation 失败rollback 成功commit
在redis中,命令:开启multi 失败discard取消(不支持回滚) 成功exec

set wang 200
set zhao 700
# 开启事务
multi
decrby zhao 100
incrby wang 100
# 开始执行,如果中间有出现语法问题则全部不执行,但是如果出现了适用对象的问题则会将执行其他语句
exec 


悲观锁:在下单抢票的时候,将票锁住
乐观锁:只需要对票的值进行监控,若改变则拒绝执行
redis乐观锁:使用watch对key进行监控,若监控的值任一值发生改变,则取消操作

set ticket 1
watch ticket
multi
desc ticket
decrby lisi 100
exec
# 在执行时如果监控的值已经发生了变化,则此次操作全部取消

频道发布与消息订阅

A:publish news 'hello' # 发布

B:subscribe news # 订阅频道

A:publish news 'hl'

B:'hl                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      										'

rdb持久化

持久化:把数据存储于断电后不会丢失的设备中,通常是硬盘
常见持久化的方式:
主从:通过主从服务器保存和持久化,如mongoDB的replication sets配置
日志:操作生成先关日志,并通过日志来恢复数据,couchDB数据内容不修改

rdb快照持久化:
每隔N分钟或N次写操作后,从内存dump数据形成rdb文件,压缩放在备份目录

在redis.conf配置文件中有相关的命令

save 900 1 
save 300 10
save 60 10000 #如果60s之内有无10000次保存,有则更改,无则查询上面的次数和时间

stop-writes-on-bgsave-error yes #当导出出错时停止导出

rdbcompression yes #是否压缩

rdbchechsum yes #在导出的同时检测数据

defilename dump.rdb #导出文件名称

dir ./ #放在目录

rdb的问题:在两个保存点之间的数据断电,会丢失1-N的数据

aof 持久化

将执行的命令存到文本文件中

appendonly no # 是否打开aof日志功能
appendfsync alaways # 每一个命令都立即同步到aof很慢但安全
appendfsync everysec # 每秒写一次,折中
appenffsync no #写入工作交给操作系统,同步频率低

aof重写:将对一个键的操作进行重写
规定重写的参数:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64 mb

redis主从配置(集群)

作用:
1.主从备份,防止主机宕机
2.读写分离,分担任务
3.任务分离,如分别担任备份和计算工作

主从通信过程:

1.自动sync同步
2.大量dump rdb
3.少量缓冲aof
3.replicationFeed Slaves

Master配置:
1.关闭rdb快照(备份工作交给slave)
2.可以开启aof

slave配置:
1.声明slave-of
2.配置密码(如果有)
3.某个slave打开rdb快照功能
4.配置是否只读【slave-read-only】

运维

命令

time #返回s和us的时间戳
bgrewriteaof #手动重写aof
dbsize #查看当前数据库key的数量
save # 保存
bgsave # 后台保存
lastsave #查看上次保存
flushdb #清空当前数据库
flushall # 清空全部数据库
shutdown nosave#不保存关闭


参数

memory(如果ratio太大说明碎片太多)
perisitence
fork
stats
replication
cpu
client
slowlog

aof恢复与rdb服务器之间迁移

set site www.google.com
set age 18
set name lily
----不小心flushall----
shutdowm nosave--关闭服务器防止aof被重写
# 对于使用aof的
rm -rf *.rdb
vim ..aof #删除flushall的命令
./redis.cli #重启服务器
# 对于使用rdb的

cp 1.rdb 2.rdb
vim 2.rdb #屏蔽aof功能,打开rdb功能
./redis.cli

sentinel 监控主从服务器

Master有两个slave,如果Master崩溃,则让slave1成为master,另一个slave2做它的slave1
80–79,81 79–81
手动

config get ... # 此命令可以随时查看配置命令
info replication 
# x修改主从关系
1.slaveof no one # 不做任何redis的slave
info replication
config get slave-read-only
2.config set slave-read-only no #可写
3.slaveof loacalhost 

自动运维工具
sentinel monitor def_master 127.0.0.1 6379 2 # 地址,端口,连续2次失联
sentinel auyh-pass def_master 012-345^678-90 # 是否需要密码
sentinel down-after-millseconds mymaster 30000 # d多久算失联
sentinel can-failover def_master yes #允不允许进行改变主从关系,一台有权更改
sentinel parallel-syncs mymaster 1 # 同时又几台slave进行连接
sentinel failover-timeout mymaster 900000 #超过时间则修改失败

vim ./sentinel.cong

注意:多台slave不要同时加入,因为每一台都需要进行dump

slave-priority 100 #数据越小优先级越靠前

key设计原则

在关系型数据库中,连接查询的效率不是很高;
将数据以集合的形式存入,再使用
sinter
sunin
sdiff
操作集合能起到简便的查询。

设计技巧:
1.把表名转换为key的全缀
2.第二段放置用于区分key的字段,对应mysql中的列名
3.第三段放主键
4.第四段查询对象

PHPREDIS扩展编译

1.pecl.php.net搜索redis
2.下载稳定版扩展
3.解压
4.动态执行/php/path/bin/phpize
5.configure–with-php-config=/php/path/bin/php-config
6.make & & make install

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值