Redis-数据类型(重新查资料)

一、数据类型

Redis支持五种数据类型:
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)

二、String(字符串)

2.1、简介

  1. string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
  2. string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
  3. string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
  4. 常用命令:set、get、decr、incr、mget等。
  5. 注意:一个键最大能存储512MB。

2.2、字符串操作

2.2.1、set

  1. set存储的数据都是字符类型
192.168.4.51:6351> set a 1
OK
192.168.4.51:6351> get a
"1"
192.168.4.51:6351> type a
string
  1. 设置key及值
    EX表示以秒为单位,PX表示以毫秒为单位。
    NX存储变量时,变量不存在则赋值,存在则放弃赋值。
    XX存储变量时,默认覆盖。
192.168.4.51:6351> SET key value [EX seconds] [PX milliseconds] [NX|XX]

2.2.2、setrange

用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从指定的偏移量开始。0表示由第一位开始。1表示第二位,以此类推。

192.168.4.51:6351> set b ABCDEFG
OK
192.168.4.51:6351> get b
"ABCDEFG"
192.168.4.51:6351> SETRANGE b 0 abcd
(integer) 7
192.168.4.51:6351> get b
"abcdEFG"

2.2.3、strlen

统计字符串长度

192.168.4.51:6351> set c 12345678
OK
192.168.4.51:6351> STRLEN c
(integer) 8

2.2.4、append

存在则追加,不存在则创建key以及value,返回key长度

192.168.4.51:6351> set d 123
OK
192.168.4.51:6351> get d
"123"
192.168.4.51:6351> APPEND d 123
(integer) 6
192.168.4.51:6351> get d
"123123"

192.168.4.51:6351> APPEND e 123456
(integer) 6
192.168.4.51:6351> get e
"123456"

2.2.5、setbit

  • SETBIT key offset value
    对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
    位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。
    当 key 不存在时,自动生成一个新的字符串值。
    字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。
    offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。
  • 设置bit的值为a
    a的ASCll码是97,转换为二进制位01100001
192.168.4.51:6351> set bit a
OK
192.168.4.51:6351> get bit
"a"
  • 把bit的值由a修改为b
    b的ASCII码是98,二进制为01100010
    就是将 01100001 变成 01100010
192.168.4.51:6351> setbit bit 6 1 
(integer) 0
192.168.4.51:6351> setbit bit 7 0
(integer) 1
192.168.4.51:6351> get bit 
"b"

2.2.6、bitcount

统计字符串的二级制码中,有多少个’1’

192.168.4.51:6351> bitcount bit
(integer) 3

2.2.7、decr和decrby

  • decr
    将key中的值减一,key不存在则先初始化为0,再减1
192.168.4.51:6351> set test1 10
OK
192.168.4.51:6351> get test1
"10"
192.168.4.51:6351> decr test1
(integer) 9
192.168.4.51:6351> get test1
"9"
  • decrby
    decrby key decrment
    将key中的值,减去decrment
192.168.4.51:6351> set test2 100
OK
192.168.4.51:6351> DECRBY test2 99
(integer) 1
192.168.4.51:6351> get test2
"1"

2.2.8、getrange

返回字符串中的子字符串,截取范围为start和end
负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符。

192.168.4.51:6351> set test3 abcdefgh
OK
192.168.4.51:6351> GETRANGE test3 -3 -1
"fgh"
192.168.4.51:6351> GETRANGE test3 -6 -2
"cdefg"

2.2.9、incr和incrby

整数计数器

  • incr
    将key的值加1,如果key不存在,则初始化为0后再加1
    主要应用为计数器
192.168.4.51:6351> set level 168
OK
192.168.4.51:6351> INCR level
(integer) 169
192.168.4.51:6351> get level
"169"
  • incrby
    将key的值增加increment
192.168.4.51:6351> INCRBY level 20
(integer) 189
192.168.4.51:6351> get level
"189"

2.2.10、incrbyfloat

小数计数器

192.168.4.51:6351> INCRBYFLOAT level 11.11
"200.11"
192.168.4.51:6351> get level
"200.11"

2.2.11、mget

获取多个key值,空格分隔,具有原子性

192.168.4.51:6351> mget a b c d e
1) "1"
2) "abcdEFG"
3) "12345678"
4) "123123"
5) "123456"

2.2.12、mset

设置多个key值,空格分隔,具有原子性

192.168.4.51:6351> mset aa 1 bb 2 cc 3 dd 4
OK
192.168.4.51:6351> get aa bb  cc dd
(error) ERR wrong number of arguments for 'get' command
192.168.4.51:6351> mget aa bb  cc dd
1) "1"
2) "2"
3) "3"
4) "4"

三、Hash(哈希)

3.1、简介

