1、redis之flushall、flushdb‘尴尬’操作恢复

redis是基于内存的一种高效数据库,在内存中高效但是不安全,重启和断电都会导致数据丢失。所以就需要用到数据的持久化,redis有两种持久化的方式:AOF和RDB,AOF是将所有执行的命令记录在appendonly.aof文件中,可能会影响redis的性能(写入量”特别特别特别“大的时候)。但是AOF可以保证数据丢失最少。并且如果误操作执行了flushall也可以恢复。RDB是直接将数据持久化到dump.rdb文件,是一个二进制文件。写入速度快,但是故障期间未持久化的数据都丢失了,并且如果没有备份dump.rdb文件的话,执行flushall数据就无法恢复了。至于使用自行根据业务场景来决定。如果两个都是用,则redis会优先使用AOF。

2、执行flushall

不小心误操作,执行了flushall,如果开启了AOF模式的持久化,不要进行其他的操作,立刻断开当前连接的redis或切到其他的节点,然后执行如下操作:

>shutdown  nosave

然后kill调redis进程:

# pkill  redis

到存放appenonly.aof文件的目录,然后编辑此文件,找到flushall这一行,并删除:

#vim appendonly.aof

$1
0
*2
$6
SELECT
$1
0
*1
$8
FLUSHALL

#sed -i  's/FLUSHALL//g' appendonly.aof

#sed -i 's/FLUSHDB//g'   appendonly.aof

然后重启redis,登录就可以看到之前的数据就恢复了。

3、为了防止这种误操作,可以禁止flushall

#vim  redis.conf

rename-command FLUSHALL ""

rename-command FLUSHDB ""

rename-command KEYS ""

测试环境可以不用做,KEYS主要是防止如果数据库里面key的数量巨大的话会导致redis收到严重影响。

4、redis认证

#vim  redis.conf

requirepass  "Test@123"

连接命令:

#redis-cli -h 192.168.1.201 -p 6379  -a "Test@123"

5、手动持久化

有两个手动持久化的命令:save、bgsave,save会阻塞当前redis的读写,bgsave是在后台进行持久化,不会造成阻塞。

#redis-cli -h 192.168.1.201 -p 6379  -a "Test@123"

192.168.1.201:6379>bgsave

6、redis简单的数据迁移

以RDB为例:

首先准备好一个干净的redis服务,配置完毕,指定好dir,如dir  /data/redis

正在运行的redis上最好先停止对redis的写操作,如果不能停止redis的读写,那就需要操作的快一些,减少数据的丢失,:

先连接redis:

#redis-cli -h 192.168.1.201 -p 6379  -a "Test@123"

>bgsave

将dump.rdb文件copy到新的redis的数据目录即/data/redis目录下:

#scp  dump.rdb   root@192.168.1.10:/data/redis

#redis-server  redis.conf

检查数据:

如果数据都存在0库

>SELECT  0

>DBSIZE

和之前的对比一下。或者直接查一下key,确定某个key是否存在。

7、Hashmap

类似C#中的dict类型或者C++中的hash_map类型。
Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht

应用场景:

多个用户及对应的用户信息,可以用来存储以用户ID为key,将用户信息以key-value的形式进行存储
 
常用命令:
  • HDEL
    HDEL key field[field...] 删除对象的一个或几个属性域,不存在的属性将被忽略

  • HEXISTS
    HEXISTS key field 查看对象是否存在该属性域

  • HGET
    HGET key field 获取对象中该field属性域的值

  • HGETALL
    HGETALL key 获取对象的所有属性域和值

  • HKEYS
    HKEYS key 获取对象的所有属性字段

  • HVALS
    HVALS key 获取对象的所有属性值

  • HLEN
    HLEN key 获取对象的所有属性字段的总数

  • HMGET
    HMGET key field[field...] 获取对象的一个或多个指定字段的值

  • HSET
    HSET key field value 设置对象指定字段的值

  • HMSET
    HMSET key field value [field value ...] 同时设置对象中一个或多个字段的值

  • HSTRLEN
    HSTRLEN key field 返回对象指定field的value的字符串长度,如果该对象或者field不存在,返回0.

  • HSCAN
    HSCAN key cursor [MATCH pattern] [COUNT count] 类似SCAN命令

8、keyspace notification

redis2.8版本以后,Keyspace Notifications 此特性允许客户端可以以 订阅/发布(Sub/Pub)模式,接收那些对数据库中的键和值有影响的操作事件

修改redis.conf,添加如下内容:

notify-keyspace-events "Ex"

然后重启生效。

