Redis 是一个高性能的key-value数据库,与其他key-value数据库有不通的地方是他的数据存储结构:
Strings、hashs、lists、sets、sorted 、sets 等 通过不同数据结构存储可以根据业务来选择调用那种api
1,安装 (系统环境是linux 活unix)
下载redis 源码安装包:
wget http://download.redis.io/releases/redis-2.8.8.tar.gz
解压文件:
tar -xf redis-2.8.8.tar.gz
编译安装Redis:
sudo make PREFIX=/usr/local/redis install
将redis的安装目录安装到:/usr/loca/redis 然后从安装包中找到reids的配置文件,复制到安装的根目录。
sudo cp redis.conf /usr/local/redis
启动 Redis Server
./redis-server ../redis.config
使用redis-cli进行访问:(更多redis命令请自行查询)
./redis-cli
>set name liuzailun
>get name
"liuzailun"
>
2,调用 Redis API:
Redis javaclient 有很多种,Jedis是比较常用的一种
Redis client 初始化:
Jedis redis = new Jedis("192.168.136.110",6379);
调用api 进行数据的基本操作:
2.1--set:
redis.set("name","liuzailun");//设置key-valuse
redis.set("content",5,hello)//设置key-value的有效期为5秒
redis.mset("class","a","age","25")//一次设置多个key-value
redis.append("content","happy") //给字符串追加内容
String content = redis.get("content");//根据key获取value
List<String> list = redis.mget("class","age");//一次取多个key
2.2--hset
redis.hset("url","baidu","www.baidu.com")//给hash添加key-value
redis.hset("url","jingdong","www.jd.com")
Map<String,String> map = new HashMap<String,String>()
map.put("name","liuzailun");
map.put("sex","man");
map.put("age","100");
redis.mset("userinfo",map);//批量设置值
String name = redis.hget("userinfo",name)//取hash中某个key的值
//取hash中多个key的值
List<String> urllist = redis.hmget("url","baidu","jingdong");
//取Hash中所有key的值
Map<String,String> userinfo = redis.hgetAll("userinfo");
2.3--lists
Reids 的lists 是一个链表结构, 主要功能push,pop获取某个范围内的值push,pop可以从链表的头部或者尾部插入或者删除元素
lists可以当做栈使用
redis.lpush("charlist","abc");//在list首部添加元素
redis.lpush("charlist","def");
redis.rpush("charlist","hij");//在list尾部添加元素
redis.rpush("charist","klm");
List<String> charlist = redis.lrange("charlist","0","2");//获取指定的区间元素
redis.lpop("charlist")//在list首部删除元素
redis.rpop("charlist")//在list尾部删除元素
Long charlistsize = redis.llen("charlist");获得list的大小
2.4 --sets(用来存储一个没有元素重复的集合,对集合的元素可以添加删除,对所有元素进行枚举)
redis.sadd("SetMem","s1");// 添加元素
redis.sadd("SetMem","s2");
redis.sadd("SetMem","s3");
redis.srem("setMem","s3")//从set中移除元素
Set<String>set = redis.sembers("SetMem")//枚举出set元素
2.5--sorted sets (Redis sets的升级版。在sets的基础上增加了一个排序的属性);
redis.zadd("SortSetMem",1,"5th");//插入sort set并指定元素的序号
redis.zadd("SortSetMem",2,"4th");
redis.zadd("SortSetMem",3,"3th");
Set<String> sortset = redis.zrange("SortSetMem",2,4);//根据范围取set
Set<String> revsortset = redis.zrevrange("SortSetMem",1,2);//根据范围反向取set
相比较传统的关系型数据库,redis有更好的读写能力,支撑更高的并发数,而相比较其他的key-value数据库Redis能够提供更为丰富的数据类型支持Redis能够高效的实现诸如排序取topN。访问计数器,队列系统,数据重新排序等业务需求并且通过将服务器设置为cache-only, 还能够提供高性能的缓存服务,相较与memcahe来说,在性能差别不大的情况下他能够支持更丰富的数据类型。
大家一起学习探讨应用场景,配置等问题。
----参考书籍大型分布式网站架构设计与实践。-陈康贤著---