redis入门--基础数据结构篇

概述:

  • redis是key-value的数据结构,每条数据都是⼀个键值对
  • 键的类型是字符串
  • 注意:键不能重复

  • 值得类型有五种:string(字符串),list(列表),hash(字典),set(集合),zset(有序的集合)

数据操作

  • 保存
  • 修改
  • 获取
  • 删除

命令文章链接:http://redis.cn/commands.html

string(字符串)

字符串类型是Redis中最为基础的数据存储类型,内部表示是一个字符数组

它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。

在Redis中字符串类型的Value最多可以容纳的数据长度是512M

保存/获取

如果设置的键不存在则为添加,如果设置的键已经存在则修改

set key value  设置

get key         获取


127.0.0.1:6379> set hometown leshan 
OK
127.0.0.1:6379> get hometown 
"leshan"
127.0.0.1:6379> set hometown chengdu
OK
127.0.0.1:6379> get hometown 
"chengdu"
127.0.0.1:6379>

批量键值对

mset key1 value1 key2 value2 ....   设置
mget key1 key2 .....   获取


127.0.0.1:6379> set name1 onion
OK
127.0.0.1:6379> set name2 tom 
OK
127.0.0.1:6379> mget name1
1) "onion"
127.0.0.1:6379> mget name1 name2 
1) "onion"
2) "tom"
127.0.0.1:6379> mget name1 name2 name3 
1) "onion"
2) "tom"
3) (nil)
127.0.0.1:6379> 
127.0.0.1:6379> mset name1 qqq name2 wwww name3 eeee
OK
127.0.0.1:6379> mget name1 name2 name3 
1) "qqq"
2) "wwww"
3) "eeee"
127.0.0.1:6379> 

设置过期时间

setex key seconds value

127.0.0.1:6379> setex name 5 tina
OK
127.0.0.1:6379> get name 
"tina"
127.0.0.1:6379> get name 
(nil)
127.0.0.1:6379> 

键命令

查找键、判断键是否存在

键查找     keys <pattern>

判断键是否存在   exist <key> 

判断键的类型    type <key> 

删除键   del [key...]

查看生存时间  ttl  <key>

#匹配所有的键
127.0.0.1:6379> KEYS * 
1) "name2"
2) "hometown"
3) "name1"
4) "name3"
#匹配n开头的键
127.0.0.1:6379> keys n*
1) "name2"
2) "name1"
3) "name3"
#判断键是否存在
127.0.0.1:6379> EXISTS hometown 
(integer) 1
127.0.0.1:6379> EXISTS home
(integer) 0
127.0.0.1:6379>
判断键的类型 
127.0.0.1:6379> type name
none
127.0.0.1:6379> type name1
string
127.0.0.1:6379>
#ttl 生存时间
127.0.0.1:6379> setex name 20 tina 
OK
127.0.0.1:6379> 
127.0.0.1:6379> ttl name 
(integer) 16
127.0.0.1:6379> ttl name 
(integer) 15
127.0.0.1:6379> ttl name 
(integer) 14
127.0.0.1:6379> ttl name 

 

hash类型

  • hash⽤于存储对象,对象的结构为属性、值
  • 值的类型为string

设置单个属性      hset key field value

设置多个属性      hmset key field1 value1 field2 value2 ...

获取所有的key    hkeys  key

获取⼀个属性的值  hget key field

获取多个属性的值   hmget key field1 field2 ...

获取所有属性的值    hvals key

删除   

  • 删除整个hash键及值,使⽤del命令
  • 删除属性,属性对应的值会被⼀起删除

  • hdel key field1 field2 ...

#设置单个
127.0.0.1:6379> hset books java "think in java"
(integer) 1
#设置多个
127.0.0.1:6379> HMSET user name onion age 20 hometown "leshan"
OK
#获取所有的key
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
3) "hometown"
#获取属性的值
127.0.0.1:6379> hget user age 
"20"
127.0.0.1:6379> hmget user age hometown 
1) "20"
2) "leshan"
127.0.0.1:6379> 
#获取所有的属性的值
127.0.0.1:6379> HVALS user
1) "onion"
2) "20"
3) "leshan"
#删除
127.0.0.1:6379> hdel user name age 
(integer) 2
127.0.0.1:6379> HVALS user
1) "leshan"
127.0.0.1:6379> 
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> HVALS user
(empty list or set)

 

list类型

  • 列表的元素类型为string
  • 按照插⼊顺序排序
  • 注意它是链表不是数组,意味着插入和删除非常快,时间复杂度O(1),但是查询慢O(n)
  • redis 列表结构常用于做异步队列使用,将需要延后处理的任务结构体序列化成字符串,塞进列表,另一个线程从这个列表中轮询数据进行处理

