redis初学者你有福了—带你进入Redis不一样的世界

【redis是什么】

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库 。
redis的官网地址 , 非常好记 , 是redis.io 。(特意查了一下 , 域名后缀io属于国家域名 , 是british Indian Ocean territory , 即英属印度洋领地)
目前 , Vmware在资助着redis项目的开发和维护 。
 
【redis的作者何许人也】
redis的作者 , 他叫Salvatore Sanfilippo , 来自意大利的西西里岛 , 现在居住在卡塔尼亚 。目前供职于Pivotal公司 。
他使用的网名是antirez , 如果你有兴趣 , 可以去他的博客逛逛 , 地址是antirez.com , 当然也可以去follow他的github , 地址是http://github.com/antirez 。
【谁在使用redis】
Blizzard、digg、stackoverflow、github、flickr …
【学会安装redis】
从redis.io下载最新版redis-X.Y.Z.tar.gz后解压 , 然后进入redis-X.Y.Z文件夹后直接make即可 , 安装非常简单 。
make成功后会在src文件夹下产生一些二进制可执行文件 , 包括redis-server、redis-cli等等:
$ find . -type f -executable
 
./redis-benchmark //用于进行redis性能测试的工具
 
./redis-check-dump //用于修复出问题的dump.rdb文件
 
./redis-cli //redis的客户端
 
./redis-server //redis的服务端
 
./redis-check-aof //用于修复出问题的AOF文件
 
./redis-sentinel //用于集群管理
 
【学会启动redis】
启动redis非常简单 , 直接./redis-server就可以启动服务端了 , 还可以用下面的方法指定要加载的配置文件:
./redis-server ../redis.conf
默认情况下 , redis-server会以非daemon的方式来运行 , 且默认服务端口为6379 。
【使用redis客户端】
我们直接看一个例子:
//这样来启动redis客户端了
 
$ ./redis-cli
 
//用set指令来设置key、value
 
127.0.0.1:6379> set name "roc"
 
OK
 
//来获取name的值
 
127.0.0.1:6379> get name
 
"roc"
 
//通过客户端来关闭redis服务端
 
127.0.0.1:6379> shutdown
 
127.0.0.1:6379>
【redis数据结构 – 简介】
redis是一种高级的key:value存储系统 , 其中value支持五种数据类型:
1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)
而关于key , 有几个点要提醒大家:
1.key不要太长 , 尽量不要超过1024字节 , 这不仅消耗内存 , 而且会降低查找的效率;
2.key也不要太短 , 太短的话 , key的可读性会降低;
3.在一个项目中 , key最好使用统一的命名模式 , 例如user:10000:passwd 。
【redis数据结构 – strings】
有人说 , 如果只使用redis中的字符串类型 , 且不使用redis的持久化功能 , 那么 , redis就和memcache非常非常的像了 。这说明strings类型是一个很基础的数据类型 , 也是任何存储系统都必备的数据类型 。
我们来看一个最简单的例子:
set mystr "hello world!" //设置字符串类型
 
get mystr //读取字符串类型
字符串类型的用法就是这么简单 , 因为是二进制安全的 , 所以你完全可以把一个图片文件的内容作为字符串来存储 。
另外 , 我们还可以通过字符串类型进行数值操作:
127.0.0.1:6379> set mynum "2"
 
OK
 
127.0.0.1:6379> get mynum
 
"2"
 
127.0.0.1:6379> incr mynum
 
(integer) 3
 
127.0.0.1:6379> get mynum
 
"3"
看 , 在遇到数值操作时 , redis会将字符串类型转换成数值 。
由于INCR等指令本身就具有原子操作的特性 , 所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果 , 假如 , 在某种场景下有3个客户端同时读取了mynum的值(值为2) , 然后对其同时进行了加1的操作 , 那么 , 最后mynum的值一定是5 。不少网站都利用redis的这个特性来实现业务上的统计计数需求 。


推荐阅读