Redis hash 是一个键值(key=>value)对集合;是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个 hash 可以存储 232 -1 键值对(40多亿)。
常用命令:hget、hset、hgetall等。
应用场景:存储一些结构化的数据,比如用户的昵称、年龄、性别、积分等,存储一个用户信息对象数据。

3.2、操作

3.2.1、hset和hget

插入和输出

192.168.4.51:6351> 
192.168.4.51:6351> hset site baidu www.baidu.com
(integer) 1
192.168.4.51:6351> hset site jingdong www.jd.com
(integer) 1
192.168.4.51:6351> type site
hash
192.168.4.51:6351> hget site  baidu
"www.baidu.com"
192.168.4.51:6351> hget site  jingdong
"www.jd.com"

3.2.2、hmset和hmget

多个表赋值、和输出

192.168.4.51:6351> hmset site1 taobao  www.taobao.com  google www.google.com
OK
192.168.4.51:6351> hmget site1 taobao google
1) "www.taobao.com"
2) "www.google.com"

3.2.3、hkeys

返回hash表中石油filed名称

192.168.4.51:6351> hkeys site
1) "baidu"
2) "jingdong"
192.168.4.51:6351> hkeys site1
1) "taobao"
2) "google"

3.2.4、hgetall

返回hash表中所有field的值

192.168.4.51:6351> hgetall site
1) "baidu"
2) "www.baidu.com"
3) "jingdong"
4) "www.jd.com"
192.168.4.51:6351> hgetall site1
1) "taobao"
2) "www.taobao.com"
3) "google"
4) "www.google.com"

3.2.5、hvals

返回hash表中所有filed的值

192.168.4.51:6351> hvals site
1) "www.baidu.com"
2) "www.jd.com"
192.168.4.51:6351> hvals site1
1) "www.taobao.com"
2) "www.google.com"

3.2.6、hdel

删除hash表中多个filed的值,不存在则忽略

192.168.4.51:6351> hdel site1 taobao
(integer) 1
192.168.4.51:6351> hgetall site1
1) "google"
2) "www.google.com"

四、List(列表)

4.1、简介

  • 一个变量可以存储多个值
  • 先进后出
    先输入的字符,最后输出
  1. Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  2. list类型经常会被用于消息队列的服务,以完成多程序之间的消息交换。
  3. 常用命令:lpush、rpush、lpop、rpop、lrange等。
  4. 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

4.2、列表操作

4.2.1、lpush

将一个或多个值value插入到列表key的表头
key不存在,则创建key
key存在时,继续插入,不覆盖

192.168.4.51:6351> LPUSH list a b c d e f g
(integer) 7
192.168.4.51:6351> type list
list

4.2.2、lrange

从开始位置读取key值到stop结束
先进后出原则

192.168.4.51:6351> LRANGE list 0 -1	//从开始读到结束
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"

4.2.3、lpop

移除并返回列表头元素数据,key不存在则返回nil

192.168.4.51:6351> LPOP list 
"4"
192.168.4.51:6351> LPOP list 
"3"
192.168.4.51:6351> LRANGE list 0 -1
1) "2"
2) "1"
3) "g"
4) "f"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"

4.2.4、llen

返回列表key长度

192.168.4.51:6351> LLEN list
(integer) 9

4.2.5、lindex

返回列表中第index个值

192.168.4.51:6351> LINDEX list 2
"g"
192.168.4.51:6351> LINDEX list 5
"d"

4.2.6、lset

将key中的index位置的值修改为value

192.168.4.51:6351> lset list 3  list3
OK
192.168.4.51:6351> LRANGE list 0 -1
1) "2"
2) "1"
3) "g"
4) "list3"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"

4.2.7、rpush

将value插入到key的末尾

192.168.4.51:6351> LPUSH list2 a b c 
(integer) 3
192.168.4.51:6351> RPUSH list2 d
(integer) 4
192.168.4.51:6351> LRANGE list2 0 -1
1) "c"
2) "b"
3) "a"
4) "d"

4.2.8、rpop

删除并返回key末尾的值

192.168.4.51:6351> rpop list2 
"d"

五、Set(集合)

Redis的Set是string类型的无序集合。和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

应用场景:

  1. 利用交集求共同好友。
  2. 利用唯一性,可以统计访问网站的所有独立IP。
  3. 好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。
    常用命令:sadd、spop、smembers、sunion等。
    集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
    zset(sorted set:有序集合)
    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

sorted set是插入有序的,即自动排序。

常用命令:zadd、zrange、zrem、zcard等。

当你需要一个有序的并且不重复的集合列表时,那么可以选择sorted set数据结构。

应用举例:

(1)例如存储全班同学的成绩,其集合value可以是同学的学号,而score就可以是成绩。
(2)排行榜应用,根据得分列出topN的用户等。

猜你喜欢

转载自blog.csdn.net/weixin_40136446/article/details/105293516