Redis简介
NoSql
NoSql(Not Only SQL)非关系型数据库
非关系型数据库
Redis Hbase Mongodb
关系型数据库
MySql Oracle SQLserver
Redis的优势
数据保存在内存,存取速度快,并发能力强
数据持久化,可以保存在磁盘中
支持多种语言
支持数据过期
Redis的数据结构
Redis 主要key-value结构形式存储
String List Set Hash
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
set key value ex 时间 设置值时并设置过期时间
expire key xx 设置key的过期时间(xx秒后过期)
ttl key 查看key的过期时间
flushall 清空整个redis服务器数据,所有的数据库全部清空
flushdb 清除当前库,redis中默认有16个数据库,名称分别为0-15
select index 进入第?个库
对list集合的操作
lpush key value 将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush key value 将一个或多个值 value 插入到列表 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 的元素
ltrim 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 执行所有事务块内的命令
discard 取消事务,放弃执行事务块内的所有命令
弱事务:日志
强事务:同时成功 同时失败--金融数据
订阅/发布
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息
PUBLISH channel message 将信息 message 发送到指定的频道 channel
Sort 排序
Jedis
简单操作
//简单连接
@Test
public void test1() throws Exception {
Jedis jedis = new Jedis();
jedis.auth("123456");
jedis.set("name", "zc");
System.err.println(jedis.get("name"));
jedis.close();
}
连接池操作
//连接池
@Test
public void testPool() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(10);
//最大空闲时间
config.setMaxIdle(2);
//超时最大等待时间
config.setMaxWaitMillis(1*1000);
config.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379,5000,"123456");
Jedis jedis = jedisPool.getResource();
jedis.set("name", "周程");
System.err.println(jedis.get("name"));
jedis.close();
}
Sort排序
//sort排序
@Test
public void test2() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(10);
//最大空闲时间
config.setMaxIdle(2);
//超时最大等待时间
config.setMaxWaitMillis(1*1000);
config.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379,5000,"123456");
Jedis jedis = jedisPool.getResource();
jedis.lpush("num", "7","1","4","9","8","3","2");
SortingParams sortingParams = new SortingParams();
sortingParams.desc();
System.err.println(jedis.sort("num",sortingParams));
jedis.close();
}
事务
//事务
@Test
public void test3() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(10);
//最大空闲时间
config.setMaxIdle(2);
//超时最大等待时间
config.setMaxWaitMillis(1*1000);
config.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379,5000,"123456");
Jedis jedis = jedisPool.getResource();
jedis.flushDB();
jedis.set("name", "周程");
jedis.set("age","3");
System.err.println("姓名"+jedis.get("name"));
System.err.println("年龄"+jedis.get("age"));
//开启事务
Transaction multi = jedis.multi();
multi.incr("name");
multi.incr("age");
//提交事务
List<Object> exec = multi.exec();
for (Object o : exec) {
if (o instanceof Exception){
System.err.println(o);
}
}
jedis.close();
}
redis的持久化策略
aof 日志
rdb 文件(默认开启)
淘汰策略
volatile-ttl 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
allkeys-lru 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
大部分使用最少使用的数据淘汰