数据库主要类型有对象数据库,关系数据库,键值数据库等等,对象数据库太超前了,现阶段不提也罢;关系数据库就是平常说的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.
更多命令介绍参考文档介绍。
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://github.com/jdp/redisent/tree/master
http://github.com/owlient/phpredis
http://rediska.geometria-lab.net/
相关推荐
四、Redis 介绍与使用
Redis客户端`redis-cli`提供了与服务器交互的命令行界面,用于执行各种操作,如设置和获取键值、删除键值等。例如,使用`set`命令设置键`name`的值为`bhz`,使用`get`获取键`name`的值,若要删除键`name`则使用`del`...
#### 三、Redis介绍与使用 ##### 3.1 Redis概述 Redis是一种非关系型数据库,主要用作内存中的数据结构存储系统。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并且提供了非常高的读写速度。 **...
Redis是Remote Dictionary Server的缩写,它使用字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。同大多数脚本语言中的字典一样,Redis字典中的键值除了可以是字符串,还可以是其他数据类型。Redis ...
Redis是一种开源的高性能键值对存储数据库,它支持数据的网络访问、基于内存的数据处理方式,并且以NoSQL的形式出现。...通过上述介绍,希望使用者能够对Redis有一个基本的了解,并能够开始尝试安装和使用它。
总的来说,Redis新手入门需要掌握的基本内容包括:Redis的安装与启动、基本数据类型和操作命令、Java客户端的使用、数据持久化与高可用性策略,以及性能优化技巧。通过深入学习和实践,你将能够熟练地在实际项目中...
在这篇文章中,我们将详细介绍如何在Windows平台下编译Redis++,包括编译hiredis.lib和Win32_Interop.lib静态库文件的过程,然后安装Cmake并编译Redis++,最后进行lib测试验证。 首先,我们需要了解Redis++的组件...
### Redis介绍与内部实现机制详解 #### 一、Redis特性 **(一)存储结构** Redis,即Remote Dictionary Server的缩写,是一种基于字典结构的高性能键值存储系统。这种设计使得Redis能够高效地处理各种类型的数据...
在C#环境下使用Redis,我们可以借助StackExchange.Redis库,它提供了丰富的API来与Redis服务器进行交互。下面将详细介绍C#中Redis的安装、配置、基本操作以及示例。 ### 安装Redis 1. **下载服务器端**: 首先,你...
redis ppt 介绍
以上是对Redis安装、客户端使用以及基本数据类型的详细介绍。Redis的强大不仅在于其丰富的数据结构支持,还在于其高性能、易用性和广泛的社区支持。掌握这些基础知识有助于开发者更好地利用Redis来解决实际问题。
ppt格式的redis介绍,包括redis的原理,机制使用方法
本文将详细介绍Redis的搭建与使用,以及如何进行基本的配置修改。 首先,Redis的搭建分为以下几个步骤: 1. **下载Redis**:通过wget命令从官方下载最新稳定版本的Redis压缩包,例如在Linux系统中,你可以执行`...
本文将详细介绍阿里巴巴28条Redis使用规范,涵盖了Redis性能优化、数据存储、安全、实例管理等方面的内容。 规范一:控制key的长度 为了避免Redis中的keys过长,阿里巴巴建议控制key的长度,尽量将String类型的数据...
mysql优化与redis介绍
### REDIS的安装与使用说明 #### 一、Redis简介 Redis是一种开源的键值存储系统,它提供了多种数据结构的存储方式,并且支持网络、内存数据存储、数据持久化等功能。由于其高性能和灵活性,Redis被广泛应用于缓存...
此外,还可以通过内置客户端与Redis进行交互,执行基本的键值存储命令。 Redis的优点主要体现在以下几方面: 1. 极高的性能:能够以每秒数十万次的读写速度运行。 2. 丰富的数据结构:提供了如字符串、列表、哈希、...
### Redis安装和使用教程 #### 一、Redis简介 Redis是一种功能强大的开源键值(Key-Value)数据库系统,它不仅支持内存数据存储还提供了...通过本文的介绍,读者可以了解Redis的基本概念、安装方法以及常见的使用场景。