runoob.com上有比较完整的教程大家可以自己去看
本文作为学习笔记只记录一些学习过程中的要点
简介
Redis是一个开源的,内存数据存储,key-value类型的数据库。其主要优势在于读写速度极快,常被用于充当数据缓存以及需要大量读写操作的功能场景(在负载均衡服务器中也可用于实现session共享机制)。而且redis也拥有较完善的分布式解决方案,即便是大型项目也可以应对自如。
安装redis
官方说明:
下载、提取、编译
$ 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 | 当内存达到最大值时,移除哪些内容的策略。 策略主要包括六种类型: volatile-lru -> 使用lru算法(缓存淘汰算法)删除一个带有过期设置的内容 allkeys-lru -> 使用lru算法删除任意的内容 volatile-random -> 随机删除一个带有过期设置的内容 allkeys-random -> 随机删除任意的内容 volatile-ttl -> 带有过期设置的内容中,过期时间最早的被删除 noeviction -> 返回写操作错误,不删除任何内容 LRU算法:LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 |
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包
redis.clients jedis 2.9.0
使用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 ListgetList(int index,String key){ //获取Jedis链接实例 redis.clients.jedis.Jedis jedis = getJedisPool().getResource(); try{ jedis.select(index);//选择数据库序号 Long len = jedis.llen(key);//获取列表长度 List 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 getSet(int index,String key){ //获取Jedis链接实例 redis.clients.jedis.Jedis jedis = getJedisPool().getResource(); try{ jedis.select(index);//选择数据库序号 Set 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 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 getHash(int index, String key){ //获取Jedis链接实例 redis.clients.jedis.Jedis jedis = getJedisPool().getResource(); try{ jedis.select(index);//选择数据库序号 Map 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 map = new HashMap (); 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")); }}
执行结果
上例项目已将上传到码云:
redis windows客户端
在windows系统中我们可以使用RedisDesktopManager方便的查询redis数据库