Redis简单介绍

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对很多其它。包含string(字符串)、list(链表)、set(集合)、zset(sortedset
--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,并且这些操作都是原子性的。在此基础上。redis支持各种不同方式的排序。

与memcached一样,为了保证效率,数据都是缓存在内存中。

差别的是redis会周期性的把更新的数据写入磁盘或者把改动操作写入追加的记录文件。并且在此基础上实现了master-slave(主从)同步。

安装:

安装Redis

官方站点:http://redis.io/

官方下载:http://redis.io/download 能够依据须要下载不同版本号

windows版:https://github.com/ServiceStack/redis-windows

下载安装包:

解压启动Redis

 

解压redis64-2.8.17版本号后,找到redis.windows.conf。改动配置文件内容,内容例如以下。

 

支持数据结构

redis提供五种数据类型:String,hash。list。set及zset(sortedset)。

Redis配置文件主要參数配置

1、指定Redis监听port,默认port为6379。

port 6379

2、绑定的主机地址

bind 127.0.0.1

3、当client闲置多长时间后关闭连接。假设指定为0,表示关闭该功能

timeout 300

4、指定日志记录级别。Redis总共支持四个级别:debug、verbose、notice、warning,默觉得verbose。

loglevel verbose

5、日志记录方式。默觉得标准输出,假设配置Redis为守护进程方式执行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null。

logfile stdout

6、设置数据库的数量,默认数据库为0。能够使用SELECT <dbid>命令在连接上指定数据库id。

databases 16

7、指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,能够多个条件配合。

save <seconds><changes>

8、Redis默认配置文件里提供了三个条件:

save 900 1

save 300 10

save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

9、指定存储至本地数据库时是否压缩数据,默觉得yes,Redis採用LZF压缩,假设为了节省CPU时间,能够关闭该选项。但会导致数据库文件变的巨大。

rdbcompression yes

10、指定本地数据库文件名称。默认值为dump.rdb。

dbfilename dump.rdb

11、 指定本地数据库存放文件夹。

dir ./

12、设置当本机为slave服务时。设置master服务的IP地址及port。在Redis启动时,它会自己主动从master进行数据同步。

slaveof <masterip><masterport>

13、当master服务设置了password保护时。slave服务连接master的password。

masterauth <master-password>

14、设置Redis连接password,假设配置了连接password,client在连接Redis时须要通过AUTH <password>命令提供password,默认关闭。

requirepass foobared

15、设置同一时间最大client连接数,默认无限制。Redis能够同一时候打开的client连接数为Redis进程能够打开的最大文件描写叙述符数,假设设置 maxclients 0。表示不作限制。当client连接数到达限制时,Redis会关闭新的连接并向client返回max number of clientsreached错误信息。

maxclients 128

16、指定Redis最大内存限制,Redis在启动时会把数据载入到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后。仍然到达最大内存设置,将无法再进行写入操作。但仍然能够进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区。

maxmemory <bytes>

17、指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘。假设不开启。可能会在断电时导致一段时间内的数据丢失。由于 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内仅仅存在于内存中。

默觉得no。

appendonly no

18、指定更新日志文件名称,默觉得appendonly.aof

appendfilename appendonly.aof

19、指定更新日志条件。共同拥有3个可选值:

no:表示等操作系统进行数据缓存同步到磁盘(快)

always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)


everysec:表示每秒同步一次(折衷。默认值)

appendfsync everysec

20、 设置在向client应答时,是否把较小的包合并为一个包发送,默觉得开启

glueoutputbuf yes

21、指定在超过一定的数量或者最大的元素超过某一临界值时,採用一种特殊的哈希算法。

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

22、指定是否激活重置哈希。默觉得开启(后面在介绍Redis的哈希算法时详细介绍)。

activerehashing yes

23、slave依据指定的时间间隔向server发送ping请求。

时间间隔能够通过 repl_ping_slave_period 来设置。默认10秒