也可以在客户端执行如下命令:

参数解释:
#  K     Keyspace events, published with __keyspace@<db>__ prefix.
#  E     Keyevent events, published with __keyevent@<db>__ prefix.
#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
#  $     String commands
#  l     List commands
#  s     Set commands
#  h     Hash commands
#  z     Sorted set commands
#  x     Expired events (events generated every time a key expires)
#  e     Evicted events (events generated when a key is evicted for maxmemory)
#  A     Alias for g$lshzxe, so that the "AKE" string means all the events.

redis-小用的更多相关文章

  1. 【redis 学习系列08】Redis小功能大用处02 Pipeline、事务与Lua

    3.Pipeline 3.1 Pipeline概念 Redis客户端执行一条命令分为如下四个过程: (1)发送命令 (2)命令排队 (3)命令执行 (4)返回结果 其中(1)和(4)称为Round T ...

  2. 【redis 学习系列07】Redis小功能大用处01 慢查询分析以及Redis Shell

    Redis提供了5种数据结构已经足够强大,但除此之外,Redis还提供了诸如慢查询分析.功能强大的Redis Shell.Pipeline.事务与Lua脚本.Bitmaps.HyperLogLog.发 ...

  3. Java操作Redis小案例

    1.下载jar包. http://download.csdn.net/detail/u011637069/9594840包含本案例全部代码和完整jar包. 2.连接到redis服务. package ...

  4. Redis 小调研

    一. 概况: Redis是一款开源的.网络化的.基于内存的.可进行数据持久化的Key-Value存储系统.它的数据模型建立在外层,类似于其它结构化存储系统,是通过Key映射Value的方式来建立字典以 ...

  5. redis小功能大用处-bitmaps

  6. 妈妈再也不用担心别人问我是否真正用过redis了

    1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ...

  7. Redis的字典(dict)rehash过程源代码解析

    Redis的内存存储结构是个大的字典存储,也就是我们通常说的哈希表.Redis小到能够存储几万记录的CACHE,大到能够存储几千万甚至上亿的记录(看内存而定),这充分说明Redis作为缓冲的强大.Re ...

  8. Redis持久化的方式

    Redis小知识: redis是键值对的数据库,有5中主要数据类型: 字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) Redis持 ...

  9. 缓存服务—Redis

    Redis 简介Redis 是一个开源(BSD 许可)的.内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 为什么要用 Redis 在高并发场景下,如果需要经常连接结果变动频繁的数据库, ...

  10. redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点

    Redis3.2.0引入了新的quicklist的数据结构做了list的底层存储方案.废弃了原来的两个配置参数, list-max-ziplist-entries list-max-ziplist-v ...

随机推荐

  1. form表单提交时action路劲问题

    项目总出现window上部署可以访问,linux下部署不能访问的问题 linux下访问action必须是全路径,可以加上“${pageContext.request.contextPath}”  便可 ...

  2. Maven中的配置文件

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  3. 用户访问网页流程、DNS 解析流程

    一.用户访问流程 二.DNS解析流程 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它所提供的 ...

  4. DXP中插入LOGO图片方法(1)

    DXP中插入LOGO图片方法 1.QQ截图后,打开“开始”-->"附件"——>"画图工具",如图: 2.另存为BMP文件格式(设置图片大小.黑白色即 ...

  5. NLog配置JsonLayout中文输出为unicode问题

    日志输出现要改为json格式,网上查询layout配置为JsonLayout就可以了,结果发现输出中文为unicode编码,看很多文章说配置encode="false"就可以了,结 ...

  6. Asp .Net core 2 学习笔记(3) —— 静态文件

    这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...

  7. 上下文相关的GMM-HMM声学模型

    一.上下文对音素发音的语谱轨迹的影响 受到上下文的影响,同一个音素的发音语谱轨迹不同 为提高识别准确率,对音素建模时应将这种上下文影响考虑在内 二.基于上下文相关的音素建模 注意,非单音素建模中,每个 ...

  8. flask的变量和函数

    flask 中有内置的的变量函数 ,那些特殊的变量可以实现某些功能 config :可以从模板中直接访问Flask当前的config对象:{{config.SQLALCHEMY_DATABASE_UR ...

  9. postgresql和redis

    redis 和postgresql区别以及其优缺点 一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾. 那么,经过周密的计算,一瞬间为0.36 秒, ...

  10. GITLAB安装笔记

    CentOS 7 最小安装后操作 设置时区timedatectl set-timezone Asia/Shanghai 添加 Gitlab 清华源 vi /etc/yum.repos.d/gitlab ...