Redis

心已入冬 提交于 2019-12-04 06:46:09

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)中挑选最近最少使用的数据淘汰
大部分使用最少使用的数据淘汰
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!