repl-ping-slave-period10

24、当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:

(1) 假设 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应client请求,可能是正常数据。也可能是还没获得值的空数据。

(2) 假设 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNCwith master in progress)"来处理各种请求。除了 INFO 和 SLAVEOF 命令。

slave-serve-stale-datayes

25、Redis主从配置

redis支持master-slave的主从配置,配置方法是在从机的配置文件里指定slaveof參数为主机的ip和port就可以。

slaveof 192.168.1.23 6379

26、 指定包括其他的配置文件,能够在同一主机上多个Redis实例之间使用同一份配置文件,而同一时候各个实例又拥有自己的特定配置文件。

 include /path/to/local.conf

 include /path/to/other.conf

 

Redis中常见异常处理以及内存CPU优化

 

Redis常出现故障总结:

1、当出现改动--maxheap and --heapdir

在启动这两个版本号时都会创建一个 RedisQFork.dat文件,我不确定 RedisQFork 文件是否变小一点, 但我确定, 你能够通过设置Redis启动參数 heapdir 来调整这个文件的位置。

我在 redis.windows.conf文件里搜索"heapdir",然后在默认凝视掉的内容以下加入一行,指定Redis内存映射文件(memory mapped file)存放的路径:

2、redis常见异常处理

1

2

3

# heapdir指定内存映射文件路径名,不能是文件名称

# heapdir <directory path(absoluteorrelative)>

heapdir D:/temp/redis_heapdir/

详细文件和文件夹就请你依据自己的磁盘进行指定啦. 我的症状和情况是这种, 16GB内存,Windows版64bit的Redis。启动Redis后就在C盘的C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Redis文件夹以下生成一个16GB大小的 RedisQFork_8792.dat 文件(8792是本次启动的进程PID, 关闭redis 则此文件自己主动被删除). 本来当初为了省钱仅仅上了64GB的固态硬盘,结果16G一吃下来,C盘就仅仅有16GB空余空间,自从设置到D盘,重新启动以后,感觉强迫症就好多了。

3、常见异常处理

假设你遇到 java.net.SocketTimeoutException: Readtimed out exception的异常信息

请尝试在构造JedisPool的时候设置自己的超时值. JedisPool默认的超时时间是2秒(单位毫秒)

pool = new JedisPool(config, ip,port,RedisConfig.getTimeout());

4、Redis中CPU使用效率优化

将no-appendfsync-on-rewrite的配置设为yes能够缓解这个问题。设置为yes表示rewrite期间对新写操作不fsync。临时存在内存中。等rewrite完毕后再写入。

最好是不开启Master的AOF备份功能。

Redis也能够关闭自己主动持久化,凝视掉这些save配置,或者save “”

假设后台保存到磁盘错误发生,将停止写操作。

stop-writes-on-bgsave-error yes。

使用LZF压缩rdb文件,这会耗CPU, 可是能够降低磁盘占用。

rdbcompression yes

保存rdb和载入rdb文件的时候检验,能够防止错误。可是要付出约10%的性能,能够关闭他,提高性能。

rdbchecksum yes

5、当出现下面错误时:

VirtualAlloc/COWAlloc fail! Out Of Memory allocating 42bytes!

改动:maxmemory 1024000000

maxheap 1024000000

Redisclient经常使用命令

get key

set  key value

clear

exists  key

del key

dbsize

lpush  key value

info all

info

monitor

hgetall  key

redis 127.0.0.1:6379> info  #查看server版本号内存使用连接等信息

redis 127.0.0.1:6379> client list  #获取客户连接列表

redis 127.0.0.1:6379> client kill 127.0.0.1:33441 #终止某个客户端连接

redis 127.0.0.1:6379> dbsize #当前保存key的数量

redis 127.0.0.1:6379> save #马上保存数据到硬盘

redis 127.0.0.1:6379> bgsave #异步保存数据到硬盘

