zoukankan      html  css  js  c++  java
  • Redis基本数据类型

    Redis数据类型

    #查找错误日志
    $ docker logs myredis 
    #使用docker开启容器后,进入容器执行redis客户端
    $ docker exec -it myredis redis-cli
    #开启容器后,进入redis-benchmark 是一个压力测试工具  进行测试
    $ docker exec -ti  24d68d(容器id) redis-benchmark
    

    image-20210314151448459

    数据存储类型

    存储类型 代表
    字符串类型 string
    列表类型 list
    散列类型 hash
    集合类型 set
    有序集合类型 sorted_set

    字符串类型 string

    • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型;
    • 存储数据的格式:一个存储空间保存一个数据;
    • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用;
    # 添加/修改数据 set key value
    $ set name wmj
    # 获取数据 get key
    $ get name
    # 判断当前的key是否存在
    $ exists name
    # 设置key的过期时间,单位是秒
    $ expire name 20
    # 查看当前key的剩余时间
    $ ttl name
    # 查看当前key的一个类型!
    $ type age
    # 删除数据 del key
    $ del name
    # 添加/修改多个数据 mset key1 value1 key2 value2 …  Multiple
    $ mset age 10 address 河南
    # 获取多个数据 mget key1 key2 …
    $ mget age address
    # 获取数据字符个数(字符串长度)strlen key
    $ strlen name
    # 追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append key value
    $ append name pf
    ###################################### 
    #  设置数值数据增加指定范围的值  incr key 执行原子的加1操作
    $ set number 5
    # 5+1   自增1  
    $ incr number
    # incrby key increment 将key对应的数字加decrement  
    # 6+4  设置步长  指定增量
    $ incrby number 4
    # incrbyfloat key increment  指定浮点数key来增长浮点数(存放于string中)的值
    # 10+0.1
    $ incrbyfloat number 0.1
    # 设置数值数据减少指定范围的值 
    # decr key
    # decrby key increment
    $ set number1 5
    $ decr number1
    $ decrby number1 3
    ###################################### 
    # 字符串范围 range  获取name 从0到2  共3位
    $ getrange name 0 2
    # 替换 从1的位置开始替换  wmj -->  wmm
    $ setrange name 1 ww 
    ###################################### 
    # setex (set with expire) 设置过期时间 
    # setnx (set if not exist) 如果不存在则设置 存在则设置失败 (在分布式锁中会常常使用!)
    # 设置过期时间  key1 20秒后过期
    $ setex key1 20 "hello"  
    # 如果不存在student 则设置为1001 存在则设置失败 
    $ setnx student 1001
    # 使用redis实现分布式锁
    https://www.jianshu.com/p/c970cc71070b
    $ getset db redis
    null
    $ getset db mysql
    "redis"
    

    运行结果

    • string 类型数据操作的注意事项

      • 数据操作不成功的反馈与数据正常操作之间的差异

        ① 表示运行结果是否成功

        • (integer) 0 → false 失败
        • (integer) 1 → true 成功

        ② 表示运行结果值

        • (integer) 3 → 3 3个

        • (integer) 1 → 1 1个

      • 数据未获取到

        • (nil)等同于null
      • 数据最大存储量

        • 512MB
      • 数值计算最大范围(java中的long的最大值)

        • 9223372036854775807

    list类型

    • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
    • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
    • list类型:保存多个数据,底层使用双向链表存储结构实现
    # 添加/修改数据
    # lpush key value1 [value2] ……  由左向右进  后入的在头部  
    # rpush key value1 [value2] ……  由尾部一个一个进去   后入的在最后
    $ lpush mylist a b c
    $ lrange mylist 0 -1
    $ rpush mylist d e f
    # 结果  "c" "b" "a" "hello" "world" "d" "e" "f"
    # 获取数据  
    # lrange key start stop   
    # lindex key index  根据索引取值  0-列表的长度   最后一个是-1  以此类推
    # llen key 得到长度
    $ lindex mylist 0
    $ llen mylist
    # 获取并移除数据 
    # lpop key  获取列表第一个数据并移除 左到右
    # rpop key  最后一个数据并移除
    $ lpop mylist
    $ rpop mylist
    # 规定时间内获取并移除数据
    # blpop key1 [key2] timeout
    # brpop key1 [key2] timeout
    # brpoplpush source destination timeout
    # 移除指定数据
    # lrem key count value
    $ lrem mylist 1 d
    $ lrem mylist -1 a 
    

    set 类型

    • 新的存储需求:存储大量的数据,在查询方面提供更高的效率
    • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
    • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的。
    #添加数据 添加一个或多个指定的member元素到集合的 key中  sadd key member1 [member2]
    $ sadd myset hello world
    #获取全部数据 smembers key 
    $ smembers myset
    #删除数据 srem key member1 [member2]
    $ sadd myset one two three
    $ srem myset one
    #获取集合数据总量 scard key
    $ scard myset
    #判断集合中是否包含指定数据 sismember key member
    $ sismember myset two
    #随机获取集合中指定数量的数据 srandmember key [count]
    #随机返回一个
    $ srandmember myset
    #返回指定数量的值
    $ srandmember myset 4
    #随机获取集合中的某个数据并将该数据移出集合 spop key [count]
    $ spop myset
    #将一个指定的值,移动到另外一个set集合! 将myset集合中的hello值移到myset2集合中
    $ smove myset myset2 hello
    
    #set 类型数据的扩展操作
    #求两个集合的交、并、差集
    #sinter key1 [key2] 
    $ sadd set1  a b c
    $ sadd set2 b c d
    $ sinter set1 set2
    #sunion key1 [key2]
    $ sunion set1 set2
    #sdiff key1 [key2]
    $ sdiff set1 set2
    #求两个集合的交、并、差集并存储到指定集合中 
    #sinterstore destination key1 [key2]   存到deinter
    $ sinterstore deinter set1 set2
    #sunionstore destination key1 [key2] 
    $ sunionstore deunion set1 set2
    #sdiffstore destination key1 [key2] 
    $ sdiffstore dediff set1 set2
    $ smembers deinter
    $ smembers deunion
    $ smembers dediff
    #将指定数据从原始集合中移动到目标集合中 smove source destination member
    $ sadd set3 0ne two
    $ sadd set4 three
    $ smove set3 set4 two
    

    hash 类型

    • 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
    • 需要的存储结构:一个存储空间保存多个键值对数据
    • hash类型:底层使用哈希表结构实现数据存储
    # 添加/修改数据 hset key field value
    $ hset people name wmj
    $ hset people age 24
    # 获取数据 hget key field
    # hgetall key
    $ hget people name
    $ hgetall people
    # 删除数据 hdel key field1 [field2]
    $ hdel people sex
    # 添加/修改多个数据 hmset key field1 value1 field2 value2 … 
    $ hmset student id 1001 name zhangsan age 18
    # 获取多个数据 hmget key field1 field2 … 
    $ hmget student id name age
    # 获取哈希表中字段的数量 hlen key
    $ hlen student
    # 获取哈希表中是否存在指定的字段 hexists key field
    $ hexists student age
    # 获取哈希表中所有的字段名或字段值  hkeys key  hvals key
    $ hkeys student
    $ hvals student
    # 设置指定字段的数值数据增加指定范围的值 
    # hincrby key field increment    hincrbyfloat key field increment
    $ hincrby people age 2
    

    sorted_set 类型

    • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
    • 需要的存储结构:新的存储模型,可以保存可排序的数据
    • sorted_set类型:在set的存储结构基础上添加可排序字段
    #添加数据 zadd key score1 member1 [score2 member2]
    $ zadd zset 1 one
    $ zadd zset 1 uno
    $ zadd zset 2 two
    $ zadd zset 3 three
    #获取全部数据 zrange key start stop [WITHSCORES]
    $ zrange zset 0 -1 withscores
    #zrevrange key start stop [WITHSCORES]  按递减的方式进行排列
    $ zrevrange zset 0 -1 withscores
    #删除数据 zrem key member [member ...]
    $ zrem zset uno
    #按条件获取数据 
    #zrangebyscore key min max [WITHSCORES] [LIMIT]
    $ zrangebyscore zset 1 2 
    #zrevrangebyscore key max min [WITHSCORES]
    $ zrevrangebyscore zset 2 1
    #条件删除数据
    #zremrangebyrank key start stop 按照索引
    $ zadd zset 4 four 5 five 6 six 7 seven
    $ zrange zset 0 -1 withscores
    #删除第6位和第7位  索引从0开始  要删除第6位和7位 写5-6 
    $ zremrangebyrank zset 5 6
    #zremrangebyscore key min max  score值介于min和max之间
    $ zremrangebyscore zset 4 5
    #获取集合数据总量
    #zcard key 返回key的有序集元素个数。
    $ zcard zset
    #zcount key min max 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)
    $ zcount zset 1 3
    #集合交、并操作
    #zinterstore destination numkeys key [key ...]  numkeys:key的个数
    #zunionstore destination numkeys key [key ...]
    #获取数据对应的索引(排名)
    #zrank key member 拿到数据为one的排名
    $ zrank zset one
    #zrevrank key member  返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。排名以0为底,也就是说,score值最大的成员排名为0。
    $ zrevrank zset one
    #score值获取与修改
    #zscore key member  返回有序集key中,成员member的score值
    $ zscore zset one
    #zincrby key increment member 为有序集key的成员member的score值加上增量increment。
    $ zincrby zset 2 one
    

    原创不易,欢迎转载,转载时请注明出处,谢谢!
    作者:潇~萧下
    原文链接:https://www.cnblogs.com/manongxiao/p/14594964.html

  • 相关阅读:
    文学、哲学段子
    文学、哲学段子
    js技术要点---JS 获取网页源代码
    泛型类,泛型方法,泛型委托的定义方法
    数组元素的逆序数
    stm32 ARM中的RO、RW和ZI DATA
    poj 3040 Allowance 贪心
    schedule()函数的调用时机(周期性调度)
    以JTextPanel为例Swing的鼠标事件详解
    实习生面试总结
  • 原文地址:https://www.cnblogs.com/manongxiao/p/14594964.html
Copyright © 2011-2022 走看看