新版博客SEO优化基本完成,新老博客内容正在整合中,保证每篇文章高质量。 SiteMap RSS Github
Redis学习记录(一)
嘉美伯爵   2019年8月4日 22:09   数据库   redis   272  

Redis 安装

centos7安装redis

Redis五种数据类型

  • string (字符串)
  • list (列表)
  • set (集合)
  • hash (哈希)
  • zset (有序集合)

注意点

  • ttl key 查看过期时间
  • redis五大基本类均支持过期时间,对象级别的过期,只能对key进行设置

string

字符串即基本的key-value形式,key唯一,如果你不想覆盖value使用setnx(利用redis锁机制,如果存在该key,则不会被创建)来创建string,否则使用set或mset,用途存储验证码,过期自动删除

# 设置单个键值对
set age 18 
ok

# 设置多个键值对
mset name gage age 20
ok

# 获取value
127.0.0.1:6379[6]> get name
"fovegage"

# 批量获取value
127.0.0.1:6379[6]> MGET name age
1) "fovegage"
2) "20"

# 删除key
del name
ok

# 查看key是否存在
127.0.0.1:6379[6]> EXISTS name
(integer) 1

# 设置过期(setex = set code + expire code 5)
127.0.0.1:6379[6]> SETEX code 10 628182
OK
127.0.0.1:6379[6]> get code
"628182"
127.0.0.1:6379[6]> get code
(nil)

# 不覆盖值((integer) 0 ---> 未创建成功)
127.0.0.1:6379[6]> SETNX sex man
(integer) 1
127.0.0.1:6379[6]> SETNX sex man
(integer) 0

# 自增(9223372036854775807 ---> 最大值)
127.0.0.1:6379[6]> set x 1
OK
127.0.0.1:6379[6]> INCR x
(integer) 2
127.0.0.1:6379[6]> INCR x
(integer) 3

# step自增
127.0.0.1:6379[6]> INCRBY age 10
(integer) 30
127.0.0.1:6379[6]> INCRBY age -10
(integer) 20

# 对于stenx(已经存在该key,不可创建,可以使用set修改,如果使用expire,set修改后expire将自动过期)
127.0.0.1:6379[6]> SETNX year 2019
(integer) 1
127.0.0.1:6379[6]> SETNX year 2019
(integer) 0

list

redis列表采用链接存储,有栈和队列两种形式,我们通常用作异步队列,redis中l表示头,r表示尾;这里应该清楚链式结构中的栈和队列是可以转化的,右进左出即为队列,右进右出即为栈。这里的时间复杂度插入的时候为o(1),遍历的时候为o(n)。

# 存入链表
rpush books python go ruby
ok

# 不建议用,链接会循环一遍,复杂度为o(n)
127.0.0.1:6379[6]> LRANGE books 0 -1
1) "python"
2) "go"
3) "ruby"

# 获取链表长度
llen 长度

# 队列(由于链表创建的时候为rpush(右进),lpop的时候自动转换为队列)
lpop books

# 栈(由于链表创建的时候为rpush(右进),rpop的时候自动转换为栈)
rpop books

# 获取单个元素,全部遍历,复杂度o(n)
lindex books 1

# 获取所有元素,和Python slice用法一致
127.0.0.1:6379[6]> LRANGE books 0 -1
1) "python"
2) "go"
3) "ruby"

# 元素截取,ltrim的之外的元素将被删除
127.0.0.1:6379[6]> LTRIM books 1 -1
OK
127.0.0.1:6379[6]> LRANGE books 0 -1
1) "go"
2) "ruby"

# 获取长度
127.0.0.1:6379[6]> LLEN books
(integer) 3

hash (即数组和链表下挂)

我们常用hash来存储用户的信息,(hset usee:1 name "gage" age 25)

# 创建(也可以用hmset)
127.0.0.1:6379[6]> hset subject c "hello wrold"
(integer) 1

# 批量创建
hmset books python "cookbook" c "hello wrold"
(integer) 2

# 获取
hget books python

# 获取所有(field,value交替展示)
127.0.0.1:6379[6]> HGETALL subject
1) "python"
2) "cookbook"
3) "java"
4) "think"
5) "c"
6) "hello wrold"

# 长度
127.0.0.1:6379[6]> HLEN subject
(integer) 3

# 整形数据自增
127.0.0.1:6379[6]> hset user:1 name gage age 24
(integer) 2
127.0.0.1:6379[6]> HINCRBY user:1 age 1
(integer) 25

set 集合

对于set,我们通常用来进行存储用户的抽奖信息,因为她是无序且不可重复的。

# 不可重复添加(保证不可重复)
127.0.0.1:6379[6]> SADD books python java golang
(integer) 3
127.0.0.1:6379[6]> SADD books python
(integer) 0

# 取出全部
127.0.0.1:6379[6]> SMEMBERS books
1) "java"
2) "golang"
3) "python"

# 查询是否存在,不存在返回0,操作失败也返回0
127.0.0.1:6379[6]> SISMEMBER books python
(integer) 1

# 获取长度
127.0.0.1:6379[6]> SCARD books
(integer) 3

# 随机弹出一个,因为无序,所以随机
127.0.0.1:6379[6]> SPOP books
"golang"

zset 有序集合

数据结构{zadd books score value},常用来存储粉丝列表,score存储关注时间,value存储用户id

# 创建
127.0.0.1:6379[6]> ZADD books 9.3 "python cookbook"
(integer) 1
127.0.0.1:6379[6]> ZADD books 9.9 "flent python"
(integer) 1
127.0.0.1:6379[6]> ZADD books 9.1 "python scrapy"
(integer) 1

# 按照score排序,默认升序(zrevrange降序)
127.0.0.1:6379[6]> ZRANGE books 0 -1
1) "python scrapy"
2) "python cookbook"
3) "flent python"

# 范围排序
127.0.0.1:6379[6]> ZRANGEBYSCORE books 0 9.2
1) "python scrapy"

# 范围排序,键值对展示
127.0.0.1:6379[6]> ZRANGEBYSCORE books 0 9.2 withscores
1) "python scrapy"
2) "9.0999999999999996"

# 获取长度
zcard books 
(integer) 3

# 获取score值
127.0.0.1:6379[6]> ZSCORE books "python cookbook"
"9.3000000000000007"

# 获取member的排名,从0开始
127.0.0.1:6379[6]> ZRANK books "python cookbook"
(integer) 1

# 删除元素
127.0.0.1:6379[6]> ZREM books "flent python"
(integer) 1
127.0.0.1:6379[6]> ZRANGE books 0 -1
1) "python scrapy"
2) "python cookbook"