redis 127.0.0.1:6379> flushdb #当前库中移除全部key

redis 127.0.0.1:6379> flushall #移除全部key从全部库中

redis 127.0.0.1:6379> lastsave #获取上次成功保存到硬盘的时间戳

redis 127.0.0.1:6379> monitor #实时监測server接收到的请求

redis 127.0.0.1:6379> slowlog len #查询慢查询日志条数

redis 127.0.0.1:6379> slowlog get #返回全部的慢查询日志,最大值取决于slowlog-max-len配置

redis 127.0.0.1:6379> slowlog get 2 #打印两条慢查询日志

redis 127.0.0.1:6379> slowlog reset #清空慢查询日志信息

Redis具体解释与常见问题解决方式的更多相关文章

  1. Redis 的几种常见使用方式

    常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 各种使用方式的优 ...

  2. CentOS 7 PHP-redis扩展安装,浏览器不显示数据及redis无法储存数据常见问题解决办法

    首先使用php -m 可以查看到自己安装了那些扩展. 1.使用wget下载redis压缩包 wget https://github.com/phpredis/phpredis/archive/deve ...

  3. jedis操作redis的几种常见方式总结

    Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...

  4. 老出BUG怎么办?游戏服务器常见问题解决方法分享

    在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了 ...

  5. springmvc环境搭建以及常见问题解决

    1.新建maven工程 a)  打开eclipse,file->new->project->Maven->Maven Project b)  下一步 c)   选择创建的工程为 ...

  6. kettle常见问题解决

    开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...

  7. OpenStack安装部署管理中常见问题解决方法

    一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...

  8. 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charl ...

  9. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

随机推荐

  1. drawCall_01

    在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES).每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销.   Unity在运 ...

  2. Flask-Script应用实例

    #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 #命令行任务 #fr ...

  3. 深入浅出MFC——MFC骨干程序(四)

    1. 熟记MFC类层次结构: 2. AppWizard可以为我们制作出MFC程序骨干: 3. Document/View支撑你的应用程序:Document/View的价值在于,这些MFC类已经把一个应 ...

  4. 从经典问题来看 Copy 方法

    经典面试题:为什么 NSString 类型成员变量的修饰属性用 copy 而不是 strong (或 retain ) ? 在初学 iOS 的时候,可能会被灌输这么一个常识,切记 NSString 的 ...

  5. Android井字游戏(一)首页制作

    创建一个新程序: 应用名: Tic Tac Toe 公司域名: example.org 尺寸: Phone and Tablet 最低SDK: API16: Android 4.1 添加活动: Emp ...

  6. 【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

    在进行数据迁移时候报错: 特殊字段太长报错, php artisan migrate 现在utf8mb4包括存储emojis支持.如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情. ...

  7. jquery.flot.js简介

    JQuery图表插件之Flot Flot是一个Jquery下图表插件,具有简单使用,交互效果,具有吸引力外观特点.目前支持 Internet Explorer 6+, Chrome, Firefox ...

  8. 为什么有这么多 Python版本

    Python是出类拔萃的 然而,这是一句非常模棱两可的话.这里的"Python"到底指的是什么? 是Python的抽象接口吗?是Python的通用实现CPython吗(不要把CPy ...

  9. 应急响应--记录一次漏洞紧急处理中意外发现的挖矿木马(Shiro反序列化漏洞和ddg挖矿木马)

    背景 某公司线上服务器意外发现一个Apache Shiro 反序列化漏洞,可以直接GetShell.出于做安全的谨慎,马上出现场应急,确认漏洞.该漏洞存在在cookie字段中的rememberMe字段 ...

  10. Gnome排序

    Gnome排序(地精排序),起初由Hamid Sarbazi-Azad 于2000年提出,并被称为stupid排序,后来被Dick Grune描述并命名为“地精排序”,作为一个排序算法,和插入排序类似 ...