Redis学习笔记(一)

一、Redis为什么是单线程还那么快?

redis是把数据都存到内存中的,所以使用单线程去操作效率就是最高的,多线程会用到CPU上下文切换,时间长。对于内存系统来说,如果没有上下文切换效率就是最高的,多次独写在一个CPU上,在内存情况下,这就是最佳方案。

二、Redis常用命令

select index 切换数据库
keys * 查看数据库中所有的key
flushdb 清除该数据库中所有内容
flushALL 清除所有数据库中内容
set key value

三、Redis-key

127.0.0.1:6379> set name xq  #set key value
OK
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> keys *   #查看数据库中所有的key
1) "name"
2) "age"
127.0.0.1:6379> EXISTS name  #查看数据库中是否存在key
(integer) 1
127.0.0.1:6379> EXISTS age
(integer) 1
127.0.0.1:6379> move age 1    #将该数据库中key移到其他数据库
(integer) 1
127.0.0.1:6379> select 1   #切换数据库
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> flushdb   #清除数据库
OK
================================================================================
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> EXPIRE name 20  #设置过期时间
(integer) 1
127.0.0.1:6379> ttl name   #查看key剩余时间
(integer) 17 
127.0.0.1:6379> ttl name
(integer) 12
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set age 11
OK
127.0.0.1:6379> type age  #查看key的属性
string

四、String

127.0.0.1:6379> set key1 v1   #设置key
OK
127.0.0.1:6379> get key1      #获取key
"v1"
127.0.0.1:6379> keys *       #获取所有的key
1) "key1"
2) "age"
127.0.0.1:6379> EXISTS key1       # key1是否存在
(integer) 1
127.0.0.1:6379> APPEND key1 "hello"  #追加字符串,如果当前key不存在,则相当于set key
(integer) 7 
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> STRLEN key1        #获取当前字符串长度
(integer) 7
127.0.0.1:6379> APPEND key1 ",xiaoqi"
(integer) 14
127.0.0.1:6379> STRLEN key1
(integer) 14
127.0.0.1:6379> get key1
"v1hello,xiaoqi"
================================================================================
127.0.0.1:6379> set views 0        #设置浏览量
OK
127.0.0.1:6379> get views           #获取浏览量
"0"
127.0.0.1:6379> incr views         #自增 +1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views        
"2"
127.0.0.1:6379> decr views          #自减 -1
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
127.0.0.1:6379> INCRBY views 10      #步长
(integer) 9 
127.0.0.1:6379> INCRBY views 10
(integer) 19
127.0.0.1:6379> DECRBY views 5
(integer) 14
127.0.0.1:6379> flushdb
OK
================================================================================
127.0.0.1:6379> set key1 "hello,xiaoqi"
OK
127.0.0.1:6379> get key1
"hello,xiaoqi"
127.0.0.1:6379> GETRANGE key1 0 3           #截取字符串[0,3]
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1          #获取全部的字符串,和getkey一样
"hello,xiaoqi"
127.0.0.1:6379>
127.0.0.1:6379> set key2 abcdefg      
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> SETRANGE key2 1 xxx           #替换指定位置开始的字符串
(integer) 7
127.0.0.1:6379> get key2
"axxxefg"
================================================================================
127.0.0.1:6379> setex key3 30 "hello"      #set with expire      设置过期时间
OK 
127.0.0.1:6379> ttl key3                  #查看剩余时间
(integer) 25
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) 1
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> setnx mykey "redis"    #set if not exist  如果不存在,创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> setnx mykey "mongdb"       # 如果存在,创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"
================================================================================
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3    #一次性创建多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "key2"
3) "mykey"
4) "key1"
5) "k2"
6) "k3"
127.0.0.1:6379> mget k1 k2 k3            #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4    #mestnx是一个原子性的操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
================================================================================
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2   #设置对象 
#user:{id}:{filed}
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> getset db redis      #如果不存在值,则返回nil 
(nil)
127.0.0.1:6379> get db             
"redis"
127.0.0.1:6379> getset db mongodb      #如果不存在值,则返回原来的值并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"

五、List

