Redis 3.Redis数据类型

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/hgx_suiyuesusu/article/details/84981091

Redis

@Author:hanguixian
@Email:[email protected]

三 Redis数据类型

1 Redis的五大数据类型

1.1 string(字符串)

  • string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
  • string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
  • string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

1.2 hash(哈希,类似java里的Map)

  • Redis hash 是一个键值对集合。
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似Java里面的Map<String,Object>

1.3 List(列表)

  • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
  • 它的底层实际是个链表

1.4 Set(集合)

  • Redis的Set是string类型的无序集合。它是通过HashTable实现实现的

1.5 zset(sorted set:有序集合)

  • Redis的zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数。
  • redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

2 常见数据类型操作命令

官网:http://redisdoc.com/

redis命令

3 Redis 键(key)

3.1 常用命令

  • keys *
  • exists key的名字,判断某个key是否存在
  • move key db —>当前库就没有了,被移除了
  • expire key 秒钟:为给定的key设置过期时间
  • ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
  • type key 查看你的key是什么类型
  • 详情参考:http://redisdoc.com/key/index.html

3.2 示例

[root@xxxmmm bin]# redis-server /hanguixian/myredis/redis.conf 
14897:C 27 Nov 2018 17:32:46.353 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14897:C 27 Nov 2018 17:32:46.353 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=14897, just started
14897:C 27 Nov 2018 17:32:46.353 # Configuration loaded
[root@xxxmmm bin]# redis-cli 
127.0.0.1:6379> FLUSHDB 
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> KEYS *
1) "k1"
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k2
(integer) 0
127.0.0.1:6379> move k1 2
(integer) 1
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> KEYS *
1) "k1"
127.0.0.1:6379[2]> SELECT 0
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set k02 v02
OK
127.0.0.1:6379> KEYS *
1) "k02"
127.0.0.1:6379> EXPIRE k02 10
(integer) 1
127.0.0.1:6379> ttl k02
(integer) 2
127.0.0.1:6379> ttl k02
(integer) 0
127.0.0.1:6379> EXPIRE k02 10
(integer) 0
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k03 v03 
OK
127.0.0.1:6379> type k03
string
127.0.0.1:6379> type v03
none
127.0.0.1:6379> type set01
set
127.0.0.1:6379> ttl set01
(integer) -1

4 Redis字符串(String)

  • 单值单value

4.1 常用命令

  • set/get/del/append/strlen
    • set:将字符串值 value 关联到 key
    • get:返回 key 所关联的字符串值。
    • del:删除给定的一个或多个 key 。不存在的 key 会被忽略。
    • append:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
    • strlen:返回 key 所储存的字符串值的长度。
  • Incr/decr/incrby/decrby,一定要是数字才能进行加减
    • Incr:将 key 中储存的数字值增一。
    • decr:将 key 中储存的数字值减一。
    • incrby:将 key 所储存的值加上增量 increment
    • decrby:将 key 所储存的值减去减量 decrement
  • getrange/setrange
    • getrange:返回 key 中字符串值的子字符串,字符串的截取范围由 startend 两个偏移量决定(包括 startend 在内)。
    • setrange:用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。
  • setex(set with expire)键秒值/setnx(set if not exist)
    • setex:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
    • setnx:将 key 的值设为 value ,当且仅当 key 不存在。
  • mset/mget/msetnx
    • mset:同时设置一个或多个 key-value 对。
    • mget:返回所有(一个或多个)给定 key 的值。
    • msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
  • getset(先get再set)
    • 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
  • 详情参考:http://redisdoc.com/string/index.html

4.2 示例

[root@xxxmmm bin]# redis-server /hanguixian/myredis/redis.conf 
15038:C 27 Nov 2018 19:49:09.640 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
15038:C 27 Nov 2018 19:49:09.640 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=15038, just started
15038:C 27 Nov 2018 19:49:09.640 # Configuration loaded
[root@xxxmmm bin]# redis-cli 
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> append k1 aaaaaa
(integer) 8
127.0.0.1:6379> get k1
"v1aaaaaa"
127.0.0.1:6379> STRLEN k1
(integer) 8
127.0.0.1:6379> INCR k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set int01 1
OK
127.0.0.1:6379> INCR int01
(integer) 2
127.0.0.1:6379> INCR int01
(integer) 3
127.0.0.1:6379> INCRBY int01 20
(integer) 23
127.0.0.1:6379> getrange k1 1 5 
"1aaaa"
127.0.0.1:6379> SETRANGE k1 1 bbb
(integer) 8
127.0.0.1:6379> get k1
"vbbbaaaa"
127.0.0.1:6379> setex k1 10 555555
OK
127.0.0.1:6379> get k1
"555555"
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> mset k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) (nil)
2) "v2"
3) "v3"
127.0.0.1:6379> getset k2 mmmm
"v2"
127.0.0.1:6379> getset k2 uuuu
"mmmm"
127.0.0.1:6379> get k2
"uuuu"

5 Redis列表(List)

  • 单值多value

5.1 常用命令

  • lpush/rpush/lrange
    • lpush:将一个或多个值 value 插入到列表 key 的表头
    • rpush:将一个或多个值 value 插入到列表 key 的表尾(最右边)。
    • lrange:返回列表 key 中指定区间内的元素,区间以偏移量 startstop 指定。
  • lpop/rpop
    • lpop:移除并返回列表 key 的头元素。
    • rpop:移除并返回列表 key 的尾元素。
  • lindex,按照索引下标获得元素(从上到下)
    • 返回列表 key 中,下标为 index 的元素。
  • llen
    • 返回列表 key 的长度。
  • lrem key 删N个value
    • 根据参数 count 的值,移除列表中与参数 value 相等的元素。
  • ltrim key 开始index 结束index,截取指定范围的值后再赋值给key
    • ltrim:截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引
  • rpoplpush 源列表 目的列表
    • 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
  • lset key index value
    • 将列表 key 下标为 index 的元素的值设置为 value
  • linsert key before/after 值1 值2
    • 在list某个已有值的前后再添加具体值
  • 详情参考:http://redisdoc.com/list/index.html

