一. Redis 的五种数据类型
- string 字符串
- hash 哈希
- list 列表
- set 集合
- zset sorted set:有序集合
二. string 类型
- string 是redis最基本的类型,你可以理解成与Memcache一模一样的类型,一个key对应一个value。
- string类型是二进制安全的。redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
- string 类型是Redis 最基本的数据类型,string 类型的值最大能存储512MB。
实例:
[root@localhost ~]# redis-cli -h 12.0.0.26 -p 6379
12.0.0.26:6379> set name zhangsan
OK
12.0.0.26:6379> get name
"zhangsan"
12.0.0.26:6379>
三. Hash (哈希字典)类型
- Redis hash 是一个键值(key=>value)对集合
- Redis hash 是一个 string 类型的filed 和value 的映射表,hash特别适合用于存储对象
- 每个hash可以存储2的32次方-1 键值对
作用场景:
键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值
示例:
[root@localhost ~]# redis-cli -h 12.0.0.26 -p 6379 --raw
12.0.0.26:6379> hmset stu name lisi age 18 sex 男
OK
12.0.0.26:6379> hget stu name
"lisi"
12.0.0.26:6379> hget stu age
"18"
12.0.0.26:6379> hget stu sex
男
注意:–raw 识别中文,解决中文乱码问题
四. list (列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 列表最多可以存储2的32次方-1 元素
作用场景
增删快,提供了操作某一段元素的API 1. 最新消息排行等功能(比如朋友圈的时间线) 2.消息队列
12.0.0.26:6379> lpush hobby play
1
12.0.0.26:6379> lpush hobby read
2
12.0.0.26:6379> lpush hobby sport
3
12.0.0.26:6379> lrange hobby 0 10
sport
read
play
12.0.0.26:6379> lpush hobby read
4
12.0.0.26:6379> lrange hobby 0 10
read
sport
read
play
注意:先加入的值会放在最前面被先提取,堆栈概念
五. set (集合)
- Redis 的 Set 是 String 类型的无序集合
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)
- set 集合不能有重复数据,当输入重复数据时会返回0值,表示无法存储
- 作用场景:
- 共同好友
- 利用唯一性,统计访问网站的所有独立IP
- 好友推荐时,根据tag求交集,大于某个阈值就可以推荐
sadd 命令
添加一个string 元素到key 对应的set 集合中,成功就返回1,如果元素已经在集合中返回0
示例:
12.0.0.26:6379> sadd color red green yellow
3
12.0.0.26:6379> smembers color
red
yellow
green
12.0.0.26:6379> sadd color red
0
12.0.0.26:6379>
六. zset (sorted set:有序集合)
- Redis zset 和set 一样也是string类型元素的集合,且不允许重复的成员
- 不同的是每个元素都会关联一个double类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序
- zset 的成员是唯一的,但分数(score)却可以重复
- 按照分数,进行排序及去重
- 作用场景
将set 中的元素增加一个权重参数score,元素按score 有序排列
- 数据插入集合时,已经进行天然排序
- 排行榜
- 带权重的消息队列
zadd命令
添加元素到集合,元素在集合中存在则更新对应score
示例
12.0.0.26:6379> zadd color 0 red
1
12.0.0.26:6379> zadd color 0 blue
1
12.0.0.26:6379> zadd color 1 red
0
12.0.0.26:6379> zadd color 1 green
1
12.0.0.26:6379> zadd color 0.5 white
1
12.0.0.26:6379> ZRANGEBYSCORE color 0 10
blue
white
green
red
注意:分数为double 型,已经输入的属性的score 可以被改变
七. 多数据库概念
- Redis 支持多个数据库,并且每个数据库的数据是隔离不能共享,并且基于单机才有多数据库,如果是集群就没有多数据库的概念
- Redis 是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典
- 客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系型数据库实例中可以创建多个数据库类型。所以可以将其中的每个字典理解成一个独立的数据库
- 每个数据库对外都是从0开始的递增数字命名。Redis默认支持16个数据库。(可以通过配置文件支持更多,无上限)
- 可以通过配置文件databases来修改这一个数字,客户端与Redis建立连接后会自动选择0号数据库
- 不过可以随时使用select命令更换数据库,如果选择1号数据库:
示例:
12.0.0.26:6379> select 1
OK
12.0.0.26:6379[1]> set name zhangsan
OK
12.0.0.26:6379[1]> select 2
OK
12.0.0.26:6379[2]> set name zhangsan
OK
清空所有数据库数据
12.0.0.26:6379[2]> flushall
OK
12.0.0.26:6379[2]> get name
12.0.0.26:6379[2]> select 1
OK
12.0.0.26:6379[1]> get name
**key 常规管理**
//验证key是否存在 exists
12.0.0.26:6379> set name zhangsan
OK
12.0.0.26:6379> exists name
1
12.0.0.26:6379> exists names
0
**重命名 rename**
12.0.0.26:6379> rename name na
OK
12.0.0.26:6379> get na
zhangsan
**设置超时时间 pexpire (单位:毫秒)**
12.0.0.26:6379> pexpire na 3000
1
12.0.0.26:6379> get na
zhangsan
12.0.0.26:6379> get na
12.0.0.26:6379> set name zhangsan
OK
12.0.0.26:6379> PEXPIRE name 50000
1
**查看剩余时间 PTTL (单位毫秒)**
12.0.0.26:6379> pttl name
45615
12.0.0.26:6379> get name
zhangsan
**取消超时时间**
12.0.0.26:6379> persist name
1
12.0.0.26:6379> pttl name
-1
12.0.0.26:6379> get name
zhangsan
**查看类型 type**
12.0.0.26:6379> LPUSH color red blue
2
12.0.0.26:6379> type color
list
12.0.0.26:6379> set name zhangsan
OK
12.0.0.26:6379> type name
string
**随机返回key RANDOMKEY**
12.0.0.26:6379> MSET age 18 score 88 sex boy
OK
12.0.0.26:6379> RANDOMKEY
sex
12.0.0.26:6379> RANDOMKEY
color
12.0.0.26:6379> RANDOMKEY
sex
12.0.0.26:6379> RANDOMKEY
sex
12.0.0.26:6379> RANDOMKEY
age
**查看所有key**
12.0.0.26:6379> keys *
score
color
name
age
sex
**数据迁移数据库 move**
12.0.0.26:6379> move age 1
1
12.0.0.26:6379> select 1
OK
12.0.0.26:6379[1]> get age
18