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/
分享到:
相关推荐
RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 配置序列化方式等 return template; } } ``` 2. 在需要使用Redis的地方,通过`@Cacheable`、`...
### Redis常用命令详解 #### 一、基本操作 **启动Redis服务器** - **命令**: `redis-server.exe redis.conf` ...通过对这些命令的学习和实践,可以更加高效地利用Redis这一高性能的键值存储系统。
| redis:redis端数据库接口<br>     | mongo:MongoDB端数据库接口<br>   | domain:实体类层<br>   | enums:枚举类<br>   | filter:过滤器层<br>  &...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` 2. 配置Redis:在`application.properties`中设置Redis的连接信息。 ``` spring.redis.host=localhost spring.redis...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> ...
<artifactId>spring-data-redis</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>版本号</version> </...
### Redis下载安装与使用详解 #### 一、Redis简介与安装步骤 Redis(Remote Dictionary Server)是一种开源的、高性能的键值对存储系统。...通过本教程的学习,相信读者已经掌握了Redis的基本使用方法及核心概念。
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> ``` 接下来,我们需要配置Redis连接...
<artifactId>spring-session-data-redis</artifactId> <version>latest_version</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</...
RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 可以进一步配置序列化器等 return template; } ``` 为了更好地利用Spring Data Redis的功能,...
例如,如果你的项目名为"RedisOneDay",可能意味着你在一天的学习或开发过程中,会涵盖上述的基本操作,甚至深入到Redis的数据结构(如集合、有序集合、哈希表)的使用,以及Redis的高级特性如事务、Lua脚本、主从...
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost"/> <property name="port" value="6379"/> ...
<artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</...
SpringBoot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring ...这只是一个基础集成,随着需求的增加,你可能需要进一步学习 Redis 的数据结构特性、事务、持久化、集群等方面的知识,以充分利用 Redis 的强大功能。
<artifactId>spring-session-data-redis</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 接着,配置Redis连接信息。在`application.properties`或`application.yml`中设置Redis的主机名、端口、密码等: ```properties ...
Redis 学习入门教程 Redis 简介 ---------- Redis 是一种开源的基于 Key-Value 的轻量级 NoSQL 数据库,具有高性能、高效存储、高可用性和高可扩展性等诸多优势。它结构简单,读写效率高,支持服务器集群,能够...
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect....