Redis基础学习

Redis

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。是一款NOSQL系列的非关系型数据库

对于key-value的非关系数据库是比较适合做缓存的。那么Redis有什么用。比如当数据库中的某些数据是不经常改变的,这时就可以将这些数据存入到缓存中。当客户端读取数据时,可以直接从缓存中读取。从而减少了对数据库的访问。

Redis做缓存的流程和计算机的缓存差不多。当第一次查询数据时,发现缓存中没有数据,便从数据库读取数据。当从数据库读取到数据之后,将数据存入到redis中。下次读取数据时,便从redis缓存中直接读取

Redis是一个key-value型数据库,value所支持的类型有
1.string类型
2.hashmap类型
3.list类型
4.set类型
5.sortedset类型(有序集合)

环境搭建

http://www.redis.net.cn/ 官网下载
https://github.com/microsoftarchive/redis/releases github下载地址

在这里插入图片描述
redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端
redis-benchmark:Redis性能测试工具
redis-stat:Redis状态检测工具

在这里插入图片描述
服务端窗口
在这里插入图片描述
客户端窗口

命令操作

1.通用命令

keys * 

查询所有的建

type key

获取建所对的值的数据类型

del key

删除指定的key

2.字符串类型

1).存储数据

set key value

key是键名
value是值

2).获取数据

get key value

在这里插入图片描述
3).删除数据

del key

在这里插入图片描述

hashmap类型

1).存储数据

hset key field value

key是键名
field 是map的键名
value是值

2).获取数据

hget key field

获取Map中的某一个键的值

hgetall key   

获取map的所有键和值

在这里插入图片描述
3).删除数据

hdel key field 

删除map中的某一个field
在这里插入图片描述

list类型

可以从列表的头部或者尾部插入或删除
1).插入数据

lpush key value

从左边插入数据

rpush key value

从右边插入数据
在这里插入图片描述
插入时注意不能和之前的其他数据类型的key重复

在这里插入图片描述

2).获取数据

lrange key start end

获取某一范围到某一范围的值,
获取全部start为0,end为0
在这里插入图片描述
3).删除数据

lpop key

删除列表最左边的元素,并将元素返回

rpop key

删除列表最右边的元素,并将元素返回
在这里插入图片描述

set集合

set集合存储数据不允许重复元素
1).存储数据

sadd key value

插入数据到set集合中,若有相同数据不做操作
2).获取数据

smembers key

获取set集合的所有元素
在这里插入图片描述
3).删除数据

srem key value

删除set中的某一个值
在这里插入图片描述

sortedset类型

sortedset是有序集合
每个元素都会关联一个分数,来决定这排序顺序。
redis通过分数进行从小到大排序
1).添加数据

zadd key score value

添加一个数据到sorted set中
score是分数,它决定着排序的顺序。可以重复

2).获取数据

zrange key start end [withscores]

获取start到end范围内的元素

withscores表示是否在查询的时候携带值
在这里插入图片描述
在这里插入图片描述

3).删除数据

zrem key value

在这里插入图片描述

持久化

redis是一个内存数据库,当redis的服务器重启时,数据会丢失
在这里插入图片描述
之前存入的数据全部丢失
所以就需要持久化机制将redis内存中的数据存入硬盘中

redis持久化机制
1.RDB:默认的持久化方式。它的方式是在一定的时间内检测key的变化情况,然后持久化数据到硬盘中
2.AOF:日志记录方式

1.RDB方式

1).编辑redis.windwos.conf

在这里插入图片描述
有三个save
比如save 60 10000 表示着60秒后又10000个key发生变化时会持久化一次

假如更改为
在这里插入图片描述
2).重启redis服务器

打开cmd
在这里插入图片描述
redis-server.exe redis.windows.conf
以配置文件的方式启动服务器
3).存入数据
在这里插入图片描述
在这里插入图片描述
15秒后文件夹下回多出一个dump.rdb文件,这里就存在持久化的数据

4)测试
直接关闭服务器,再直接打开服务器

在客户端查询数据
在这里插入图片描述
获取成功

2.AOF方式

日志记录的方式
可以记录每一条命令的操作
可以每一次命令操作后,持久化数据