#LPUSH        LRANGE     Rpush
127.0.0.1:6379> LPUSH LIST one  #将一个值或者多个值,插入到列表头部
(integer) 1
127.0.0.1:6379> LPUSH LIST two
(integer) 2
127.0.0.1:6379> LPUSH LIST three
(integer) 3
127.0.0.1:6379> LRANGE LIST 0 -1   #获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE LIST 0 1    #通过区间获取list中的值
1) "three"
2) "two"
127.0.0.1:6379> Rpush LIST right   #将一个值或者多个值,插入到列表尾部
(integer) 4
127.0.0.1:6379> LRANGE LIST 0 -1   
1) "three"
2) "two"
3) "one"
4) "right"
================================================================================
#Lpo   RPOP
127.0.0.1:6379> LRANGE LIST 0 -1     
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> Lpop LIST     #移除list的第一个元素
"three"
127.0.0.1:6379> RPOP LIST     #移除list的最后一个元素
"right"
127.0.0.1:6379> LRANGE LIST 0 -1
1) "two"
2) "one"
================================================================================
#Lindex
127.0.0.1:6379> LRANGE LIST 0 -1   
1) "two"
2) "one"
127.0.0.1:6379> Lindex LIST 1  #通过下标获取list中的某个值
"one"
127.0.0.1:6379> Lindex LIST 0
"two"
================================================================================
#Llen
127.0.0.1:6379> LRANGE LIST 0 -1
1) "two"
2) "one"
127.0.0.1:6379> Llen LIST  #返回列表的长度
(integer) 2
================================================================================
#lrem
127.0.0.1:6379> LPUSH LIST three
(integer) 3
127.0.0.1:6379> LPUSH LIST three
(integer) 4
127.0.0.1:6379> LRANGE LIST 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem LIST 1 three  #移除list集合中指定个数的value,精确
(integer) 1
127.0.0.1:6379> LRANGE LIST 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LPUSH LIST three
(integer) 4
127.0.0.1:6379> LRANGE LIST 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem LIST 2 three
(integer) 2
127.0.0.1:6379> LRANGE LIST 0 -1
1) "two"
2) "one"
================================================================================
# ltrim
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello1"
(integer) 2
127.0.0.1:6379> RPUSH mylist "hello2"
(integer) 3
127.0.0.1:6379> RPUSH mylist "hello3"
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> ltrim mylist 1 2 #通过下标截取指定的长度,这个List已经被改变了,截断了只剩下截取的元素!
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello1"
2) "hello2"
================================================================================
#rpoplpush 移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> rpush mylist hello
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello1"
2) "hello2"
3) "hello" 
127.0.0.1:6379> rpoplpush mylist myotherlist #移除列表的最后一个元素,将他移动到新的列表中
"hello"
127.0.0.1:6379> LRANGE mylist 0 -1 #查看原来的列表
1) "hello1"
2) "hello2"
127.0.0.1:6379> LRANGE myotherlist 0 -1 #查看目标列表中,确实存在改值。
1) "hello"
================================================================================
#lset   将列表中指定下标的值替换成另外一个值,更新操作
127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> lset list 0 item    #如果不存在列表,我们去更新就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list value
(integer) 1
127.0.0.1:6379> lset list 0 item    #如果存在就更新当前下标的值
OK
127.0.0.1:6379> LRANGE list 0 -1       
1) "item"
127.0.0.1:6379> lset list 1 other    #如果不存在,则报错
(error) ERR index out of range
================================================================================
# linsert 将某个具体的value插入到列表中某个元素的前面或后面
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello1"
(integer) 2
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "world"
(integer) 2
127.0.0.1:6379> LINSERT mylist BEFORE "world" "other"
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "other"
3) "world"
127.0.0.1:6379> LINSERT mylist after world new
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "other"
3) "world"
4) "new"

六、Set

#sadd 
127.0.0.1:6379> sadd myset "hello"  #set集合中增加值
(integer) 1
127.0.0.1:6379> sadd myset "xiaoqi"
(integer) 1
127.0.0.1:6379> sadd myset "lovexiaoqi"
(integer) 1
127.0.0.1:6379> SMEMBERS myset  #查看指定set的所有值
1) "hello"
2) "lovexiaoqi"
3) "xiaoqi"
127.0.0.1:6379> SISMEMBER myset hello  #判断某一个值是不是在set集合中
(integer) 1
127.0.0.1:6379> SISMEMBER myset world
(integer) 0
================================================================================
#scard  获取set集合中的内容元素个数
127.0.0.1:6379> scard myset
(integer) 3
================================================================================
#srem   移除set集合中指定元素
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> SMEMBERS myset
1) "lovexiaoqi"
2) "xiaoqi"
================================================================================
# SRANDMEMBER  随机抽选出指定数量的元素
127.0.0.1:6379> SMEMBERS myset
1) "lovexiaoqi"
2) "xiaoqi"
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "world"
3) "lovexiaoqi"
4) "xiaoqi"
127.0.0.1:6379> SRANDMEMBER myset
"world"
127.0.0.1:6379> SRANDMEMBER myset
"hello"
127.0.0.1:6379> SRANDMEMBER myset
"world"
127.0.0.1:6379> SRANDMEMBER myset
"xiaoqi"
127.0.0.1:6379> SRANDMEMBER myset
"hello"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "lovexiaoqi"
2) "world"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "xiaoqi"
2) "world"
================================================================================
# spop  随机删除指定数量的元素
127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "world"
3) "lovexiaoqi"
4) "xiaoqi"
127.0.0.1:6379> spop myset
"xiaoqi"
127.0.0.1:6379> spop myset
"lovexiaoqi"
127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "world"
================================================================================
# smove 将一个指定的元素,移动到另外一个set集合
127.0.0.1:6379> sadd set1 "hello"
(integer) 1
127.0.0.1:6379> sadd set1 "world"
(integer) 1
127.0.0.1:6379> sadd set1 "xiaoqi"
(integer) 1
127.0.0.1:6379> sadd set2 "other"
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "hello"
2) "xiaoqi"
3) "world"
127.0.0.1:6379> SMEMBERS set2
1) "other"
127.0.0.1:6379> smove set1 set2 "xiaoqi"
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "xiaoqi"
2) "other"
127.0.0.1:6379> SMEMBERS set1
1) "hello"
2) "world"
================================================================================
微博  B站  共同关注
- 差集  SDIFF
- 交集  SINTER
- 并集  SUNION
127.0.0.1:6379> sadd key1 "a"
(integer) 1
127.0.0.1:6379> sadd key1 "b"
(integer) 1
127.0.0.1:6379> sadd key1 "c"
(integer) 1
127.0.0.1:6379> sadd key2 "c"
(integer) 1
127.0.0.1:6379> sadd key2 "d"
(integer) 1
127.0.0.1:6379> sadd key2 "e"
(integer) 1
127.0.0.1:6379> SDIFF key1 key2
1) "b"
2) "a"
127.0.0.1:6379> SINTER key1 key2
1) "c"
127.0.0.1:6379> SUNION key1 key2
1) "b"
2) "c"
3) "e"
4) "a"
5) "d"
  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值