Redis学习笔记整理 java例子 下载本文

redis学习笔记整理

一、 redis 环境搭建 ............................................................................... 2 二、 redis学习笔记之数据类型 ........................................................... 3 三、 redis学习笔记之排序.................................................................. 11 四、 redis学习笔记之事务.................................................................. 16 五、 redis学习笔记之pipeline ............................................................ 20 六、 redis学习笔记之发布订阅 ......................................................... 23 七、 redis学习笔记之持久化.............................................................. 28 八、 redis学习笔记之主从复制 ......................................................... 30 九、 redis学习笔记之虚拟内存 ......................................................... 31

一、 redis 环境搭建

1.简介

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

string 类型。你可以在这些类型上做很多原子性的操作。比如对一个字符value追加字符串(APPEND命令)。加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。对于set类型可以进行一些集合相关操作 (intersection union difference)。memcache也有类似与++,--的命令。

不过memcache的 value只包括string类型。远没有redis的value类型丰富。和memcahe一样为了性能。redis的数据通常都是放到内存中的。当然 redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。redis也支持主从复制机制(master-slave replication)。redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。还有各种语言版本的开源客户端类库。 2.安装

下载地址:http://redis.googlecode.com/files/redis-2.0.4.tar.gz 2.0目前是最新稳定版

可以在linux下运行如下命令进行安装

$ tar xzf redis-2.0.4.tar.gz $ cd redis-2.0.4 $ make

make完后 redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli

下面启动redis服务.

$./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动.

$ ./redis-server redis.conf

redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。 启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了. 比如

$ ./redis-cli redis> set foo bar OK

redis> get foo \

这里演示了get和set命令操作简单类型value的例子。foo是key ,bar是个string类型的value 没linux的可以通过这个在线的来练习,当然在线版的很多管理相关的命令是不支持的。 http://try.redis-db.com/ 3.java客户端hello,world

客户端jar包地址http://cloud.github.com/downloads/alphazero/jredis/jredis-1.0-rc2.jar 。版

本目前有点老,支持到Redis 1.2.6。最新版2.0的还没release

在eclipse中新建一个java项目,然后添加jredis包引用。下面是个hello,world程序

package jredisStudy; import org.jredis.*;

import org.jredis.ri.alphazero.JRedisClient; public class App {

public static void main(String[] args) { try {

JRedis jr = new JRedisClient(\,6379); //redis服务地址和端口号 String key = \;

jr.set(key, \); String v = new String(jr.get(key)); String k2 = \; jr.incr(k2); jr.incr(k2);

System.out.println(v);

System.out.println(new String(jr.get(k2))); } catch (Exception e) { // TODO: handle exception } } }

好了redis环境已经搭建好了。后面会写写redis的各种类型和类型相关的命令和一些具体的应用场景

二、 redis学习笔记之数据类型

本文介绍下redis支持的各种数据类型包括string,list ,set ,sorted set 和hash

1. keys

redis本质上一个key-value db,所以我们首先来看看他的key.首先key也是字符串类型,但是key中不能包括边界字符 由于key不是binary safe的字符串,所以像\key\和\这样包含空格和换行的key是不允许的 顺便说一下在redis内部并不限制使用binary字符,这是redis协议限制的。\在协议格式中会作为特殊字符。 redis 1.2以后的协议中部分命令已经开始使用新的协议格式了(比如MSET)。总之目前还是把包含边界字符当成非法的key吧,

免得被bug纠缠。

另外关于key的一个格式约定介绍下,object-type:id:field。比如user:1000:password,blog:xxidxx:title

还有key的长度最好不要太长。道理很明显占内存啊,而且查找时候相对短key也更慢。不过也推荐过短的key, 比如u:1000:pwd,这样的。显然没上面的user:1000:password可读性好。

下面介绍下key相关的命令

exits key 测试指定key是否存在,返回1表示存在,0不存在

del key1 key2 ....keyN 删除给定key,返回删除key的数目,0表示给定key都不存在

type key 返回给定key的value类型。返回 none 表示不存在key,string字符类型,list 链表类型 set 无序集合类型... keys pattern 返回匹配指定模式的所有key,下面给个例子 redis> set test dsf OK

redis> set tast dsaf OK

redis> set tist adff OK

redis> keys t* 1. \2. \3. \

redis> keys t[ia]st 1. \2. \

redis> keys t?st 1. \2. \3. \

randomkey 返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串

rename oldkey newkey 原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldk