runoob.com上有比较完整的教程大家可以自己去看 http://www.runoob.com/redis/redis-tutorial.html
本文作为学习笔记只记录一些学习过程中的要点
简介
Redis是一个开源的,内存数据存储,key-value类型的数据库。其主要优势在于读写速度极快,常被用于充当数据缓存以及需要大量读写操作的功能场景(在负载均衡服务器中也可用于实现session共享机制)。而且redis也拥有较完善的分布式解决方案,即便是大型项目也可以应对自如。
安装redis
官方说明:https://redis.io/download
下载、提取、编译
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make
前台启动
$ cd src
$ ./redis-server
前台启动退出后服务就终止了
后台启动
在安装目录下找到redis.config文件,并将daemonize no改为daemonize yes
使用配置文件进行启动
./redis-server ../redis.conf
启动后将在后台看到redis进程
root 31840 1 0 10:25 ? 00:00:00 ./redis-server 127.0.0.1:6379
配置文件
redis.config是redis的主要配置文件,redis位于安装目录下
功能 | 参数 | 说明 |
---|---|---|
启动方式 | daemonize | no - 前台启动 yes - 后台启动 |
登录密码 | requirepass | 密码值 |
绑定ip | bind | 只能绑定本机ip(127.0.0.1),如果想要外网访问可以配 * |
端口号 | port | 默认为6379 |
内存淘汰机制 | maxmemory-policy | 当内存达到最大值时,移除哪些内容的策略。 |
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis 命令
执行redis命令时我们先要启动redis客户端,客户端在/src下
$ cd src
$ ./redis-cli
如果redis开启了密码则需要输入密码
./redis-cli -a 111111
如过远程访问则需要输入ip和端口号
redis-cli -h 123.56.8.122 -p 6379 -a 111111
部分命令简介
命令 | 解释 |
---|---|
ping | 查看服务是否运行 |
quit | 关闭当前连接 |
select index | 切换到指定的数据库 |
info | 服务信息 |
keys * | 获取所有key值 |
type key | 获取保存数据的类型 |
del key | 删除一条数据 |
exists key | 检查key是否存在 |
expire key seconds | 指定数据的生存时间。单位:秒 |
ttl key | 返回剩余生存时间。单位:秒 |
persist key | 数据永远不进行销毁 |
set key value | 保存string数据 |
get key value | 取出string数据 |
rpush key value1 [value2] | 创建或插入list数据 |
lrange key start stop | 获取list一组数据 |
llen key | 获取list列表长度 |
sadd key member1 [member2] | 创建或插入set数据 |
smembers key | 获取set一组数据 |
scard key | 获取set列表长度 |
hmset key field1 value1 [field2 value2 ] | 创建多组哈希类型数据 |
hset key field value | 创建一组哈希类型数据 |
hget key field | 取出哈希表中某一组数据 |
hdel key field2 [field2] | 删除哈希表中某一组数据 |
hvals key | 取出哈希表中所有数据 |
在java中使用Redis
源码地址:https://github.com/xetorthio/jedis
在java中使用redis需要导入Jedis包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
使用Jedis连接池来获取Jedis实例,使用实例实现控制redis数据库的功能。代码如下
package pub.lichao.test.controller;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisUtil {
private JedisPool jedisPool = null; //连接池
/**
* 获取连接池
* @return
*/
private JedisPool getJedisPool(){
if (this.jedisPool == null){
JedisPoolConfig config = new JedisPoolConfig(); //创建连接池配置文件
config.setMaxTotal(150);//最大连接数,默认8个
config.setMaxIdle(30);//最大空闲连接数,默认8个
config.setMinIdle(10);//最小空闲连接数
config.setMaxWaitMillis(3000);//最大等待时间,毫秒
config.setTestOnBorrow(true);//获取连接的时候是否检查有效性
config.setTestWhileIdle(true);//在空闲时是否检查有效性
//创建连接池
this.jedisPool = new JedisPool(config, "123.56.8.122", 6379, 6000, "111111");
}
return this.jedisPool;
}
/**
* 保存String类型数据
* @param index 数据库序号
* @param key 数据key
* @param value 数据值
* @param time 生存时间(秒),负数代表永不销毁
*/
public void saveString(int index,String key,String value,int time){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.type("String");//选择存储数据的类型
jedis.set(key,value);//设置string类型数据
if(time >= 0){
jedis.expire(key,time);//设置生存时间
}else{
jedis.persist(key);//设置永不销毁
}
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 获取String类型数据
* @param index 数据库序号
* @param key 数据key
* @return
*/
public String getString(int index,String key){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
String value = jedis.get(key);//获取数据值
return value;
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
return null;
}
/**
* 保存List类型数据
* @param index 数据库序号
* @param key 数据key
* @param value 数据值
* @param time 生存时间(秒),负数代表永不销毁
*/
public void saveList(int index, String key, String[] value, int time){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.type("List");//选择存储数据的类型
jedis.lpush(key,value);//设置string类型数据
if(time >= 0){
jedis.expire(key,time);//设置生存时间
}else{
jedis.persist(key);//设置永不销毁
}
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 为List类型数据增加值
* @param index 数据库序号
* @param key 数据key
* @param value 值
*/
public void addList(int index, String key,String value){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.lpush(key,value);//添加值
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 获取List类型数据
* @param index 数据库序号
* @param key 数据key
* @return
*/
public List<String> getList(int index,String key){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
Long len = jedis.llen(key);//获取列表长度
List<String> value = jedis.lrange(key,0,len);//获取数据值
return value;
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
return null;
}
/**
* 保存Set类型数据
* @param index 数据库序号
* @param key 数据key
* @param value 数据值
* @param time 生存时间(秒),负数代表永不销毁
*/
public void saveSet(int index, String key, String[] value, int time){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.type("Set");//选择存储数据的类型
jedis.sadd(key,value);//设置数据
if(time >= 0){
jedis.expire(key,time);//设置生存时间
}else{
jedis.persist(key);//设置永不销毁
}
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 为Set类型数据增加值
* @param index 数据库序号
* @param key 数据key
* @param value 值
*/
public void addSet(int index, String key,String value){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.sadd(key,value);//添加值
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 获取Set类型数据
* @param index 数据库序号
* @param key 数据key
* @return
*/
public Set<String> getSet(int index,String key){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
Set<String> value = jedis.smembers(key);//获取数据值
return value;
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
return null;
}
/**
* 保存Hash类型数据
* @param index 数据库序号
* @param key 数据key
* @param value 数据值
* @param time 生存时间(秒),负数代表永不销毁
*/
public void saveHash(int index, String key, Map<String,String> value, int time){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
jedis.type("Hash");//选择存储数据的类型
jedis.hmset(key,value);//设置hash类型数据
if(time >= 0){
jedis.expire(key,time);//设置生存时间
}else{
jedis.persist(key);//设置永不销毁
}
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 为Hash类型数据增加值
* @param index 数据库序号
* @param key 数据key
* @param field 域
* @param value 值
*/
public void addHash(int index, String key,String field, String value){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
if(jedis.exists(key)){//判断key是否存在
jedis.hset(key,field,value);//添加值
}
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
}
/**
* 获取Hash类型数据
* @param index 数据库序号
* @param key 数据key
* @return
*/
public Map<String, String> getHash(int index, String key){
//获取Jedis链接实例
redis.clients.jedis.Jedis jedis = getJedisPool().getResource();
try{
jedis.select(index);//选择数据库序号
Map<String, String> map = jedis.hgetAll(key);
return map;
}catch (Exception e){
e.printStackTrace();
}finally {
jedis.close();
}
return null;
}
public static void main(String[] args) {
JedisUtil jedisUtil = new JedisUtil();
jedisUtil.saveString(0,"testString","string data",300);
System.out.println(jedisUtil.getString(0,"testString"));
String[] list = {"value1","value2","value3","value4","value5"};
jedisUtil.saveList(0,"testList",list,300);
jedisUtil.addList(0,"testList","value6");
System.out.println(jedisUtil.getList(0,"testList"));
String[] set = {"value1","value2","value3","value4","value5"};
jedisUtil.saveSet(0,"testSet",set,300);
jedisUtil.addSet(0,"testSet","value6");
System.out.println(jedisUtil.getSet(0,"testSet"));
Map<String,String> map = new HashMap<String,String>();
map.put("field1","value1");
map.put("field2","value2");
map.put("field3","value3");
map.put("field4","value4");
map.put("field5","value5");
jedisUtil.saveHash(0,"testHash",map,300);
jedisUtil.addHash(0,"testHash","field6","value6");
System.out.println(jedisUtil.getHash(0,"testHash"));
}
}
执行结果
上例项目已将上传到码云:http://git.oschina.net/imlichao/Jedis-example
redis windows客户端
在windows系统中我们可以使用RedisDesktopManager方便的查询redis数据库