Redis是一个Key-Value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括 string(字符串 )、 list(链表)、 set(集合)和 zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,与Memcached一样,为了保证效率,数据都是缓存在内存中。区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件(数据持久化),并且在此基础上实现了master-slave(主从)同步。

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,是一种数据结构数据库,对于不同的数据类型都支持一系统的操作。

redis提供两种持久化方式:

1)内存快照

2)日志追加

redis作为内存数据库,当内存不足时,redis有两种处理方式:

1)启用虚拟内存:将vm-enabled配置项设置为yes

2)启用内存淘汰,将maxmemory配置项设置为一个大于0的整数... (淘汰算法:随机淘汰算法、LRU淘汰算法、TTL淘汰算法)

redis特性:

1)redis可以自动删除key:redis中的键值对,当key的引用计数器变为0时,redis会把这个key从内存中删除

2)redis可以自动关闭超时连接:当一个客户端连接在一定时间不进行如何操作时,redis会自动关闭它

3)redis可以自动清除过期数据:redis为每个存储的数据设定一个过期时间,当到达这个设定的过期时间后,redis便会把过期的数据从内存中删除

安装redis:

yum install tcl -y

wget http://download.redis.io/releases/redis-2.8.9.tar.gz

tar zxf redis-2.8.9.tar.gz

cd redis-2.8.9

make

make test

cd ../

cp -r redis-2.8.9 /usr/local/redis

mkdir /www/redis

mkdir /usr/local/redis/logs

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf #调优

sysctl -p

redis操作:

1)开启服务(Redis服务器的daemon启动程序):/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf #不指定配置文件则加载默认配置文件

2)查看6379端口使用情况:netstat -tunpl | grep 6379

3)进入redis客户端(Redis命令行操作工具):redis-cli #然后就可以执行下面的redis操作指令了

4)关闭服务:redis-cli shutdown

5)关闭指定端口的redis-server:redis-cli -p 6380 shutdown

6)测试redis服务是否开启:redis-cli ping

7)测试redis在当前配置下的读写性能:redis-benchmark

8)状态检测:redis-stat #可以检测Redis当前状态参数及延迟状况

9)备份:redis-cli save #从服务器上执行

redis常用操作指令:

info #查看server版本内存使用连接等信息

client list #获取客户连接列表

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

dbsize #当前保存key的数量

save #立即保存数据到硬盘,内存快照操作

bgsave #异步保存数据到硬盘

flushdb #当前库中移除所有key

flushall #移除所有key从所有库中

lastsave #获取上次成功保存到硬盘的unix时间戳

monitor #实时监测服务器接收到的请求

slowlog len #查询慢查询日志条数

slowlog get #返回所有的慢查询日志,最大值取决于slowlog-max-len配置

slowlog get 2 #打印两条慢查询日志

slowlog reset #清空慢查询日志信息

set name wwl #设置一个键值对

get name #获取name键对应的值

del name #删除name键值

smembers key #返回集合key中的所有成员

sadd key member [member ...] #将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。假如key不存在,则创建一个只包含member元素作成员的集合。当key不是集合类型时,返回一个错误。

zadd key score member [[score member] [score member] ...] #将一个或多个member元素及其score值加入到有序集key当中。如果某个member已经是有序集的成员,那么更新这个member的score值,并通过重新插入这个member元素,来保证该member在正确的位置上。score值可以是整数值或双精度浮点数。如果key不存在,则创建一个空的有序集并执行ZADD操作。当key存在但不是有序集类型时,返回一个错误。

hset key field value #将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行HSET操作。如果域field已经存在于哈希表中,旧值将被覆盖。

等等......

redis配置:

配置文件:etc/sysctl.conf

1)daemonize on|yes #redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes时,启用守护进程

2)pidfile /var/run/redis_6379.pid #redis以守护进程方式运行时,系统默认会把pid写入/var/run/redis.pid,可以通过pidfile指定pid文件

3)port 6379 #redis默认监听6379端口,可以通过port指定redis要监听的端口

4)bind 127.0.0.1 #绑定主机地址

5)unixsocket /tmp/redis.sock #指定redis监听的unix socket路径

6)timeout 300 #当客户端闲置多长时间,关闭连接,单位秒

7)loglevel verbose|debug|notice|warning #指定日志记录级别,默认是verbose

8)logfile /var/log/redis_6379.log #日志记录文件,默认是标准输出stdout,如果redis以守护进程方式运行,logfile 配置为stdout时,logs将要输出到/dev/null

9)syslog-enabled no|yes #当配置为yes时,日志输出到系统日志,默认是no

