TimYang:Redis������ʶ����
ǰ������������һ������ϵͳ�������ܶ༼�������Ѷ��ȽϹ��ģ����е�ԭ�ᳬ��James Hamilton��On Designing and Deploying Internet-Scale Service(1)�������Ǽ�����Χ��James��һ������“Design for failure”�����л������ܹ��ɹ���һ���ؼ���������ϵͳ�Ĺ���������ʵ�dz���James paper�����ݼ����Ʋ������ۣ����Ƕ���ʵ������������ÿ����˾����Щ���������⼰ִ���������˼ܹ��ɰܡ�
���⻰˵�꣬�������о���Redis��ȥ��������һ��MemcacheDB, Tokyo Tyrant, Redis performance test����ĿǰΪֹ������benchmark������Ȼ��Ч����1�����Ǿ����˺ܶ��ۻ����ҵ�key value�洢��Ʒ���ջ�Cassandra�ĵ���(Twitter��ͣ����ҵ��ʹ��)��HBase������(Facebook�µ�����ҵ��ѡ��HBase(2))�����ٻ�ͷ��ȥ��Redis����������ֻ��1������Դ�����ij������������漰����δ���ھ������ԡ�Redis���ܾ��ˣ�����ǰʮ����վ���Ӳ�Ʒ������1̨Redis�Ϳ��������洢��Cache������������ӡ��֮�⣬ҵ����ʵ�ձ���Redis����ʶ����һ����������������һЩ�۵㹩����̽�֡�
1. Redis��ʲô
���������Ľ���Ӱ����������ô��Redis����������ΪRedis��һ��key value store, �ǿ��ܻ�����������MySQL��������Ϊ����һ�����Գ־û���cache, ����ֻ��������һЩƵ�����ʵ���ʱ���ݡ�Redis��REmote DIctionary Server����д����Redis�ڹٷ���վ�ĵĸ�������A persistent key-value database with built-in net interface written in ANSI-C for Posix systems����������ƫ��key value store������һЩ��������ΪRedis��һ��memory database����Ϊ���ĸ����ܶ��ǻ����ڴ������Ļ���������һЩ������ΪRedis��һ��data structure server����ΪRedis֧�ָ��ӵ��������ԣ�����List, Set�ȡ���Redis�����õIJ�ͬ��������������Redis��ʹ�÷�ʽ��
����������Ŀǰ����ʹ�����ַ�ʽ���洢����ϵ���ݿ�����key value��������Щ������ҵ���������������������������ͣ������û������ữƽ̨�еĹ�ϵ������һ��list������Ҫ�ù�ϵ���ݿ��洢����Ҫת����һ�ֶ��м�¼����ʽ��������ʽ���ںܶ��������ݣ�ÿһ����Ҫ�洢һЩ�ظ���Ϣ��������key value�洢���ĺ�ɾ���Ƚ��鷳����Ҫ��ȫ�����ݶ�����д�롣Redis���ڴ��������˸����������ͣ���ҵ���ܹ�����ԭ�ӵķ�����Щ���ݽṹ�����Ҳ���Ҫ���ij־ô洢�����⣬�Ӽܹ��Ͻ�����ǰ�����ִ洢��Ҫ��һЩ��·�����⡣
2. Redis�����ܱ�Memcache��
�ܶ���߶���ΪRedis�����ܱ�Memcached�죬Memcached��ȫ�����ڴ棬��Redis���г־û��������ԣ���ʹ���첽�ģ�RedisҲ�����ܱ�Memcached�졣���Dz��Խ���������Redisռ�������ơ�һֱ��˼������ԭ����Ŀǰ�뵽��ԭ�����⼸���档
- Libevent����Memcached��ͬ��Redis��û��ѡ��libevent��LibeventΪ��ӭ��ͨ�������ɴ����Ӵ�(ĿǰRedis���뻹����libevent��1/3)�����������ض�ƽ̨�IJ������ܡ�Redis��libevent�������ļ���ʵ�����Լ���epoll event loop(4)��ҵ�粻�ٿ�����Ҳ����Redisʹ������һ��libevent����������libev�����������Ǽ���RedisӦ��С�ɲ�ȥ������˼·��һ��ӡ�����̵�ϸ���DZ���Redis֮ǰ������Ҫִ��./configure��
- CAS���⡣CAS��Memcached�бȽϷ�����һ�ַ�ֹ��������Դ�ķ�����CASʵ����ҪΪÿ��cache key����һ�����ص�cas token��cas�൱value�汾�ţ�ÿ��set��token��Ҫ���������˴���CPU���ڴ���˫�ؿ�������Ȼ��Щ������С�����ǵ�����10G+ cache�Լ�QPS����֮����Щ�����ͻ���˫�����Դ���һЩϸ���ܲ���(5)��
3. ��̨Redis�Ĵ������ݱ����������ڴ�С
Redis������ȫ�������ڴ������˸��ٵ����ܣ�����Ҳ����һЩ������֮��������һ��������վ��100��ע���û���������Щ����Ҫ��Redis���洢���ڴ������������ܹ�������100���û�������ҵ��ʵ��������100���û�ֻ��5����Ծ�û���1�������ʹ�1�ε�Ҳֻ��15���û�������ȫ��100���û������ݶ������ڴ��в�����֮����RAM��ҪΪ��������
��������ϵͳ�dz����ƣ�����ϵͳ����Ӧ�÷��ʵ����ݶ����ڴ棬�������������ڴ����ɲ����µ����ݣ�����ϵͳ�����ܽ����ֳ���û�з��ʵ����ݽ��������̣�Ϊ�µ�Ӧ�������ռ䡣�ִ�����ϵͳ��Ӧ���ṩ�IJ����������ڴ棬���������ڴ�(Virtual Memory)�ĸ��
������ͬ�Ŀ��ǣ�Redis 2.0Ҳ������VM���ԡ���Redis��������ͻ���������ڴ������ơ���ʵ�����������ȷ��롣
4. Redis��VMʵ�����ظ�������
Redis��VM����֮ǰ��epollʵ��˼·�������Լ�ʵ�֡�������ǰ������ϵͳ�Ľ����ᵽOSҲ�����Զ�������ʵ���������ݷ��룬Redisֻ��ҪOS����һ�����ڴ棬OS���Զ��������ݷ��������ڴ棬�����ݽ�����Ӳ�̣�����һ��֪����“�������ִ�����ϵͳ(3)”��Varnish��������ʵ�֣�Ҳȡ���˷dz��ɹ���Ч����
����antirez�ڽ���ΪʲôҪ�Լ�ʵ��VM���ᵽ����ԭ��(6)����ҪOS��VM���뻻���ǻ���Page�������OS VM1��Page��4K, 4K��ֻҪ����һ��Ԫ�ؼ�ʹֻ��1���ֽڱ����ʣ�����ҳҲ���ᱻSWAP, ����Ҳͬ������������һ���ֽڿ��ܻỻ��4K���õ��ڴ档��Redis�Լ�ʵ�������Դﵽ���ƻ��������ȡ��������ʲ���ϵͳSWAP�ڴ�����ʱblock���̣�Ҳ�ǵ���RedisҪ�Լ�ʵ��VMԭ��֮һ��
5. ��get/set��ʽʹ��Redis
��Ϊһ��key value���ڣ��ܶ������Ȼ��ʹ��set/get��ʽ��ʹ��Redis��ʵ�����Ⲣ�������Ż���ʹ�÷�����������δ����VM�����£�Redisȫ��������Ҫ�����ڴ棬��Լ�ڴ�������Ҫ��
����һ��key-value��Ԫ��Ҫ��Сռ��512�ֽڣ���ʹֻ��һ���ֽ�Ҳռ��512�ֽڡ���ʱ������һ������ģʽ������key���ã�����key-value����һ��key�У�value����Ϊһ��set���룬����ͬ��512�ֽھͻ�����10-100����������
������Ϊ�˽�Լ�ڴ棬����ʹ��hashset������set/get�ķ�ʽ��ʹ��Redis����ϸ�������ο�����(7)��
6. ʹ��aof����snapshot
Redis�����ִ洢��ʽ��Ĭ����snapshot��ʽ��ʵ�ַ����Ƕ�ʱ���ڴ��Ŀ���(snapshot)�־û���Ӳ�̣����ַ���ȱ���dz־û�֮����������crash���ᶪʧһ�����ݡ����������������ߵ��ƶ�������������aof��ʽ��aof��append only mode����д���ڴ����ݵ�ͬʱ����������浽��־�ļ�����һ����������������ϵͳ�У�������־��һ���dz��Ӵ������ݣ�����ά���ɱ��dz��ߣ��ָ��ؽ�ʱ�����dz�������������ʧȥaof�߿����Ա��⡣��������Ҫ����Redis��һ���ڴ����ݽṹģ�ͣ����е����ƶ��ǽ����ڶ��ڴ渴�����ݽṹ��Ч��ԭ�Ӳ����ϣ������Ϳ���aof��һ���dz���Э���IJ��֡�
��ʵaofĿ����Ҫ�����ݿɿ��Լ��߿����ԣ���Redis��������һ�ַ������ﵽĿ�ģ�Replication������Redis�ĸ����ܣ����ƻ���û���ӳ١������ﵽ�˷�ֹ�������ϼ�ʵ���˸߿��á�
��
Ҫ���ɹ�ʹ��һ�ֲ�Ʒ��������Ҫ�����˽��������ԡ�Redis����ͻ���������ܹ������ļ�Ԧ���Թ��ںܶ�����Ӧ�þ��кܴ�������ϣ������ͬ�м��뵽Redisʹ�ü������о����С�
�����
- On Designing and Deploying Internet-Scale Service(PDF)
- Facebook’s New Real-Time Messaging System: HBase To Store 135+ Billion Messages A Month
- What’s wrong with 1975 programming
- Linux epoll is now supported(Google Groups)
- CAS and why I don’t want to add it to Redis(Google Groups)
- Plans for Virtual Memory(Google Groups)
- Full of keys(Salvatore antirez Sanfilippo)
-EOF-
ԭ�ģ�http://timyang.net/data/redis-misunderstanding/
- ת����ע����Դ��ITѧϰ�� ��ַ��http://www.t086.com/ �����������Ƽ�������
- �ر������� ��վ�������ر�������ֹת�ص�ר�������������¿�������ת�أ���������ע��������ԭʼ���ߡ����°�Ȩ������ԭʼ�������С����ڱ���վת�����µĸ��˺���վ�����DZ�ʾ������л�⡣������վת�ص������а�Ȩ��������ϵ���ǣ����ǻᾡ�����Ը�����
- ������������������̸�����ɶ��ر�
- ��������������ѡʳƷ����2020�ļ��ȵ�Ͷ�ʲ��Ժ���������
- �����ڵ�����֤50���ƴ�50����ָ֤�������Ĺ���
- ����֤50����Щ��Ʊ_��֤50Ȩ����������
- ������300����֤50����֤500��ָ��2019���ڶ��ζ��ڵ���������
- ������300��ֵ/�ɳ�ָ�����Ʒ����������й�ƽ��Ȩ���½�
- ����ָ֤��������֤50��ָ��������
- ����ָ֤��������֤����ָ��������
- ����ָ֤��������֤100ָ��������
- ����ָ֤����������300ָ��������