黑马程序员技术交流社区

标题: 【石家庄校区】Redis--非关系型数据库 [打印本页]

作者: heifachangcun    时间: 2019-1-11 14:41
标题: 【石家庄校区】Redis--非关系型数据库
本帖最后由 小石姐姐 于 2019-1-17 09:57 编辑

redis
        关闭
                Ctrl+c
        默认端口:
                6379
                //查看redis服务器进程列表
                tasklist /svc | findStr "redis"
                //查看端口为6379的链接
                netstat -ano | findStr "6379"

        数据不经常发生改变的情况下可以使用缓存

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

                功能:用于数据缓存

                特点:
                        1.数据之间没有关联关系
                        2.数据存储在内存中
                        3.查询速度快(缓存)
                        4.成本低
                        5.存储格式固定,key  value
                        6.独立性高
                缺点:
                        1.没有统一标准,学习成本高
                        2.一般非关系型数据库不支持事务处理(redis支持)
                        3.只能存一些不经常发生改变的数据(作为关系型数据库的补充)

                tip:一般会将数据存储在关系型数据库中,在非关系型数据库中备份存储关系型数据库


        下载安装
                直接解压安装包即可使用
                        .conf :配置文件
                        cli.exe:客户端
                        server.exe:服务器
                        注:客户端和服务器端都需要开启,先开服务器
        命令操作
                数据结构
                        1.redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
                                value的数据结构
                                        1.字符串      String
                                        2.哈希类型    hash:map格式
                                        3.列表类型(数据存储可重复有序)    list:linkedlist格式
                                        4.集合类型(数据存储不可重复,无序)    set
                                        5.有序集合(数据存储不可重复,有序)    sortedset

                命令:
                        1.字符串
                                存储:
                                        set key value
                                获取
                                        get key
                                删除
                                        del key
                        2.哈希类型
                                存储
                                        hset map名称 field(map集合内的key的名) value

                                获取
                                        hget map名称 field  获取指定键对应的field对应的值
                                        hgetall map名称  获取所有键和值
                                删除
                                        hdel map名称 field
                        3.列表类型:可以添加一个元素到列表的头部或者尾部
                                存储
                                        从列表左边添加元素:
                                                lpush list名称 value
                                        从列表右边添加元素:
                                                rpush list名称 value
                                获取
                                        lrange list名称 start end  范围获取

                                删除
                                        lpop list名称 : 删除列表最左边的元素,并将被删除的元素返回
                                        rpop list名称 : 删除列表最右边的元素,并将被删除的元素返回
                        4.集合类型
                                存储
                                        sadd set名称 value
                                获取
                                        smembers  set名称 --> 获取set集合中所有元素
                                删除
                                        srem set名称 value  删除set集合中的某个元素
                        5.有序集合(用于排行榜)
                                存储
                                        zadd sortedset名称 score(权重) value
                                                score用于排序,影响存储先后顺序

                                获取
                                        zrange sortedset名称 start end
                                                在语法后加上withscores可查看分数
                                删除
                                        zrem sortedset名称 value

                        6.通用命令
                                1.keys * :查询所有的键名
                                2.type key :获取键对应的value对应的类型
                                3.del key(集合或列表的名字) :删除指定的key value
        持久化操作
                概念:
                        当redis服务器重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中

                持久化机制

                        RDB:默认的
                                不需要进行配置,默认就使用这种机制
                                        在一定的间隔时间中,检测key的变化情况,然后持久化数据
                                使用:
                                        1.编辑redis.windows.conf文件
                                                save 900 1     在900秒后至少有1个key发生改变,就会持久化一次
                                                save 300 10           在300秒后至少有10个key发生改变,就会持久化        一次
                                                save 60 10000  在60秒后至少有10000个key发生改变,就会持久化一次
                                        2.重新启动服务器,并指定配置文件名称
                                                点击文件地址栏cmd --> redis-server.exe --> 配置文件名

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

        使用Java客户端jedis操作redis
                概念:
                        一款Java操作redis数据库的工具
                使用步骤
                        1.下载jedis的jar包
                        2.使用
                                获取连接(地址,端口号)
                                        Jedis jedis = new Jedis(地址,端口号);
                                                如果不输入参数,默认是本机的地址和端口号,建议输入
                                操作
                                        jedis.命令/方法
                                关闭连接
                                        jedis.close
                jedis操作各种redis的数据结构
                        jedis.setex(key,时间,value);在设置的时间到了后会把指定的键自动删除
                                设置有效期,redis自动删除

                连接池工具类: JedisPool
                        连接池
                                使用:
                                        1.创建JedisPool连接池对象
                                                JedisPool pool = new JedisPool();
                                        2.调用方法getResource()方法获取Jedis连接
                                                Jedis jedis = jedisPool.getResource();
                                        3.使用        
                                                jedis.命令
                                        4.关闭连接
                                                jedis.close();
                        工具类
                                加载配置文件

        案例:
                缓存优化redis

                数据库的数据一旦发生变化,则需要更新缓存
                        数据库的表执行了增删改的操作,需要将redis缓存数据情况,再次存入
                        在service中的增删改中将redis删除,从新创建缓存

                缓存思路
                        先去缓存中查询数据
                        如果有数据
                                --> 不是第一次查询,直接把缓存查到的结果返回
                        如果没有数据
                                --> 是第一次查询,去dao层执行查询操作接收结果,接收到结果后需要把结果'存到缓存'中(对数据格式进行调整)







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2