非关系数据库redis

概念:redis是一款高性能的NOSQL系列的非关系型数据库

命令操作:

        1.redis的数据结构:

                redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

                        value的数据结构:

                                1、字符串类型:string

                                2、哈希类型:hash:map格式

                                3、列表格式:list:linkeslist格式,支持重复元素

                               4、集合类型:set:不允许重复元素

                               5、有序集合类型:sortedset:不允许重复元素,且元素排序

        2、字符串类型:string

                1、存储:set key value

                2、获取:get key

                3、删除:del key

        3、哈希类型:hash

                1.存储:hset key field value

                        例如:hset 1 username shangsan

                                    hset 1 password 1234

                2、获取:hgetall key:获取key所有的field和value

                        例如:hgetall 1

                                        1) "username"
                                        2) "shangsan"
                                        3) "password"
                                        4) "1234"

                        hget key field:获取指定的field对应的值

                                例如:hget 1 username

                                        "shangsan"

                3、删除:hdel key field [field ...]

                                例如:hdel 1 username

        4、列表类型:list:可以添加一个元素到列表的头部(左边)或尾部(右边)

                1、添加:rpush key value [value ...]:将元素加入列表右边

                                lpush key value [value ...]:将元素加入列表左表

                                例如:rpush age 1 2 3

                                           rpush age "12"

                                        1) "12"
                                        2) "1"
                                        3) "2"
                                        4) "3"

                2、获取:lrange key start stop:范围获取

                                lrange age 0 -1:获取此列表所有值

                3、删除:lpop key:从列表最左边移除一个元素,并将元素返回

                                rpop key:从列表最右边一处一个元素,并将元素返回

        5、集合类型:set:不允许重复元素

                1、存储:sadd key member [member ...]

                2、获取:smembers key:获取set集合中所有元素

                3、删除:srem name member [member ...]:通过特指删除set集合中的某个元素

        6、有序集合类型:sortedset:不允许重复元素,且元素有顺序

                1、存储:zadd key score member [score member ...]:根据score排序,score是数字。

                2、获取:zrange key start stop

                3、删除:zrem key member [member ...]

        7、通用命令:

                1、keys *:查询所有的键

                2、type key:获取键对应的value的类型

                3、del key:删除指定的key value

持久化

        1、redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

        2.redis持久化机制:

                1、RDB:默认方式,不需要进行配置,默认就使用这种机制(容易丢失一些数据)

                        在一定的时间间隔中,检测key的变化情况,然后持久化数据

                        1、编辑redis.windows.conf文件

                                #   after 900 sec (15 min) if at least 1 key changed

                                #   after 300 sec (5 min) if at least 10 keys changed

                                #   after 60 sec if at least 10000 keys changed

                                save 900 1

                                save 300 10

                                save 60 10000

                        2、重新启动redis服务器,并指定配置文件名称:使用cmd进入redis目录,输入redis-server.exe redis.windows.conf。

                                D:\app\Redis-x64-5.0.14.1>redis-server.exe redis.windows.conf

                2、AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后持久化数据(对性能影响较严重)

                        编辑redis.windows.conf文件。

                                appendonly yes:开启aof,默认是no.

                                # appendfsync always:每一次操作都进行持久化

                                appendfsync everysec:每个一秒进行一次持久化

                                # appendfsync no:不进行持久化

Jedis:通过Java来操作redis数据库的工具

1、导入jar包

        maven依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

2、操作各种resis中的数据结构

public class JedisTest {
    static Jedis jedis;
    static{
        jedis=new Jedis("localhost",6379);
    }
//String
@Test
    public void test1(){
        jedis.setex("username",20,"liweier");
        jedis.set("username","liweier");
        System.out.println(jedis.get("username"));
        jedis.del("username");
        jedis.close();
    }
//    hash
    @Test
    public void test2(){
        jedis.hset("company", "beijing", "12");
        System.out.println(jedis.hget("company", "beijing"));
        Map<String, String> company = jedis.hgetAll("company");
        for (String s:company.keySet())
            System.out.println(s+":"+company.get(s));
        jedis.close();
    }
//    list
    @Test
    public void test3(){
        jedis.lpush("place1", "beijing","shanghai","chongqin");
        List<String> company = jedis.lrange("place1", 0, -1);
        System.out.println(company);
        System.out.println(jedis.rpop("place1"));
        System.out.println(jedis.lrange("place1", 0, -1));
        jedis.del("place1");
        jedis.close();
    }
//    set
    @Test
    public void test4(){
        jedis.sadd("place1","beijing","shanghai","chongqin");
        Set<String> place1 = jedis.smembers("place1");
        System.out.println(place1);
        jedis.srem("place1","shanghai");
        System.out.println(jedis.smembers("place1"));
        jedis.del("place1");
        jedis.close();
    }
//    sotedset
    @Test
    public void test5(){
        Map<String,Double> map=new HashMap<>();
        map.put("beijing", 3.0);
        map.put("shanghai", 1.0);
        map.put("chongqin", 4.0);
        for(String s:map.keySet())
            System.out.println(s + " " + map.get(s));
        jedis.zadd("place1",map);
        Set<String> place1 = jedis.zrange("place1", 0, -1);
        System.out.println(place1);
        jedis.zrem("place1","shanghai");
        System.out.println(jedis.zrange("place1", 0, -1));
        jedis.del("place1");
        jedis.close();
    }
}

3、Jedis数据库连接池

jedis.properties

#Reids地址
host=127.0.0.1
#Reids服务器端口
port=6379

#连接池最大连接数
maxTotal=200
#最大空闲连接数
maxIdle=200
#最小空闲连接数
minIdle=10
#当连接池连接用尽后,调用者的最大等待时间(单位:ms)。如果超过此时间将接到异常。设为-1表示无限制。
maxWaitMillis=1000
#在向连接池借用连接是否先做连接有效验证(ping),无效连接会被移除,高并发下建议关闭,因为验证会额外消耗时间
testOnBorrow=true
#向连接池归还连接时是否做连接有效验证,无效连接会被移除
testOnReturn=true
#空闲连接的检测周期(单位为毫秒)。-1表示不检测
timeBetweenEvictionRunsMillis=30000
#连接池中连接的最小空闲时间(单位为毫秒),达到此值后空闲资源将被移除。
minEvictableIdleTimeMillis=180000
#做空闲资源检测时,每次检测资源的个数。-1就是对所有连接做空闲监测
numTestsPerEvictionRun=-1

​​​​​​​数据库连接池工具类:

public class JedisUtil {
    private static JedisPool jedisPool;
    static{
        try {
            Properties properties=new Properties();
            InputStream resourceStream = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
            properties.load(resourceStream);
            GenericObjectPoolConfig config=new GenericObjectPoolConfig();
            config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
            config.setMinIdle(Integer.parseInt(properties.getProperty("minIdle")));
            jedisPool=new JedisPool(config, properties.getProperty("host"), Integer.parseInt(properties.getProperty("port")));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Jedis getResource(){
        return jedisPool.getResource();
    }
}

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值