NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
Pages: 1/2 First page 1 2 Next page Final page [ View by Articles | List ]
Nov 30

 随着redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点:

1. 除了Hash,还提供了Sorted Set, List等数据结构
2. 可以持久化到磁盘
3. 支持cluster (3.0)

它的性能和memcached不相上下,再加上流行的其他组件(比如队列)也会用到redis,从架构简单出发,已经没有必要混用redis和memcached了。

写篇短文介绍一下用redis作为缓存服务器配置时候需要注意几个点。

Redis配置

作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置:

# 限定最多使用1.5GB内存maxmemory 1536mb

如果内存到达了指定的上限,还要往redis里面添加更多的缓存内容,需要设置清理内容的策略:

# 设置策略为清理最少使用的key对应的数据maxmemory-policy allkeys-lru

清理策略有多种,redis的官方文档有一篇很详细的说明: http://redis.io/topics/lru-cache

Redis监控

redis提供了INFO这个命令,能够随时监控服务器的状态,只用telnet到对应服务器的端口,执行命令即可:

telnet localhost 6379info

在输出的信息里面有这几项和缓存的状态比较有关系:

keyspace_hits:14414110keyspace_misses:3228654used_memory:433264648expired_keys:1333536evicted_keys:1547380

通过计算hits和miss,我们可以得到缓存的命中率:14414110 / (14414110 + 3228654) = 81% ,一个缓存失效机制,和过期时间设计良好的系统,命中率可以做到95%以上,对于整体性能提升是很大的。
used_memory,expired_keys,evicted_keys这3个信息的具体含义,redis的官方也有一篇很详细的说明:http://redis.io/commands/info

有个ruby gem叫redis-stat,它利用INFO命令展现出更直观的信息报表,推荐:
https://github.com/junegunn/redis-stat

 

 

优化Rails的缓存配置

Rails在用redis作为缓存的时候,配置很简单,官方文档是用schema的方式来写的:

config.cache_store = :redis_store, "redis://localhost:6379/0/cache"

由于实在太简单了,很多人就直接用这个默认设置了,但实际上还有一些很有用的参数可以通过hash options的方式来写,比如压缩超过32K的数据压缩以后再放入缓存,再比如设置默认所有的key失效时间为8小时:

config.cache_store = :redis_store, {:host => 'redis.server', :port => 6379, :compress => true, :expires_in => 8.hours, :compress_threshold => 32.kilobytes}

用一个实际案例来作为例子,一台redis缓存服务器在优化配置之前,占用4.2G左右的内存,缓存命中率在70%左右。
我们先在服务器上执行BGSAVE命令,将内存dump下来,然后用 https://github.com/sripathikrishnan/redis-rdb-tools 这个工具,将dump的数据,解析成csv文件:

rdb -c memory /var/redis/6379/dump.rdb > memory.csv

用excel打开分析,按key进行排序和统计,我们可以看到哪一些类型的缓存在服务器上最多,调整这个类型缓存的失效时间和失效机制,再通过redis-stat来观察进行微调,提高整体的命中率。
通过分析占用内存比较大的key,发现有30%左右的相同类型key,用了95%的内存,这些缓存大部分是html的片段缓存,通过设置compress_threshold和compress参数,让整体内存占用从4.2G,下降到了1.3G。

Jun 15
上次说了Radis的搭建,说明等
最新Redis常用命令大全
Redis常用命令集
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit

2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务

3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器

4)对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
May 27
Redis Desktop Manager是一个快速,简单和跨平台的Redis桌面管理器图形用户界面。采用Qt 5 开发,相比上一篇提到的phpredisadmin管理工具,Redis Desktop Manager更加简单,下载运行登录即可……
Highslide JS
支持平台
Windows Xp, Vista, 7, 8, 8.1
Mac OS X 10.9+
Ubuntu 12 and 13
Debian 7
项目主页(下载地址):http://www.open-open.com/lib/view/home/1385651024953
May 27
部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站、聊天记录存放等方面,但是又与memcache不同:
1、缓存数据可以持久化,没有缓存时间限制
2、支持更多的数据类型:string、list 、set 、sorted set 、hash (参考:http://www.cnblogs.com/xhan/archive/2011/02/02/1948891.html
3、与memcache类似,数据都会存在内存中,这样速度更快,但是redis有一种机制,高明一些,会定期的把数据(新增的、修改的)存入磁盘
4、提供多个数据仓库(0-15)
5、支持在服务器端计算集合的并,交和补集等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。
redis还提供了一个图形界面管理工具PHPredisadmin,与mysql提供的phpmyadmin页面管理工具类似,他们都是基于php代码的工具。PHPredisadmin主要提供对key值的维护增删改查、对库的导入导出、查看info信息。(memcache有专门的监控界面,以后的博客中会有提到)

另外站在性能的角度上看,我不建议在线上redis环境中使用,毕竟PHPredisadmin是一款对海量大数据进行管理的web界面,会消耗比较大的系统资源
phpredisadmin下载地址:https://github.com/ErikDubbelboer/phpRedisAdmin
添加KEY:
Highslide JS
搜索key:
Highslide JS
貌似phpredisadmin图形界面中只能看到默认那个db(0)库中的key;比如select 1在db(1)库中set一些key,在phpredisadmin中就看不到,不知道是不是phpredisadmin版本的问题还是操作上的问题。
May 24

Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can containstrings, hashes, lists, sets and sorted sets.  

-- from http://redis.io/

 

redis 是一个基于内存的高性能key-value数据库,数据都保存在内存中定期刷新到磁盘,以极高的读写效率而备受关注。他的特点是支持各种数据结构,stirng,hashes, list,set,和sorted sets

client端对于不同数据结构是使用不同的命令

 

这里说一下redis的安装

虚拟机环境: centos

 

1 wget  make 安装

wget http://download.redis.io/redis-stable.tar.gz

tar xvzf redis-stable.tar.gz

cd redis-stable

make

 

这里记录一下我安装过程中出现的问题:

make: Warning: File `Makefile' has modification time 5.4e+06 s in the future

cd src && make all

make[1]: Entering directory `/redis/redis-2.4.7/src'

make[1]: Warning: File `Makefile' has modification time 5.4e+06 s in the future

MAKE hiredis

make[2]: Entering directory `/redis/redis-2.4.7/deps/hiredis'

make[2]: Warning: File `Makefile' has modification time 5.4e+06 s in the future

cc -c -std=c99 -pedantic -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings    -g -ggdb  net.c

make[2]: cc: Command not found

make[2]: *** [net.o] Error 127

make[2]: Leaving directory `/redis/redis-2.4.7/deps/hiredis'

make[1]: *** [dependencies] Error 2

make[1]: Leaving directory `/redis/redis-2.4.7/src'

make: *** [all] Error 2

 

 

第一个问题

make: Warning: File `Makefile' has modification time 5.4e+06 s in the future

系统时间调整错了,调过来就好了

 

第二个问题:

make[2]: Entering directory `/redis/redis-2.4.7/deps/hiredis'

cc -c -std=c99 -pedantic -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings    -g -ggdb  net.c

make[2]: cc: Command not found

没安装gcc

yum install gcc-c++

Dec 2
Pages: 1/2 First page 1 2 Next page Final page [ View by Articles | List ]