`

redis学习<一>

阅读更多
Redis马上就要释出1.0Stable了,是出手的时候了。

Redis的介绍

数据库主要类型有对象数据库,关系数据库,键值数据库等等,对象数据库太超前了,现阶段不提也罢;关系数据库就是平常说的 MySQL,PostgreSQL这些熟的不能再熟的东西,至于键值数据库则是本文要着重说的,其代表主要有MemcacheDB,Tokyo Cabinet等等。

Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。从而使它的位置处于关系数据库和键值数据库之间。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT)等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。

详细描述参见官方手册,同时,官方提供了一个名为Retwis的项目的源代码,可以对照着官方介绍学习,注意其中关于Data Layout的描述,其他没什么。

项目实践中,多以关系数据库为主,不过合理的使用Redis这样的键值数据库,往往能扬长避短,比如说实现一个类似消息队列的功能,对MySQL来说,除非使用Q4M,否则很难满足高并发请求,不过对Redis来说,通过内建的Lists支持,消息队列就是小菜一碟。

Redis的安装

tar zxvf redis-version.tar.gz
cd redis-version
make

由于没有make install,所以得把源代码目录里的关键文件手动复制到适当的位置:

cp redis.conf /etc/
cp redis-benchmark redis-cli redis-server /usr/bin/

如果内存情况比较紧张的话,需要设定内核参数:

echo 1 > /proc/sys/vm/overcommit_memory

然后编辑redis.conf配置文件(/etc/redis.conf),按需求做出适当调整,比如:

daemonize yes
logfile /dev/null

如果要记录日志的话,最好先调整loglevel到一个合适的级别,然后设定logfile,如果不需要,则可以像上面这样直接把日子丢弃到/dev /null里,还有一点,缺省情况下,数据文件dump.rdb会被生成到当前目录,可以通过dir参数设定合适的目录。

此外,如果你决定把Redis用于产品环境,还要注意maxmemory选项,因为Redis在启动时会把所有数据加载到内存中,所以设定 maxmemory相对安全。

接下来直接启动服务就可以了,只有配置文件一个参数:

redis-server /etc/redis.conf

确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如:

redis-cli set foo bar
OK
redis-cli get foo
bar

在设置键对应的值的时候,按照协议的规定是要提供数据大小这个参数的,上面的redis-cli命令之所以没有提供这个参数是因为redis-cli本身进行了封装。

可以通过telnet来验证一点:
telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 3
bar
+OK
get foo
$3
bar
^]
telnet> quit
Connection closed.


3是输入3个字符

更多命令介绍参考文档介绍。

Redis源代码里附带了多种客户端的扩展,比如说php(client-libraries/php),这是一个纯PHP的实现方案,也有二进制版本的实现(phpredis)。其他语言即便没有现成的扩展实现,也可以自己按照协议规范写一个扩展,应该不是什么难事。

Redis内存要求很高,如果你的数据量很大的话,可能会导致系统使用swap,这会使性能急剧下降。此时更好的方法是通过consistent hashing把数据分布到多个服务器上,文档上给出了简单的例子解释:

For example imagine to have N Redis servers, server-0, server-1, ..., server-N. You want to store the key "foo", what's the right server where to put "foo" in order to distribute keys evenly among different servers? Just perform the crc = CRC32("foo"), then servernum = crc % N (the rest of the division for N). This will give a number between 0 and N-1 for every key. Connect to this server and store the key.

在线演示:
http://try.redis-db.com/

参考链接:
http://code.google.com/p/redis/wiki/ProtocolSpecification
http://redis.io/

http://github.com/jdp/redisent/tree/master
http://github.com/owlient/phpredis
http://rediska.geometria-lab.net/
分享到:
评论

相关推荐

    基于SpringBoot的图书馆管理系统项目源码+数据库+项目说明(课程设计).zip

    | redis:redis端数据库接口&lt;br&gt; &emsp;&emsp;&emsp;&emsp;| mongo:MongoDB端数据库接口&lt;br&gt; &emsp;&emsp;| domain:实体类层&lt;br&gt; &emsp;&emsp;| enums:枚举类&lt;br&gt; &emsp;&emsp;| filter:过滤器层&lt;br&gt; &emsp;&...

    基于SpringBoot的图书馆管理系统源码+数据库+项目说明(毕设).zip

    | redis:redis端数据库接口&lt;br&gt; &emsp;&emsp;&emsp;&emsp;| mongo:MongoDB端数据库接口&lt;br&gt; &emsp;&emsp;| domain:实体类层&lt;br&gt; &emsp;&emsp;| enums:枚举类&lt;br&gt; &emsp;&emsp;| filter:过滤器层&lt;br&gt; &emsp;&...

    基于ssm的博客系统+源代码+文档说明

    这是一个基于SSM实现的博客系统&lt;br&gt; # 系统的主要功能 1.用户的注册、登录和退出&lt;br&gt; 2.首页展示不同分类的博客&lt;br&gt; 3.编写博客并发表&lt;br&gt; 4.博客管理,包括查看、修改、删除&lt;br&gt; 5.有待完善&lt;br&gt; # 项目所用技术 1...

    Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip

    &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; 编写启动类 public class ServletApplication extends SpringBootServletInitializer { @Override protected ...

    18springboot+Redis学习笔记1

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; ``` (1) 引用依赖 在使用 RedisTemplate 之前,我们需要首先引用依赖。 (2) 配置 application.properties 然后,我们需要在 ...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    &lt;bean id="jedisPool" class="redis.clients.jedis.JedisPool"&gt; &lt;constructor-arg index="0" ref="jedisPoolConfig" /&gt; &lt;constructor-arg index="2" value="6379" name="port" type="int"/&gt; &lt;constructor-arg ...

    memento:在epoll TCP服务器之上的基本类似redis的hashmap实现

    我对这个主题着迷的一个仅用于学习目的的玩具项目,我决定尝试制作一个更简单的redis / memcached版本,以更好地了解它的工作原理。 该项目是具有基于文本协议的最小Redis类实现,并且与Redis一样,可以用作键值...

    Redis学习笔记整理

    二、 redis学习笔记之数据类型 3 三、 redis学习笔记之排序 11 四、 redis学习笔记之事务 16 五、 redis学习笔记之pipeline 20 六、 redis学习笔记之发布订阅 23 七、 redis学习笔记之持久化 28 八、 redis学习笔记...

    redis学习笔记

    redis学习笔记redis 是一个开源的 key-value 数据库。它又经常被认为是一个数据结构服务器。 因为它的 value 不仅包括基本的 string 类型还有 list,set ,sorted set 和 hash 类型。当 然这些类型的元素也都是 string...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    基于SSM框架+mysql的电子商城web系统项目源码+项目说明.zip

    &lt;artifactId&gt;junit&lt;/artifactId&gt; &lt;version&gt;4.11&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; ``` - **数据库**:`MYSQL(5.x.x)`; - **NoSQL**:`Redis`(并不是用的很多); - **其他工具推荐** - 谷歌浏览器...

    java源码干货-javabase:学习~

    &lt;module&gt;redis&lt;/module&gt; &lt;module&gt;js&lt;/module&gt; &lt;module&gt;httpclient&lt;/module&gt; &lt;module&gt;mobiletechnology&lt;/module&gt; &lt;module&gt;webmagic&lt;/module&gt; ``` 目前有这几个模块,以后可能会有新的模块添加进去的 thread模块 这个...

    基于springboot , zookeeper , redis 分布式事务强一致性方案+源代码+文档说明

    &lt;artifactId&gt;fat-common&lt;/artifactId&gt; &lt;version&gt;1.0.6-RELEASE&lt;/version&gt; &lt;/dependency&gt; ``` ## 使用示例 ### step0:SpringBootApplication加上@EnableFat注解 ```java @SpringBootApplication @...

    redis学习相关资料

    redis学习相关资料 redis命令 redis文档总结 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash...

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时可以借助此demo快速构建项目&lt;br/&gt; 2.实现shiro的授权信息缓存到redis数据库,减少关系数据库...

    超详细的redis学习笔记

    附件是本人学习redis的一个学习过程笔记和心得,希望对有需要的同行有所助益

    Redis全套学习笔记

    Redis全套学习笔记,分享的是整理的《Redis 全套学习笔记.pdf》,图文并茂,特别详细,基本上涵盖了 Redis 所有知识点。redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,...

    redis学习笔记(详细总结)

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它支持存储的 value 类型相对更多,包括 ...

    Redis学习资料整理.zip

    个人的学习笔记,五大基本数据类型,相关配置,redis事务,主从同步,集群,持久化,Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本...

    PyLookSrcRelation:Python协助解读CC ++原始码之间的关系

    终于更新一个小的python项目来一起动手学习了,今天想看看Redis源码,可惜太慢太多,思维太乱,于是想到看是否用Python可以分析出这个源码直接的依赖关系。 这里说的依赖关系指的是,假设有一个C / C ++程序,如下...

Global site tag (gtag.js) - Google Analytics