1).编辑redis.windwos.conf文件
在这里插入图片描述
appendonly no:关闭aof
appendonly yes :开启aof
更改为yes
在这里插入图片描述
appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
appendfsync no : 不进行持久化

2).重启服务器

打开cmd
redis-server.exe redis.windows.conf
以配置文件的方式启动服务器
在这里插入图片描述
3).存入数据
在这里插入图片描述
在这里插入图片描述
文件夹下会多出一个aof的文件

4).测试
直接关闭服务器,再打开服务器
通过redis-server.exe redis.windows.conf
以配置文件的方式启动服务器

在客户端查询数据
在这里插入图片描述

java使用redis

1).环境搭建
java中使用redis需要导入Jedis的jar包

在这里插入图片描述

2)测试

  @Test
    public void test(){
        Jedis jedis=new Jedis();
        jedis.set("username","kryie");
        jedis.set("password","123");

        String username = jedis.get("username");
        System.out.println(username);
    }

在这里插入图片描述
在这里插入图片描述
java和redis客户端都可以获取到

操作数据

  Jedis jedis=new Jedis();

先创建Jedis对象
操作数据通过Jedis对象调用方法,操作数据的方法和输入命令的命令名一致的

1).操作字符串
  @Test
    public void  testString(){
        Jedis jedis=new Jedis();
        
        jedis.set("username","kryie");
        jedis.set("password","123");

        String username = jedis.get("username");
        System.out.println(username);
		
		jedis.close();
    }

存入指定过期时间可以通过setex()方法

jedis.setex("username",60*60*24,"curry");

第二个参数是过期时间,单位是秒

 jedis.del("username");

删除数据

2).操作hashmap

存入数据和获取数据

 @Test
    public void testHash(){
        Jedis jedis=new Jedis();
        jedis.hset("myhash","name","zhangsan");
        jedis.hset("myhash","age","10");

        String name = jedis.hget("myhash", "name");
        System.out.println(name);
        
		jedis.close();

    }

获取全部

 Map<String, String> myhash = jedis.hgetAll("myhash");
 
 for (String key:myhash.keySet()) {
      System.out.println(myhash.get(key));
}

删除数据

 jedis.hdel("myhash","name");
3)操作list

存入和获取数据

 @Test
    public void testList(){
        Jedis jedis=new Jedis();

        jedis.lpush("mylist","r");
        jedis.lpush("mylist","e");
        jedis.rpush("mylist","y");

        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);

    }

删除数据

       String e1 = jedis.lpop("mylist");
        String e2 = jedis.lpop("mylist");
        String e3 = jedis.rpop("mylist");
4)操作set
 @Test
    public void testSet(){
        Jedis jedis=new Jedis();
        //添加数据
        jedis.sadd("myset","name","lisi");
        jedis.sadd("myset","sex","男");
        //获取数据
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);
        //删除数据
       jedis.srem("myset", "name"));
    }
5).操作sortedset
@Test
    public void testSortedSet(){
        Jedis jedis=new Jedis();
        //添加数据        
        jedis.zadd("mysort",50,"wangwu");
        jedis.zadd("mysort",60,"zhangliu");
        //获取数据
        Set<String> mysort = jedis.zrange("mysort", 0, -1);
        System.out.println(mysort);
        //删除数据
        jedis.zrem("mysort","wangwu");
    }

JedisPool

jedis的连接池

@Test
    public void testJedisPool(){
        //获取连接池
        JedisPool pool=new JedisPool();
        //从连接池获取Jedis
        Jedis jedis = pool.getResource();
		//C存入数据
        jedis.set("username","xiaoming");
		//获取数据
        String username = jedis.get("username");
        System.out.println(username);
        //关闭
         jedis.close();
    }

jedis.close()关闭,将jedis归还到连接池中

配置连接池

JedisPoolConfig config=new JedisPoolConfig();

config.setMaxIdle(10); //最大空闲数
config.setMaxTotal(50);  //最大连接数


JedisPool jedisPool=new JedisPool(config,"localhost",6379);
//指定配置类,主机和端口


JedisPoolConfig连接池的配置类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值