美文网首页
redis基础(五大基本数据类型)

redis基础(五大基本数据类型)

作者: 小名源治 | 来源:发表于2022-10-11 17:02 被阅读0次

    redis中文网站

    1.基本命令

    #我的redis是放在容器里面的,所以要先进入容器
    #进入redis的docker容器
    docker exec -it redis bash
    
    #启动redis
    redis-cli -p 6379
    
    #更换redis数据库(redis有16个数据库[0-15])
    select 2
    
    #查询redis所有key
    keys *
    
    #清空当前数据库
    flushdb
    #清空全部数据库
    fiushall
    
    #新增加一个键值对(键:name,值:lihua)
    set name lihua
    #通过键查看值
    get name
    #查看这个键是否存在(存在输出1,不存在输出0)
    exists name
    #将当前数据库的键值对移动到其他数据库
    move name 2 #将当前键值对移动到2号数据库
    
    #设置键值对过期时间(单位秒)
    expire name 10
    #查看键值对剩余存在时间(-2表示当前键值对不存在)
    ttl name
    
    #查看当前数据是什么类型
    type name
    
    

    2.redis是单线程的

    Redis是很快的,官方表示, Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所有就使用了单线程了!

    Redis为什么单线程还这么快?

    1、误区1∶高性能的服务器一定是多线程的?
    2、误区2︰多线程(CPU上下文会切换!)一定比单线程效率高!
    CPU>内存>硬盘的速度
    redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换︰增加耗时 ),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存一样的情况下,单线程就是最佳的方案!

    3.redis五大基本数据类型

    String(字符串)

    这里直接贴狂神老师的笔记截图
    操作String字符串

    image.png

    增加浏览量使用的方法,自增自减

    image.png

    String.substring() 截取改变字符串

    image.png

    setex 创建并设置过期时间
    setnx 当前key不存在才会创建

    image.png

    批量get和set (mset mget)

    image.png

    getset先获取再设置,一般用于更新操作

    image.png

    List列表

    小结

    • list实际上是一个链表,before Node after , left, right 都可以插入值
    • 如果key不存在,则创建新的链表
    • 如果key存在,新增内容
    • 如果移除了所有值,空链表,也代表不存在
    • 在两边插入或者改动值,效率最高!修改中间元素,效率相对较低
    • list的命令一般是l开头

    lpush将值插入到列表头部
    rpush将值插入到列表头部
    lrange查询列表中的值
    lpop 移除头部元素
    rpop 移除尾部元素

    127.0.0.1:6379[1]> lpush list 1 #向list列表头部添加一个数字
    (integer) 1
    127.0.0.1:6379[1]> lpush list 2
    (integer) 2
    127.0.0.1:6379[1]> lpush list 3
    (integer) 3
    127.0.0.1:6379[1]> lrange list 0 -1 #输出整个list列表
    1) "3"
    2) "2"
    3) "1"
    127.0.0.1:6379[1]> lrange list 0 1
    1) "3"
    2) "2"
    127.0.0.1:6379[1]> rpush list 4  #向list列表尾部添加一个数字
    (integer) 4
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "4"
    ###############################################
    127.0.0.1:6379[1]> lpop list #移除头部(第一个)元素
    "3"
    127.0.0.1:6379[1]> rpop list #移除尾部(最后一个)元素
    "4"
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "2"
    2) "1"
    127.0.0.1:6379[1]> 
    
    

    ltrim 修剪;list 截断!

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379[1]> ltrim list 1 2  #截取list中下标为1 2的长度,list已经被改变
    OK
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "3"
    2) "2"
    127.0.0.1:6379[1]> 
    

    Llen返回列表长度

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "3"
    2) "2"
    127.0.0.1:6379[1]> llen list
    (integer) 2
    127.0.0.1:6379[1]> 
    

    lrem移除指定的值(Java中的trmi方法)

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "4"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379[1]> lrem list 1 2 #移除list集合中指定个数的value,精确匹配(移除一个2)
    (integer) 1
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "4"
    2) "4"
    3) "3"
    4) "1"
    127.0.0.1:6379[1]> lrem list 2 4 # 移除两个4
    (integer) 2
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "3"
    2) "1"
    127.0.0.1:6379[1]> 
    

    rpoplpush移除列表中最后一个元素,并将它移动到新的一个列表中

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379[1]> rpoplpush list copylist #移除列表中最后一个元素,并将它移动到新的一个列表中
    "1"
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    127.0.0.1:6379[1]> lrange copylist 0 -1
    1) "1"
    127.0.0.1:6379[1]> 
    

    lset替换列表中指定下标的值(更新操作)

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    127.0.0.1:6379[1]> lset list 0 9 #替换列表中指定下标的值
    OK
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "9"
    2) "4"
    3) "3"
    4) "2"
    127.0.0.1:6379[1]> lset list 7 9 #替换的位置不存在,或者列表不存在就会报错
    (error) ERR index out of range
    127.0.0.1:6379[1]> 
    

    linsert将值插入到列表中某个位置的前面或者后面

    127.0.0.1:6379[1]> lrange list 0 -1
    1) "9"
    2) "4"
    3) "3"
    4) "2"
    127.0.0.1:6379[1]> linsert list before 9 99 #插入到列表中某个位置的前面
    (integer) 5
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "99"
    2) "9"
    3) "4"
    4) "3"
    5) "2"
    127.0.0.1:6379[1]> linsert list after 9 09 #插入到列表中某个位置的后面
    (integer) 6
    127.0.0.1:6379[1]> lrange list 0 -1
    1) "99"
    2) "9"
    3) "09"
    4) "4"
    5) "3"
    6) "2"
    

    set(集合)

    小结

    • set中的值不能重复
    • set的命令一般是s开头
    • set是无序不重复集合(可以用做抽奖)

    sadd新建一个set并且向其尾部添加元素
    SMEMBERS 查看整个set集合
    SISMEMBER 检查某个元素是否在集合中

    127.0.0.1:6379[1]> sadd set 2 4 6 #新建一个set并且向其尾部添加元素
    (integer) 3
    127.0.0.1:6379[1]> SMEMBERS set #查看整个set集合
    1) "2"
    2) "4"
    3) "6"
    127.0.0.1:6379[1]> SISMEMBER set 2 # 检查某个元素是否在集合中,在返回1,不在返回0
    (integer) 1
    127.0.0.1:6379[1]> SISMEMBER set 1
    (integer) 0
    

    scard获取set集合中的内容元素个数
    srem移除集合中指定的元素
    **spop随机移除一个元素

    127.0.0.1:6379[1]> SMEMBERS set
    1) "2"
    2) "4"
    3) "6"
    127.0.0.1:6379[1]> scard set #获取set集合中的内容元素个数
    (integer) 3
    127.0.0.1:6379[1]> srem set 2 #移除集合中指定的元素
    (integer) 1
    127.0.0.1:6379[1]> SMEMBERS set
    1) "4"
    2) "6"
    
    127.0.0.1:6379[1]> SMEMBERS set
    1) "0"
    2) "4"
    3) "6"
    127.0.0.1:6379[1]> spop set #随机移除一个元素
    "6"
    127.0.0.1:6379[1]> SMEMBERS set
    1) "0"
    2) "4"
    127.0.0.1:6379[1]> 
    
    

    随机抽出一个元素

    #set是无序不重复集合(可以用做抽奖)
    127.0.0.1:6379[1]> SMEMBERS set
    1) "0"
    2) "4"
    3) "6"
    127.0.0.1:6379[1]> SRANDMEMBER set  #随机抽出集合中的一个元素
    "4"
    127.0.0.1:6379[1]> SRANDMEMBER set
    "0"
    127.0.0.1:6379[1]> SRANDMEMBER set
    "6"
    127.0.0.1:6379[1]> SRANDMEMBER set
    "0"
    127.0.0.1:6379[1]> SRANDMEMBER set 2  #随机抽出集合中指定个数个元素
    1) "6"
    2) "0"
    

    移动一个指定的值到另外一个set集合中

    127.0.0.1:6379[1]> SMEMBERS set
    1) "0"
    2) "4"
    127.0.0.1:6379[1]>  smove set copyset 0 #移动一个指定的值到另外一个set集合中
    (integer) 1
    127.0.0.1:6379[1]> SMEMBERS set
    1) "4"
    127.0.0.1:6379[1]> SMEMBERS copyset
    1) "0"
    

    数学集合: SUNION交集,SINTER并集,SDIFF差集 --用来查找共同关注
    六度分割理论

    127.0.0.1:6379[1]> SMEMBERS set1
    1) "3"
    2) "4"
    3) "5"
    4) "6"
    127.0.0.1:6379[1]> SMEMBERS set2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379[1]> SDIFF set1 set2 #差集
    1) "5"
    2) "6"
    127.0.0.1:6379[1]> SINTER set1 set2 #交集 共同好友就可以这样实现
    1) "3"
    2) "4"
    127.0.0.1:6379[1]> SUNION set1 set2 #并集
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    

    Hash(哈希)

    小结

    • 相当于一个map集合,数据结构key-map集合 == key-<key-value>;
      它实际上和String没有太大的区别,只是value是一个map集合!
    • 所有的Hash命令是以h开头的
    • hash更适合对象的存储,String更适合字符串的存储
    127.0.0.1:6379[1]> hset hash set a #set一个具体的值key-value
    (integer) 1
    127.0.0.1:6379[1]> hget hash set  #获取一个字段的值
    "a"
    127.0.0.1:6379[1]> hmset hash set1 b set2 c #set多个值key-value
    OK
    127.0.0.1:6379[1]> hmget hash set1 set2 ##获取多个字段的值
    1) "b"
    2) "c"
    127.0.0.1:6379[1]> hgetall hash #获取当前hash中所有字段的值,以键值对的形式输出
    1) "set"
    2) "a"
    3) "set1"
    4) "b"
    5) "set2"
    6) "c"
    
    127.0.0.1:6379[1]> hdel hash set #删除指定的字段的值,删除key后对应的value就没有了
    (integer) 1
    127.0.0.1:6379[1]> hgetall hash
    1) "set1"
    2) "b"
    3) "set2"
    4) "c"
    

    hlen获取哈希表的字段数量
    HEXISTS判断哈希中某个字段是否存在

    127.0.0.1:6379[1]> hgetall hash
    1) "set1"
    2) "b"
    3) "set2"
    4) "c"
    127.0.0.1:6379[1]> hlen hash #获取字段数量
    (integer) 2
    127.0.0.1:6379[1]> HEXISTS hash set1 #判断哈希中某个字段是否存在,存在返回1,不存在返回0
    (integer) 1
    127.0.0.1:6379[1]> HEXISTS hash set 
    (integer) 0
    

    hkeys 获取所有的field(字段)
    hvals 获取所有的value(值)

    127.0.0.1:6379[1]> hgetall hash
    1) "set1"
    2) "b"
    3) "set2"
    4) "c"
    127.0.0.1:6379[1]> hkeys hash # 获取所有的field(字段)
    1) "set1"
    2) "set2"
    127.0.0.1:6379[1]> hvals hash #获取所有的value(值)
    1) "b"
    2) "c"
    

    HINCRBY 指定增量进行增加

    127.0.0.1:6379[1]> hset hash set3 4  #将当前值设置为4
    (integer) 1
    127.0.0.1:6379[1]> HINCRBY hash set3 1 #在4的基础上增加1
    (integer) 5
    127.0.0.1:6379[1]> hget hash set3
    "5"
    

    Zset有序集合

    小结

    • 在set的基础上怎加了一个值,set:set key value zset:zset key score value
    • zset可以应用在排行榜上面
    127.0.0.1:6379[1]> zadd zset 1 a #添加一个值
    (integer) 1
    127.0.0.1:6379[1]> zadd zset 2 b 3 c #添加多个值
    (integer) 2
    127.0.0.1:6379[1]> zrange zset 0 -1 #查看所有值
    1) "a"
    2) "b"
    3) "c"
    

    zrangebyscore升序排序(zrange 是输出整个集合的命令 by 是通过 score是分数)
    ZREVRANGE降序排序

    127.0.0.1:6379[1]> zadd wages 2000 zhang
    (integer) 1
    127.0.0.1:6379[1]> zadd wages 3922 lihua
    (integer) 1
    127.0.0.1:6379[1]> zadd wages 10000 baihui
    (integer) 1
    127.0.0.1:6379[1]> zadd wages 1000 dapao
    (integer) 1
    #以上是添加数据
    127.0.0.1:6379[1]> zrangebyscore wages -inf +inf #查询数据并且通过score升序排列   排列规则是从小到大( -inf负无穷 +inf正无穷 )
    1) "dapao"
    2) "zhang"
    3) "lihua"
    4) "baihui"
    127.0.0.1:6379[1]> ZREVRANGE wages 0 -1 #查询数据 降序排序
    1) "taohui"
    2) "dapao"
    3) "zhang"
    127.0.0.1:6379[1]> ZREVRANGE wages 0 -1 withscores
    1) "taohui"
    2) "30000"
    3) "dapao"
    4) "10000"
    5) "zhang"
    6) "2000"
    ###############升序排列按照键值对的形式 输出
    127.0.0.1:6379[1]> zrangebyscore wages -inf +inf withscores
    1) "dapao"
    2) "1000"
    3) "zhang"
    4) "2000"
    5) "lihua"
    6) "3922"
    7) "baihui"
    8) "10000"
    

    zrem移除zset中的元素
    ZCARD获取指定集合中的个数

    127.0.0.1:6379[1]> zrange wages 0 -1
    1) "lihua"
    2) "zhang"
    3) "dapao"
    4) "taohui"
    127.0.0.1:6379[1]> zrem wages lihua #移除有序集合中的指定元素
    (integer) 1
    127.0.0.1:6379[1]> zrange wages 0 -1
    1) "zhang"
    2) "dapao"
    3) "taohui"
    127.0.0.1:6379[1]> ZCARD wages
    (integer) 3
    

    zcount获取指定区间的成员数量

    127.0.0.1:6379[1]> zrange wages 0 -1 withscores
    1) "zhang"
    2) "2000"
    3) "dapao"
    4) "10000"
    5) "taohui"
    6) "30000"
    127.0.0.1:6379[1]> zcount wages 10000 50000 #获取指定区间的成员数量
    (integer) 2
    

    相关文章

      网友评论

          本文标题:redis基础(五大基本数据类型)

          本文链接:https://www.haomeiwen.com/subject/turzartx.html