在左侧插⼊数据   lpush key value1 value2 ...

在右侧插⼊数据   rpush key value1 value2 ...

在指定元素的前或后插⼊新元素   linsert key before或after 现有元素 新元素

获取

  • 返回列表⾥指定范围内的元素

    • start、stop为元素的下标索引
    • 索引从左侧开始,第⼀个元素为0
    • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

           lrange key start stop

设置指定索引位置的元素值

  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素

            lset key index value

删除

  • 删除指定元素

    • 将列表中前count次出现的值为value的元素移除
    • count > 0: 从头往尾移除
    • count < 0: 从尾往头移除
    • count = 0: 移除所有

    lrem key count value

#右进左出:队列
127.0.0.1:6379> RPUSH num 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> LLEN num 
(integer) 5
127.0.0.1:6379> LPOP num 
"1"
127.0.0.1:6379> LPOP num 
"2"
127.0.0.1:6379> LPOP num 
"3"
127.0.0.1:6379> LPOP num 
"4"
127.0.0.1:6379> LPOP num 
"5"
127.0.0.1:6379> 
#左进左出,栈  
127.0.0.1:6379> LPUSH num2 1 2 3 4 
(integer) 4
127.0.0.1:6379> lpop num2 
"4"
127.0.0.1:6379> lpop num2 
"3"
127.0.0.1:6379> lpop num2 
"2"
127.0.0.1:6379> lpop num2 
"1"
127.0.0.1:6379> lpop num2 
(nil)
127.0.0.1:6379> 


127.0.0.1:6379> LPUSH a 1 2 3 4 5 6 7 8 9 0
(integer) 10
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE a 0 -1   #获取所有的元素 O(n)
 1) "0"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
127.0.0.1:6379> ltrim a  4 8   #保留区间里的值 两边都是闭区间[]
OK
127.0.0.1:6379> LRANGE a 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
127.0.0.1:6379>

#删除
127.0.0.1:6379> lpush a2 a b a b a b 
(integer) 6
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
127.0.0.1:6379> lrem a2 -2 b  #从右侧第2个开始删除两个b
(integer) 2
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "a"
4) "a"
127.0.0.1:6379> 

set类型

  • ⽆序集合
  • 元素为string类型
  • 元素具有唯⼀性,不重复  (去重)
  • 说明:对于集合没有修改操作

添加元素   sadd key member1 member2 ...

返回所有的元素     smembers key

删除指定元素    srem key

 

#添加
127.0.0.1:6379> SADD books python java c go 
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> SADD books python java c go 
(integer) 0
#查看
127.0.0.1:6379> SMEMBERS books 
1) "python"
2) "go"
3) "c"
4) "java"
#删除
127.0.0.1:6379> SREM books python 
(integer) 1
127.0.0.1:6379> SMEMBERS books 
1) "go"
2) "c"
3) "java"

 

zset类型(有序集合)

  • sorted set,有序集合
  • 元素为string类型
  • 元素具有唯⼀性,不重复
  • 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
  • 说明:没有修改操作

它是一个set,保证内部value的唯一性,可以为每个value赋予一个score,表示这个value 的排序权重。

内部实现“跳跃表”的数据结构

添加

zadd key score1 member1 score2 member2 ...

127.0.0.1:6379> zadd name 4 tim 5 tom 6 tina 7 onion 
(integer) 4

获取

  • 返回指定范围内的元素
  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

zrange key start stop

  • 返回score值在min和max之间的成员

zrangebyscore key min max

  • 返回成员member的score值

zscore key member

#获取name 中所有的value
127.0.0.1:6379> ZRANGE name 0 -1 
1) "tim"
2) "tom"
3) "tina"
4) "onion"
#获取权重 5-7 的元素值
127.0.0.1:6379> ZRANGEBYSCORE name 5 7 
1) "tom"
2) "tina"
3) "onion"
#获取onion 的权重
127.0.0.1:6379> ZSCORE name onion
"7"

删除

  • 删除指定元素

    zrem key member1 member2 ...

  • 删除权重在指定范围的元素

zremrangebyscore key min max

 

#删除 成员 tom 
127.0.0.1:6379> ZRANGE name 0 4
1) "tim"
2) "tom"
3) "tina"
4) "onion"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> ZREM name tom 
(integer) 1
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
2) "tina"
3) "onion"
#删除去权重在6-7 之间的成员
127.0.0.1:6379> zremrangebyscore name 6 7 
(integer) 2
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
127.0.0.1:6379>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章