• redis基础


    一、什么是redis

      redis是一个开源的,内存中的数据结构存储系统,key-value的非关系型数据库,它可以作为数据库,缓存和消息中间件,支持持久化。

    二、redis的安装和卸载

      1.版本为奇数的是不稳定版本。为偶数的是稳定版本。

      2.官网下载redis,也可一在linux中使用wget命令下载;wget -P 存放位置 redis的下载路径。

      3.在linux下进行解压:tar -xvf  redis

      4.通过./redis-server 启动redis,要使用客户端连接redis 不能直接在当前窗口中连接,使用Xshell 重新打开一个窗口,进入到redis目录,运行./redis-cli,输入keys *可以查看

      5.如果想在同一个窗口启动客户端,需要复制(cp 源文件  目标位置) redsi.conf,然后修改redis.conf中的  daemonize  的值为yes(设置redis为守护进程),此时可以通过 redis-server redis.conf启动redis,然后再启动客户端 ./redis-cli

      6.退出redis 可以使用 ps-ef|grep redis  查看redis的端口,然后使用kill 杀死进程 (kill -p 进程id);

      7.卸载:直接删除redis 文件即可   (rm -rf  redis)  强制删除。

    三、redis的数据结构

      1.字符串类型:String  key是字符串类型,value是字符串类型

        启动redis的客户端

          单值缓存

            set key  value

            get key 如果不存在key 则返回nil

            在redis的官方文档中---命令中包含这些命令

          对象缓存

            set user :1  value(json格式数据)    (1是这一条数据的主键,根据响应的条数变换,value是数据库中的一条数据)

            mset user:1:name zhagnsan  user:1:balance 180   (批量存储----将数据库中的一整条数据全部按照键值对的形式存储)

            mget user:1:name  user:1:balance           (批量获取)

          分布式锁:  

            应用场景(比如用户下单某个商品,那该商品对应的库存是不是应该相应的减1呢?一个用户用set没有问题,但是,如果多个用户同时下单,不同的tomcat都去执行set操作,那他们拿到的库存值是一样的,执行减1的操作之后,结果就是多个用户购买商品,库存只减了一次,而用setnx,第一个tomcat在setnx库存的时候,其他tomcat在去设置的时候,就会返回0 ,这样就解决了上述问题,在setnx使用完之后,del 释放一下)

            setnx product:100 true                返回1代表获取锁成功(setnx和set的区别是 setnx发现有key存在的时候,不会更新)

            setnx product:100 true               返回0代表获取锁失败

            del product :100                         执行完业务释放锁

          计数器:

            incr key                      将key中存储的数字值加1                            eg:incr   文章名:阅读量:100(redis是单线程的,能防止并发问题,他会按照访问的先后顺序将他们放到队列中,按顺序执行)

            decr key                     将key中存储的数字值减1

            incrby  key  increment      将key中存储的值加上increment                        

            decrby  key   decrement         将key中存储的值减去 decrement

            

            

      2.哈希:hash

        hash类型设置语法:hset 键 field value;一个键可以有很多个field,很适合存储一个对象

          eg:一个hash存user键,有name和age两个字段:

              hset user name  xxx;

              hset user age xxx;

              hkeys user ;查看这个键有哪些字段

              hlen user ;查看这个键的字段长度

              hget  user name ;获取name的值

            

      3.list

        redis支持list数据结构,底层是一个双向链表,允许重复值存在,按照插入顺序保存,可以使用lpush从左边插入,也可以使用rpush从右边插入。lpop从左边弹出,rpop从右边弹出,从而实现FIFO队列思想(先进先出,从左边插入,右边弹出,插入和弹出方向不同,就可以实现。),插入和弹出方向相同,实现栈的思想

        eg:

          lpush hobbys xxx

          lpush hobbys  yyy

          lpush  hobbys  zzz

          lrange hobbys 0 -1 ;  查看存放的值的个数

          rpop hobbys  (从右边弹出,实现队列思想---先进先出)

          lpop bobbys   (从左边弹出,实现栈的思想 --先进后出)

      4.set

        redsi 的set 是String 类型的无序集合,集合成员是唯一的。这就意味着集合中不能出现重复的数据。

          eg:

            sadd  num 1  插入set集合

            sadd num  2

            sadd num  3

            SMEMBERS num     查看set集合中的数据

            spop num    弹出set集合中的数据(弹出来的值是随机的)

      5.有序集合 :sorted set

        sorted set 是set 的升级,它在set的基础上增加了一个顺序属性。这一属性在修改添加元素的时候可以指定,每次指定后,zset会自动从新按新的值调整顺序。

        eg:

          zadd person 1 xxx  插入 有序结合

          zadd person 2 yyy

          zadd person  3  zzz

          zrange person 0 -1      查看有序集合中的数据(此时会根据分数排序   zrange person 0 -1 withscores  会把值对应的分数值打印出来)

          如果在插入的时候,分数值相同,会根据插入的值进行字典排序

            zadd person  3  sss

            zadd person  3 ddd

            zadd person  3  aaa

            zrange person 0 -1 withscores 9查询的结果是  aaa  3   ddd  3    sss  3

            zrem person  xxx;  删除一个指定的命令  

        

  • 相关阅读:
    不用加减乘除做加法
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    两个链表的第一个公共结点
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    二叉搜索树与双向链表
    复杂链表的复制
  • 原文地址:https://www.cnblogs.com/xp0813/p/11831141.html
Copyright © 2020-2023  润新知