5.2 示例

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> lpush scope a b 1 2
(integer) 4
127.0.0.1:6379> LRANGE scope  0 -1
1) "2"
2) "1"
3) "b"
4) "a"
127.0.0.1:6379> RPOP scope
"a"
127.0.0.1:6379> LRANGE scope  0 -1
1) "2"
2) "1"
3) "b"
127.0.0.1:6379> lindex scope 2
"b"

5.3 性能总结

  • 它是一个字符串链表,left、right都可以插入添加;
  • 如果键不存在,创建新的链表;
  • 如果键已存在,新增内容;
  • 如果值全移除,对应的键也就消失了。
  • 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

6 Redis集合(Set)

  • 单值多value

6.1 常用命令

  • sadd/smembers/sismember
    • sadd:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
    • smembers:返回集合 key 中的所有成员。
    • sismember:判断 member 元素是否集合 key 的成员。
  • scard,获取集合里面的元素个数
  • srem key value 删除集合中元素
    • 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
  • srandmember key 某个整数(随机出几个数)
    • 从set集合里面随机取出2个
    • 如果超过最大数量就全部取出
    • 如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。
  • spop key 随机出栈
  • smove key1 key2 在key1里某个值:作用是将key1里的某个值赋给key2
    • SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。
  • 数学集合类
    • 差集:sdiff
      • 返回一个集合的全部成员,该集合是所有给定集合之间的差集。
    • 交集:sinter
      • 返回一个集合的全部成员,该集合是所有给定集合的交集。
    • 并集:sunion
      • 返回一个集合的全部成员,该集合是所有给定集合的并集。
  • 详情参考:http://redisdoc.com/set/index.html

6.2 示例

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> sadd cc 1 2 3 n n d 1
(integer) 5
127.0.0.1:6379> SMEMBERS cc
1) "2"
2) "n"
3) "3"
4) "d"
5) "1"
127.0.0.1:6379> scard cc
(integer) 5

7 Redis哈希(Hash)

  • KV模式不变,但V是一个键值对

7.1 常用命令

  • hset/hget/hmset/hmget/hgetall/hdel
    • hset:HSET key field value
      • 将哈希表 key 中的域 field 的值设为 value
    • hget:HGET key field
      • 返回哈希表 key 中给定域 field 的值。
    • hmset:HMSET key field value [field value …]
      • 同时将多个 field-value (域-值)对设置到哈希表 key 中。
    • hmget:HMGET key field [field …]
      • 返回哈希表 key 中,一个或多个给定域的值。
    • hgetall:HGETALL key
      • 返回哈希表 key 中,所有的域和值。
    • hdel:HDEL key field [field …]
      • 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
  • hlen
    • HLEN key
    • 返回哈希表 key 中域的数量。
  • hexists key 在key里面的某个值的key
    • HEXISTS key field
    • 查看哈希表 key 中,给定域 field 是否存在。
  • hkeys/hvals
    • hkeys:HKEYS key
      • 返回哈希表 key 中的所有域
    • hvals:HVALS key
      • 返回哈希表 key 中所有域的值。
  • hincrby/hincrbyfloat
    • hincrby:HINCRBY key field increment
      • 为哈希表 key 中的域 field 的值加上增量 increment
    • hincrbyfloat:HINCRBY key field increment
      • 为哈希表 key 中的域 field 的值加上增量 increment
  • hsetnx
    • HSETNX key field value
    • 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
  • 详情参考:http://redisdoc.com/hash/index.html

7.2 示例

[root@xxxmmm bin]# redis-cli 
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> hset englishBook price 100
(integer) 1
127.0.0.1:6379> hget englishBook price
"100"
127.0.0.1:6379> hmset englishBook name youtube1 master 89
OK
127.0.0.1:6379> hmget englishBook name master
1) "youtube1"
2) "89"
127.0.0.1:6379> HGETALL englishBook
1) "price"
2) "100"
3) "name"
4) "youtube1"
5) "master"
6) "89"
127.0.0.1:6379> HEXISTS englishBook name
(integer) 1
127.0.0.1:6379> HEXISTS englishBook name1
(integer) 0
127.0.0.1:6379> HKEYS englishBook
1) "price"
2) "name"
3) "master"
127.0.0.1:6379> HVALS englishBook
1) "100"
2) "youtube1"
3) "89"

8 Redis有序集合Zset(sorted set)

8.1 常用命令

  • zadd/zrange
    • zadd:ZADD key score member [[score member][score member] …]
      • 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
    • zrange:ZRANGE key start stop [WITHSCORES]
      • 返回有序集 key 中,指定区间内的成员。
  • zrangebyscore key 开始score 结束score
    • ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
    • 返回有序集 key 中,所有 score 值介于 minmax 之间(包括等于 minmax )的成员。有序集成员按 score 值递增(从小到大)次序排列。
  • 详情参考:http://redisdoc.com/sorted_set/index.html

8.2 示例

127.0.0.1:6379> zadd student 100 lili 90 limei 70 lili
(integer) 2
127.0.0.1:6379> ZRANGE student 0 -1
1) "lili"
2) "limei"
127.0.0.1:6379> ZRANGE student 0 -1 WITHSCORES
1) "lili"
2) "70"
3) "limei"
4) "90"

猜你喜欢

转载自blog.csdn.net/hgx_suiyuesusu/article/details/84981091
今日推荐