10)syslog-ident redis #指定syslog的标示符

11)syslog-facility local0 #指定syslog设备(facility),必须是user或则local0到local7

12)databases 16 #设置redis中数据库的个数,默认数据库是DB 0,可以通过select <dbid>,选择使用的数据库。dbis大于等于0,小于等于databases -1 【这里是16-1】

13)save <seconds> <changes> #指定多长时间内,有多少次更新操作时,将数据同步到数据库文件,可以多个条件配合,系统默认配置如下:
save 900 1 #900秒 1个修改
save 300 10 #300秒 10个更新
save 60 10000<span style="white-space:pre"> </span>#60秒 10000个更新
注意,如果不持久化【不把数据写入磁盘】,注释掉save即可。

14)rdbcompression yes|no #数据dump到数据文件时,系统是否压缩string对象数据,系统默认是yes。如果为了节省cpu,可以设置为no,此时数据文件比用LZF压缩时要大

15)dbfilename dump.rdb #指定数据库文件名,默认是dump.rdb

16)dir /var/lib/redis/6379 #指定本地数据库存放目录

17)slaveof <masterip> <masterport> #当本机是slave服务时,设置master服务的ip和端口

18)masterauth <master-password> #当master服务设置了密码时,slave服务连接master的密码。如果配置不对,slave服务请求将被拒绝

19)slave-serve-stale-data yes|no #当slave和master之间的连接断开或slave正在于master同步时,如果有slave请求,当slave-serve-stale-data配置为yes时,slave可以相应客户端请求;当为no时,slave将要响应错误,默认是yes

20)requirepass foobared #设置redis连接密码

21)maxclients 128 #设置同一时间客户端最大连接数,默认是无限制。如果设置maxclients 0 时,表示不限制

22)maxmemory <bytes> #指定redis最大内存限制,redis在启动时,会把数据加载到内存中,达到最大内存后,redis会先清除已到期或将过期的key,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读操作。切记:一定要设定maxmemmory,且配置大小要小于物理内存,留有足够的内存供系统使用,否则数据暴涨导致内存吃紧,SWAP加剧,直接宕机。

23)maxmemory-policy volatile-lru|allkeys-lru|volatile-random|allkeys->random|volatile-ttl|noeviction #当redis使用内存达到最大时,使用哪种策略移除内存中数据

24)appendonly no|yes #指定是否在每次更新操作后进行日志记录,默认配置是no,即在采用异步方式把数据写入到磁盘,如果不开启,可能会在断电时导致部分数据丢失

25)appendfilename appendonly.aof #指定更新日志文件名【aof日志】,默认为appendonly.aof

26)appendfsync everysec|no|aways #指定更新日志条件,no表示等操作系统进行数据缓存同步到磁盘的aof文件(快)always表示每次更新操作后手动调用fsync将数据写到磁盘的aof文件(慢,安全),everysec表示每秒同步一次(拆中,默认值)

27)slowlog-log-slower-than 10000 #配置记录慢日志的条件,单位是微妙,当是负值时,关闭慢日志记录,当是0时,记录所有操作

28)slowlog-max-len 1024 #配置记录慢查询的最大条数

29)hash-max-zipmap-entries 512 #配置最大元素数,当超过该配置数据时,redis采用特殊hash算法

30)hash-max-zipmap-value 64 #配置最大元素值,当草果配置值时,采用特殊hash算法

31)activerehashing yes #指定是否激活充值hash,默认开启

内核参数vm.overcommit_memory
      进程通常调用malloc()函数来分配内存,内存决定是否有足够的可用内存,并允许或拒绝内存分配的请求。Linux支持超量分配内存,以允许分配比可用RAM加上交换内存的请求。vm.overcommit_memory参数有三种可能的配置:

  • 0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
  • 1 表示根据vm.overcommit_ratio定义的值,允许分配超出物理内存加上交换内存的请求。vm.overcommit_ratio参数是一个百分比,加上内存量决定内存可以超量分配多少内存。例如,vm.overcommit_ratio值为50,而内存有1GB,那么这意味着在内存分配请求失败前,加上交换内存,内存将允许高达1.5GB的内存分配请求。
  • 2 表示内核总是返回true。允许分配超过所有物理内存和交换空间总和的内存。

有三种方式修改内核参数,但要有root权限:

  • 编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
  • sysctl vm.overcommit_memory=1
  • echo 1 > /proc/sys/vm/overcommit_memory

安装hiredis:(redis开源库对外发布的客户端API包,当redis-server配置启动后,可以通过hiredis操作redis资源。即redis的C接口,目前只能在linux下使用)

