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.
#方法1> set username heboan EX 10 #10秒后过期OK#方法2> setex username 10 heboanOK#方法3> set username heboanOK> 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 -11) "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 -11) "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 -11) "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 -11) "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 -11) "golang"2) "python"3) "c++"4) "php"5) "java"#count = 0:移除表中所有与value 相等的值
redis的集合操作
集合和列表相比:1、集合不拥有重复的元素 2、集合是无序的,没有位置关系
> sadd school_1 qinghua beida(integer) 2
> smembers school_11) "beida"2) "qinghua"
> sadd school_1 fudan(integer) 1 smembers school_11) "beida"2) "fudan"3) "qinghua"> srem school_1 fudan #删除元素fudan(integer) 1> smembers school_11) "beida"2) "qinghua"
> smembers school_11) "beida"2) "qinghua"> scard school_1(integer) 2
#交集就是取出集合之间共同拥有的元素> smembers school_11) "beida"2) "qinghua"> smembers school_21) "fudan"2) "qinghua"3) "wangyi"> sinter school_1 school_21) "qinghua"
#并集就是取出集合的所有元素,重复的元素只保留1个,因为集合不能有重复的元素> smembers school_11) "beida"2) "qinghua"> smembers school_21) "fudan"2) "qinghua"> sunion schoo_1 school_21) "fudan"2) "wangyi"3) "qinghua"
> smembers school_11) "beida"2) "qinghua"> smembers school_21) "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"
#删除指定filed> hdel person name(integer) 1> hget person name(nil)#删除多个 field> hdel person name age(integer) 2
> hset person name heboan(integer) 1> hset person age 18(integer) 1> hset person gender male(integer) 1> hkeys person1) "name"2) "age"3) "gender"
> hvals person1) "heboan"2) "18"3) "male"
> hexists person name #person中存在name(integer) 1> hexists person money #不存在monery(integer) 0
> hlen person(integer) 3
redis的事务操作
redis事务可以一次执行多个命令,事务具有以下特征:
隔离操作:事务中的所有命令都会序列化,按顺序执行,不会被其他命令打扰
原子操作:事务中的命令要么全部被执行,要么全部都不执行
开启一个事务
multi
以后执行的所有命令,都在这个事务中执行
执行事务
exec
会将multi和exec中的操作一并提交
一旦事务中执行的命令发生错误或者异常,整个事务都不会执行
取消事务,如果中途想取消事务可以使用命令discard
监视一个key或者多个key ,如果在事务执行之前,被监视的key被其他命令所改动,那么事务将被打断
取消所有key的监视
> unwatch
发布订阅操作