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

posted @ 2021-03-29 23:26  潇~萧下  阅读(59)  评论(0编辑  收藏  举报