`

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/
分享到:
评论

相关推荐

    Redis与Spring+Maven整合,附整合过程教学文档

    RedisTemplate&lt;String, Object&gt; template = new RedisTemplate&lt;&gt;(); template.setConnectionFactory(factory); // 配置序列化方式等 return template; } } ``` 2. 在需要使用Redis的地方,通过`@Cacheable`、`...

    redis常用命令

    ### Redis常用命令详解 #### 一、基本操作 **启动Redis服务器** - **命令**: `redis-server.exe redis.conf` ...通过对这些命令的学习和实践,可以更加高效地利用Redis这一高性能的键值存储系统。

    基于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-mybatis-redis缓存集成

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 2. 配置Redis:在`application.properties`中设置Redis的连接信息。 ``` spring.redis.host=localhost spring.redis...

    springboot+redis共享session(Demo)

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.session&lt;/groupId&gt; &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; &lt;/dependency&gt;...

    Spring boot集成spring session实现session共享的方法

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.session&lt;/groupId&gt; &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; ...

    SSM REDIS集成实战

    &lt;artifactId&gt;spring-data-redis&lt;/artifactId&gt; &lt;version&gt;版本号&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;版本号&lt;/version&gt; &lt;/...

    redis 下载安装使用的详细教程

    ### Redis下载安装与使用详解 #### 一、Redis简介与安装步骤 Redis(Remote Dictionary Server)是一种开源的、高性能的键值对存储系统。...通过本教程的学习,相信读者已经掌握了Redis的基本使用方法及核心概念。

    springboot_redis.zip

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;/dependency&gt; ``` 接下来,我们需要配置Redis连接...

    整合SRPING 基于REDIS共享SESSION

    &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; &lt;version&gt;latest_version&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.data&lt;/groupId&gt; &lt;artifactId&gt;spring-data-redis&lt;/...

    spring整合redis案例(jedis)

    RedisTemplate&lt;String, Object&gt; template = new RedisTemplate&lt;&gt;(); template.setConnectionFactory(factory); // 可以进一步配置序列化器等 return template; } ``` 为了更好地利用Spring Data Redis的功能,...

    java链接Redis实例

    例如,如果你的项目名为"RedisOneDay",可能意味着你在一天的学习或开发过程中,会涵盖上述的基本操作,甚至深入到Redis的数据结构(如集合、有序集合、哈希表)的使用,以及Redis的高级特性如事务、Lua脚本、主从...

    spring集成redis单节点、集群、哨兵配置

    &lt;bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"&gt; &lt;property name="hostName" value="localhost"/&gt; &lt;property name="port" value="6379"/&gt; ...

    spring session入门

    &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;/...

    SpringBoot + Mybatis + Redis 整合

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt; &lt;artifactId&gt;mybatis-spring-boot-starter&lt;/artifactId&gt; &lt;version&gt;2.1.3&lt;/...

    springboot-集成redis

    SpringBoot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring ...这只是一个基础集成,随着需求的增加,你可能需要进一步学习 Redis 的数据结构特性、事务、持久化、集群等方面的知识,以充分利用 Redis 的强大功能。

    学习Spring-Session+Redis实现session共享

    &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; &lt;version&gt;1.2.1.RELEASE&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;2.8.1&lt;/...

    springboot_sentinelredis

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; ``` 接着,配置Redis连接信息。在`application.properties`或`application.yml`中设置Redis的主机名、端口、密码等: ```properties ...

    Redis学习入门教程.doc

    Redis 学习入门教程 Redis 简介 ---------- Redis 是一种开源的基于 Key-Value 的轻量级 NoSQL 数据库,具有高性能、高效存储、高可用性和高可扩展性等诸多优势。它结构简单,读写效率高,支持服务器集群,能够...

    springboot-redis分布式锁

    Jackson2JsonRedisSerializer&lt;Object&gt; serializer = new Jackson2JsonRedisSerializer&lt;&gt;(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect....

Global site tag (gtag.js) - Google Analytics