cd /usr/local/redis/deps/hiredis/

make

make install

C代码示例:

//redis默认监听端口为6387 可以再配置文件中修改
redisContext* c = redisConnect();
if ( c->err)
{
redisFree(c);
printf("Connect to redisServer faile\n");
return ;
}
printf("Connect to redisServer Success\n"); 

const char* command1 = "set stest1 value1";
redisReply* r = (redisReply*)redisCommand(c, command1);

安装php-redis:(php的一个扩展,即redis的PHP接口)

cd ~

wget https://github.com/nicolasff/phpredis/zipball/master -O php-redis.zip

unzip php-redis.zip

cd nicolasff-phpredis-21d6614 #进入到解压后的目录

phpize

./configure

make

make install

ll /usr/lib/php/modules/redis.so    #确认一下so文件已经放置到正确目录

php代码示例:

<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1′,6379);
$redis->set(‘test’,'hello world!’);
echo $redis->get(‘test’);
?>
输出hello world!

Redis性能测试工具:redis-benchmark

redis服务器的更多相关文章

  1. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  2. Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容

    在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下. 1. Redis Python redis客户端 ...

  3. Redis服务器的启动过程分析

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/127.html?1455808771 本文将通过分析代码来介绍Redis的 ...

  4. [Azure] 使用 Azure 快速搭建 Redis 服务器

    Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是基于Redis的,而新浪对Redis的使用也非常深,据说是一组64G内存的Redis集群.前段时间我 ...

  5. C#客户端Redis服务器的分布式缓存

    介绍 在这篇文章中,我想介绍我知道的一种最紧凑的安装和配置Redis服务器的方式.另外,我想简短地概述一下在.NET / C#客户端下Redis hash(哈希类型)和list(链表)的使用. 在这篇 ...

  6. Redis 服务器

    Redis 服务器命令主要是用于管理 redis 服务. 实例 以下实例演示了如何获取 redis 服务器的统计信息: redis 127.0.0.1:6379> INFO # Server r ...

  7. php的redis 操作类,适用于单台或多台、多组redis服务器操作

    redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...

  8. 如何在 CentOS 7 上安装 Redis 服务器

    大家好,本文的主题是 Redis,我们将要在 CentOS 7 上安装它.编译源代码,安装二进制文件,创建.安装文件.在安装了它的组件之后,我们还会配置 redis ,就像配置操作系统参数一样,目标就 ...

  9. [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器

    [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器   Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是 ...

随机推荐

  1. genymotion安装及问题解决

     1.首先下载安装genymotion 这个现在安装教程有很多,大家自行百度一下. 下载地址:https://www.genymotion.com/download/# 我的是win10系统,64位, ...

  2. [mysql]知识补充

    知识概况 视图 函数 存储过程 事务 索引 触发器 [视图] 视图是一个虚拟表,可以实现查询功能,不能进行增删改 本质:根据sql语句获取动态的数据集,并为其命名 1.创建视图 --create vi ...

  3. Jquery点击本身,修改出本身之外的其他同级元素的样式

    1.引用Jquyer库 2.Jquery代码: <script type="text/javascript"> $(function () { slidColor('d ...

  4. 全选、取消、2级 checkbox的选中切换

    需求:点击父级checkbox的时候,子级出现全选或全取消:点击子级时,如:子级都是在未选中时,点击某一个子级,则父级选中:如:子级中只有一个选中状态(其他子级都是未选中),点击该子级,则父级也改为未 ...

  5. LATTICE 存储之FIFO的使用

    坑,,以后填 对于Lattice 的  FIFO 存储器分为两种,见下图: 这两个的主要区别是一个后面加DC一个不加,那这个DC是什么意思呢??DC这里是Dual  Clock的意思,也就是双时钟的意 ...

  6. 使用poi读取xlsx中的数据

    excel中的内容见下图: 详细代码: package dataprovider; import java.io.FileInputStream; import java.io.InputStream ...

  7. Python中使用递归输出嵌套列表并转化为大写

  8. Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  9. FP-growth高效频繁项集发现

    FP-growth 算法优缺点: 优点:一般快于Apriori 缺点:实现比较困难,在某些数据上性能下降 适用数据类型:标称型数据 算法思想: FP-growth算法是用来解决频繁项集发现问题的,这个 ...

  10. 【Mybatis框架】查询缓存(一级缓存)

    做Java的各位程序员们,估计SSH和SSM是我们的基础必备框架.也就是说我们都已经至少接触过了这两套常见的集成框架.当我们用SSH的时候,相信很多人都接触过hibernate的两级缓存,同样,相对应 ...