redis学习

一共有16个数据库

set name " "

设置一个键值对

get name

得到Key对应的value

EXPIRE name 10

10秒钟后自动过期

select 3   

切换到第三个数据库

DBSIZE

数据库大小

FLUSHALL

清空全部数据库

flushdb

清空当前数据库

 

Redis-key

String

EXISTS name 

判断这个key是否存在

move name 1   

将当前name移除

tpye name

查看name什么类型

append name

"123"  将123添加到name对应的value后面 比如”456“    ”456123“

INCR key

对存储在指定key的数值执行原子的加1操作。

如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0

如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,

那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。

这个操作仅限于64位的有符号整型数据。

DECR key 

与上面刚好相反

INCRBY key increment

将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。

如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

GETRANGE key 0 3

得到一个范围[0,3]

SETRANGE key  1  xx 

指定位置的字符串变为xx

setex (set with expire)

mset k1 v1 k2 v2 k3 v3 (原子操作) 要么全部成功要么全部失败

批量设置

set usr:1 {name:lhb age:20}

设置一个对象

getset db redis

先获取再设置

 

List操作

LPUSH  list  one

将一个值或者多个值插入到列表的头部  LEFTPUSH

LRANGE list 0 -1

(全部)

LRANGE list 0 1

  (从后往前的 两个)

解释: 先插入one 然后再在左边插入two 变为 two one 然后再在右边插入three 变为 two one three

LPOP list

移除List左边第一个 

RPOP

移除List右边第一个

lindex list 3 

或者下标为3的值

lset list 0 item 

将下标为0变为item,一个更新操作  如果不存在列表 或者列表为这个下标会报错。

lrem list 1 one 

移除为one的一个值 精确匹配

ltrim list 1 2

只保留 1 2范围内的值

rpoplpush list  myotherlist 

将list的第一个元素删除然后加入myotherlist中

linsert list before "world"  four

往world 后面插入four 

 

 

SET操作(不能重复)

sadd  myset hello 

往myset里面添加

smembers myset

smembers myset hello

判断Hello是否存在

scard myset 

获取值的个数

srem myset hello

删除值

srandmemmber myset 

随机抽出一个数

spop myset

随机删除元素

spop myset 2

删除第二个元素

smove myset myset1 hello

将指定的元素移动到另外的set

sunion myset myset1

取交集

sinter myset myset1

取并集

sdiff myset myset1

取差集

 

 

HASH  

一个集合

 

hset myhash key1 value

hget myhash key1

hgetall myhash

 

http://redis.cn/commands.html#hash

 

GEO

zrem

zrange  都可以

geoadd 

geopos

 

getbit 

setbit

bitcount sign 统计为1的数量

 

 

事务

redis 单条命令是原子性,事务不具有原子性

一次性  顺序性 排他性   没有隔离级别的概念,所有命令在事务中并没有被执行,只有发起执行命令才会被执行

一条编译时命令有错,所有的命令都不被执行

一条命令运行时错误,只有那条命令不被执行

悲观锁:很悲观,无论干什么都加锁 影响性能

乐观锁:可以用watch来实现乐观锁,更新之前先检查版本。


redis配置文件

bind 127.0.0.1 -::1//ip默认是本地Ip地址只能本地连接可以修改为外网ip
bind 127.0.0.1 -::1//保护模式默认开启
port 6379 //端口号是6379 可以修改

 

daemonize yes//是否是后台程序
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice//默认日志级别
logfile ""//日志输入地址
stop-writes-on-bgsave-error yes //持久化失败时是否关闭
 381 # save 3600 1
 382 # save 300 100
 383 # save 60 10000
如何持久化

 

rdbcompression yes//rdb是否压缩
454 dir ./   持久话文件的地址  当前目录
1021 # maxmemory-policy noeviction  key多了以后的淘汰策略

 

 

持久化

rdb

1.满足save的条件下会自动触发rdb规则

2.执行flushall命令

3.退出redis

优点:

1.适合大规模数据恢复

2.对数据完整性要求不高

缺点:

1.需要一定时间间隔进行操作,如果意外宕机那么最后一次修改就没有了

2 fork进程会占用一定的内存空间

AOF

将所有的命令都记录下来

每次重启都是讲命令一遍遍的执行

默认关闭可以修改配置文件

1252 appendonly no//可以修改为yes变为AOF操作
redis-check-aof --fix 恢复AOF文件
1281 # appendfsync always
1282 appendfsync everysec
1283 # appendfsync no
每一次修改都同步
每一秒同步
从不同步

 

缺点:

1.aof大于rdb数据,修复速度比rdb慢

2.aof运行效率也比rdb慢

 

 

主从复制

将一台redis服务器数据复制到其他redis服务器,复制是单向的只能从主节点复制到从节点。

主从复制,读写分离,80%情况进行读操作

作用:

1.故障恢复,当主节点发生故障的时候,可以由从节点提供服务,实现快速的故障恢复

2.负载均衡,在主从复制的基础上实现读写分离,主节点进行写,从节点提供读服务,分担服务器负载。在读多写少的情况下由

从节点分担读的压力可以大大提高redis服务器的并发效率

3.数据备份

 

1从结构上一台服务器可能发生故障,一台服务器需要处理所有的请求负载压力大

2.单台服务器内存容量有限,最多不能超过20G

 

操作:

1.修改配置文件:

1)修改端口号

2)修改日志默认输出文件名

3)修改rdb文件名

4)修改守护进程pid文件名

2.SLAVEOF 127.0.0.1 6379(主机变成从机)

 

测试:主机断了 从机依旧连接到主机,因为主机断了所以没有写操作,如果主机回来了,从机依旧可以获取主机写的。

如果从机断了,如果是用命令行配置的主从复制,如果重启自动变为主机,但如果变成从机数据立马同步

全量复制:只要重新连接到主机一定执行一次全量复制,数据一定可以在从机中看到

增量复制:就是主机的每一次写操作。

哨兵模式

哨兵是一个独立的进程,通过向redis服务器发送命令,等待redis服务器的响应,从而监控多个redis实例

在后台监控主机是否发生故障,如果发生故障根据投票数自动将从库切换为主库

一个哨兵可能会发生问题,所以多个哨兵之间相互监听

缓存穿透和雪崩

缓存穿透

当用户查询数据缓存和数据库都没有,当用户很多都没有缓存,都去数据库查询会给数据库造成很大的压力。

解决方法:

1布隆过滤器(过滤一些无用的请求)

2缓存空对象(需要更多的空间)

缓存击穿(单一数据)

指缓存中没有而数据库中有,同一时间读取缓存中没有而去数据库中查询

解决方案:

1热点数据永不过期

2.加分布式锁

雪崩(很多数据)

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机

解决方法:
1.热点数据永不过期

2.过期时间变得随机

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值