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;  删除一个指定的命令  

    

原文地址:https://www.cnblogs.com/xp0813/p/11831141.html