redis基本操作

redis是以键值对存储的,和python中的字典一样

{
  key_1: value_1
   key_2: value_2
}

 然后这个 value部分可以是不同的数据类型

{
    name: heboan,   #字符串
    age: 18,    #整数,可以使用自增功能
    my_books: ['java', 'python', 'php', 'python'],  #列表
    my_schools: {'qinghua', 'beida', 'fudan'},   #集合,没有重复的元素
    body: {'weight': '60kg', 'height': '170cm'}  #哈希,也是键值对
}

 

Redis的字符串以及过期时间操作

> set username heboan   # 设置值
OK
> get username   #获取值
"heboan"
> set sayhi 'hello world'
OK
> get sayhi
"hello world"
值之间有空格,需要用引号引起来
> del username
(integer) 1
> get username
(nil)
127.0.
删除key
#方法1
> set username heboan EX 10  #10秒后过期
OK


#方法2
> setex username 10 heboan
OK

#方法3
> set username heboan
OK
> expire username 10
(integer) 1
设置过期时间

查看当前redis的所有key

> keys *

 

redis的列表操作

> lpush books python php
(integer) 2
> lpush books java
(integer) 3
> lrange books 0 -1  #查看此列表所有元素
1) "java"
2) "php"
3) "python"


#["java", "php", "pyton"]
从列表左边插入
> rpush books c++ golang
(integer) 5
> lrange books 0 -1
1) "java"
2) "php"
3) "python"
4) "c++"
5) "golang"

#["java", "php", "python", "c++", "golang"]
从列表右边插入
#移除并返回左边的第一个元素
> lpop books
"java"

#移除并返回右边的第一个元素
> rpop books
"golang"
移除列表中的元素
127.0.0.1:6379> lrange books 0 -1
1) "php"
2) "python"
3) "c++"

> llen books
(integer) 3
返回元素的个数
> lindex books 0
"php"
> lindex books 1
"python"
> lindex books 2
"c++"
> lindex books 3 #超过返回空
(nil)
指定返回第几个元素
> lrange books 0 -1
1) "php"
2) "php"
3) "golang"
4) "python"
5) "c++"
6) "python"
7) "php"
8) "java"


#count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
#删除2个php
> lrem books 2 php
(integer) 2
> lrange books 0 -1
1) "golang"
2) "python"
3) "c++"
4) "python"
5) "php"
6) "java"

#count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值
#删除1个python
> lrem books -1 python
(integer) 1
> lrange books 0 -1
1) "golang"
2) "python"
3) "c++"
4) "php"
5) "java"

#count = 0:移除表中所有与value 相等的值
删除指定的元素

 

redis的集合操作

集合和列表相比:1、集合不拥有重复的元素     2、集合是无序的,没有位置关系

> sadd school_1 qinghua beida
(integer) 2
添加元素
> smembers school_1
1) "beida"
2) "qinghua"
查看元素
> sadd school_1 fudan
(integer) 1
 smembers school_1
1) "beida"
2) "fudan"
3) "qinghua"

> srem school_1 fudan   #删除元素fudan
(integer) 1
> smembers school_1
1) "beida"
2) "qinghua"
删除元素
> smembers school_1
1) "beida"
2) "qinghua"

> scard school_1
(integer) 2
查看集合元素的个数
#交集就是取出集合之间共同拥有的元素

> smembers school_1
1) "beida"
2) "qinghua"

> smembers school_2
1) "fudan"
2) "qinghua"
3) "wangyi"

> sinter school_1 school_2
1) "qinghua"
获取多个集合的交集
#并集就是取出集合的所有元素,重复的元素只保留1个,因为集合不能有重复的元素

> smembers school_1
1) "beida"
2) "qinghua"

> smembers school_2
1) "fudan"
2) "qinghua"

> sunion schoo_1 school_2
1) "fudan"
2) "wangyi"
3) "qinghua"
获取多个集合的并集
> smembers school_1
1) "beida"
2) "qinghua"
> smembers school_2
1) "fudan"
2) "qinghua"
3) "wangyi"

> sdiff school_1 school2  #把school_2中不含有schoo_1中的元素去掉
1) "beida"
2) "qinghua"

> sdiff school_2 school1 #把school_1中不含有schoo_2中的元素去掉
1) "fudan"
2) "wangyi"
3) "qinghua"
获取多个集合的差集

 

redis的哈希操作

> hset person name heboan
(integer) 1
> hset person age 18
(integer) 1
添加新值
> hget person name
"heboan"

> hget person age
"18"
获取哈希中field对应的值
#删除指定filed
> hdel person name
(integer) 1
> hget person name
(nil)

#删除多个 field
> hdel person name age
(integer) 2
删除field
> hset person name heboan
(integer) 1
> hset person age 18
(integer) 1
> hset person gender male
(integer) 1

> hkeys person
1) "name"
2) "age"
3) "gender"
获取某个哈希中所有的field
> hvals person
1) "heboan"
2) "18"
3) "male"
获取某个哈希中所有的值
> hexists person name  #person中存在name
(integer) 1

> hexists person money  #不存在monery
(integer) 0
判断哈希中是否存在某个field
> hlen person
(integer) 3
获取某个哈希中键值对的个数

 

redis的事务操作

redis事务可以一次执行多个命令,事务具有以下特征:

隔离操作:事务中的所有命令都会序列化,按顺序执行,不会被其他命令打扰

原子操作:事务中的命令要么全部被执行,要么全部都不执行

开启一个事务

multi

以后执行的所有命令,都在这个事务中执行

执行事务

exec

会将multi和exec中的操作一并提交

一旦事务中执行的命令发生错误或者异常,整个事务都不会执行

取消事务,如果中途想取消事务可以使用命令discard

 监视一个key或者多个key ,如果在事务执行之前,被监视的key被其他命令所改动,那么事务将被打断

取消所有key的监视

> unwatch

 

发布订阅操作

 

posted @ 2018-08-04 22:16  sellsa  阅读(301)  评论(0编辑  收藏  举报