Redis
简介
- Redis开源免费的,是一个key-value形式的数据库
- Redis支持数据的持久化,可将内存中的数据写入磁盘中,重启的时候可以再次加载使用
- Redis支持String,list,set,zset,hash等数据结构的存储。
Redis的优势
- 性能极高,读写的速度极快
- 丰富的数据类型,支持String,list,set,zset,hash等数据结构的存储
- Redis所有的操作都遵循原子性,要么执行成功要么执行失败
Redis的安装
- window下安装
下载地址:https://github.com/MSOpenTech/redis/releases。
Redis支持32bit和64bit - Linux 下安装
下载地址:http://redis.io/download,下载最新稳定版本。 - 打开一个 cmd 窗口 使用 cd 命令切换目录到 Redis目录下运行
- 开启服务:redis-server.exe redis.windows.conf
- 另起一个cmd窗口,执行Redis客户端:redis-cli.exe -h 127.0.0.1 -p 6379
Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- String是Redis最基本的数据类型,String类型最大能存储512MB,且存储方式为一个 key 对应一个 value
- Hash是一个键值(key=>value)对集合,Hash适用于存储对象
- list是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- Set 是 string 类型的无序集合。
- zset 和 set 一样也是string类型元素的集合,且不允许重复的成员,但是根据score分数进行排序
Redis命令
Redis 键命令用于管理 redis 的键。
对字符串的操作
- set key value //将字符串值value关联到key
- get key //返回key关联的字符串值
- mset //同时设置一个或多个 key-value 对
- mget //返回所有(一个或多个)给定 key 的值
- incr key //将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
- decr key //将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
- incrBy key //自增多少
- decrBy key //自减多少
对key的常用操作
- keys * //获取所有key列表
- del key //删除key
- expire key xx //设置key的过期时间(xx秒后过期)
- ttl key //查看key的过期时间
- flushall //清空整个redis服务器数据,所有的数据库全部清空(慎用)
- flushdb //清除当前库,redis中默认有16个数据库,名称分别为0,1,2.。。15
- select index //跳转到某库
对list的常用操作
- lpush key value //将一个或多个值 value 插入到列表 key 的表头(最左边)
- rpush key value //将一个或多个值 value 插入到列表 key 的表尾(最右边)
- lpop key //移除并返回列表 key 的头(最左边)元素。
- rpop key //移除并返回列表 key 的尾(最右边)元素。
- lpop key //移除并返回列表 key 的头(最左边)元素。
- rpop key //移除并返回列表 key 的尾(最右边)元素。
- lrange key start stop //返回列表 key 中指定区间内的元素,查询所有的stop为-1即可
- lrem key count value //根据count值移除列表key中与参数 value 相等的元素count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值。
- lindex key index //返回列表 key 中,下标为 index 的元素
- trim key start stop //对一个列表进行修剪
对set集合的常用操作
- sadd key member //将一个或多个 member 元素加入到集合 key 当中,已经存 在于集合的 member 元素将被忽略
- srem key member //移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
- smembers key //返回集合 key 中的所有成员。
对hash类型的常用操作
- hset key name value //添加一个name=>value键值对到key这个hash类型
- hget key name //获取hash类型的name键对应的值
- hmset key name1 key1 name2 key2 //批量添加name=>value键值对到key这个hash类型
- hmget key name1 name2 //批量获取hash类型的键对应的值
- hkeys //返回哈希表 key 中的所有键
- hvals //返回哈希表 key 中的所有值
- hgetall //返回哈希表 key 中,所有的键和值
事务操作
- multi //标记一个事务块的开始。
- exec //执行所有事务块内的命令。
Redis安全密码
- CONFIG set requirepass key //设置密码
- CONFIG SET requirepass “” //清除密码
- AUTH key //身份验证
JAVA使用Redis
- 在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动
- 要下载驱动包 下载 jedis.jar,架包:jedis-2.9.0.jar
- 测试如下
public class Redis_Test {
@Test
public void testName()throws Exception{
// java客户端
Jedis jedis=new Jedis();
// 密码
jedis.auth("123456");
jedis.set("test2", "xxxx");
String test2 = jedis.get("test2");
System.err.println(test2);
jedis.close();
}
// 连接池 数据源 复用
@Test
public void pool()throws Exception{
// 配置对象
GenericObjectPoolConfig poolConfig =new GenericObjectPoolConfig();
poolConfig.setMaxTotal(20);
poolConfig.setMaxIdle(5);
// 池对象
JedisPool jedisPool=new JedisPool(poolConfig, "localhost", 6379,2000,"123456");
// 从池里面获取yoghurtedis对象
Jedis jedis = jedisPool.getResource();
jedis.set("test2", "xxxx");
String test2 = jedis.get("test2");
System.err.println(test2);
}
// list
@Test
public void list()throws Exception{
// 配置对象
GenericObjectPoolConfig poolConfig =new GenericObjectPoolConfig();
poolConfig.setMaxTotal(20);
poolConfig.setMaxIdle(5);
// 池对象
JedisPool jedisPool=new JedisPool(poolConfig, "localhost", 6379,2000,"123456");
// 从池里面获取yoghurtedis对象
Jedis jedis = jedisPool.getResource();
jedis.lpush("list","zs","ls","ww");
List<String> list = jedis.lrange("list", 0, -1);
for (String s : list) {
System.err.println(s);
}
}
// 排序
@Test
public void sort()throws Exception{
// 配置对象
GenericObjectPoolConfig poolConfig =new GenericObjectPoolConfig();
poolConfig.setMaxTotal(20);
poolConfig.setMaxIdle(5);
// 池对象
JedisPool jedisPool=new JedisPool(poolConfig, "localhost", 6379,2000,"123456");
// 从池里面获取yoghurtedis对象
Jedis jedis = jedisPool.getResource();
jedis.lpush("list2","10","15","14");
SortingParams sortingParams=new SortingParams();
sortingParams.desc();
List<String> list2 = jedis.sort("list2", sortingParams);
System.err.println(list2);
}
// 字母排序
@Test
public void abcdsort()throws Exception{
// 配置对象
GenericObjectPoolConfig poolConfig =new GenericObjectPoolConfig();
poolConfig.setMaxTotal(20);
poolConfig.setMaxIdle(5);
// 池对象
JedisPool jedisPool=new JedisPool(poolConfig, "localhost", 6379,2000,"123456");
// 从池里面获取yoghurtedis对象
Jedis jedis = jedisPool.getResource();
jedis.lpush("list3","a","d","c");
SortingParams sortingParams=new SortingParams();
sortingParams.alpha();
List<String> list3 = jedis.sort("list3", sortingParams);
System.err.println(list3);
}
// 事务
@Test
public void transtion()throws Exception{
// 配置对象
GenericObjectPoolConfig poolConfig =new GenericObjectPoolConfig();
poolConfig.setMaxTotal(20);
poolConfig.setMaxIdle(5);
// 池对象
JedisPool jedisPool=new JedisPool(poolConfig, "localhost", 6379,2000,"123456");
// 从池里面获取yoghurtedis对象
Jedis jedis = jedisPool.getResource();
jedis.flushDB();
// 开启事务
Transaction multi = jedis.multi();
multi.set("name", "kd");
multi.set("age", "18");
multi.incr("age");
multi.incr("name");
// 执行
List<Object> exec = multi.exec();
for (Object o : exec) {
// 是不是Exception
if(o instanceof Exception){
System.err.println(o);
}
}
}
}