Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型。所以得到很多开发者的青睐。加之其支持主从、持久化等功能,3.0版本开始正式提供分片技术、让其在大型互联网应用中大显身手,本文通过实际操作和理论相配合,对redis进行详细地阐述。
一、redis的安装与使用
下载直接去redis的官网http://redis.io/进行不同操作系统对应的版本。本文中采用的redis的版本为3.2.5、linux平台,安装过程如下
[root@hbase usr]# tar -zxf redis-3.2.5.tar.gz [root@hbase usr]# cd redis-3.2.5 [root@hbase redis-3.2.5]# ll [root@hbase redis-3.2.5]# make [root@hbase redis-3.2.5]# cd src [root@hbase src]# ll
之后我们会发现其中redis-server和redis-cli,这两个文件分别对应启动redis的服务端和客户端,启动服务端
[root@hbase src]# ./redis-server
11579:M 13 Nov 15:07:01.399 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.5 (00000000/0) 32 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 11579
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
11579:M 13 Nov 15:07:01.404 # Server started, Redis version 3.2.5
11579:M 13 Nov 15:07:01.409 * The server is now ready to accept connections on port 6379
可以看到,redis正常启动,6379 是 redis 服务端口,这个端口在redis.conf中可以进行配置,稍后我们讲解配置文件的时候会提到。不要关闭这个窗口,因为当前redis-server不是在后台运行,我们另起一个窗口,在当前目录下进行客户端连接服务端。
[hadoop@hbase src]$ ./redis-cli 127.0.0.1:6379>
说明一切正常,linux环境下的redis安装成功,至于windows下的安装过程相对更加简单,只需打开.exe文件即可,不在详细演示
二、redis数据类型
2.1 string
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,在Redis中字符串类型的Value最多可以容纳的数据长度是512M。除了get、set、作外,Redis还提供了其他的一些诸如追加、递增等功能。
set key value O(1) 设定该key对应的value,如果该Key已经存在,则覆盖其原有值。get key O(1) 获取指定Key的value,如果该Key不存在,返回nil。
setnx key value O(1) 如果指定的Key不存在,则设定该Key持有指定字符串value,此时其效果等价于set命令。如果该Key已经存在,该命令将不做任何操作。
1 127.0.0.1:6379> set hello word 2 OK 3 127.0.0.1:6379> get hello 4 "word" 5 127.0.0.1:6379> set hello world 6 OK 7 127.0.0.1:6379> set hello world 8 OK 9 127.0.0.1:6379> get hello 10 "world" 11 127.0.0.1:6379> get world 12 (nil) 13 127.0.0.1:6379> set hello world_new 14 OK 15 127.0.0.1:6379> get hello 16 "world_new" 17 127.0.0.1:6379> setnx hello nihao 18 (integer) 0 19 127.0.0.1:6379> setnx new_hello nihao 20 (integer) 1