Redis-key
127.0.0.1:6379> set name dai #设置数据库中name的值为dai
OK
127.0.0.1:6379> keys * #查看所有keys
1) "name"
127.0.0.1:6379> get name #获取name的值
"dai"
127.0.0.1:6379> move name 1 #移除 name字段
(integer) 1
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name dai
OK
127.0.0.1:6379> exists name #判断name字段是否存在
(integer) 1
127.0.0.1:6379> expire name 10 #设置过期时间为10秒
(integer) 1
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> type name #查看当前key的类型
string
String:
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> append name "hello" #追加hello字符串,如果key不存在,就相当于set一个key
(integer) 8
(0.52s)
127.0.0.1:6379> get name
"daihello"
127.0.0.1:6379> strlen name #获取name的长度
(integer) 8
127.0.0.1:6379>
#i++
127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> incr view #自增1
(integer) 1
127.0.0.1:6379> get view
"1"
127.0.0.1:6379> decr view #自减1
(integer) 0
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby view 20 #设置指定步长,自增20
(integer) 20
127.0.0.1:6379> incrby view 20
(integer) 40
127.0.0.1:6379> decrby view 10 #自减10
(integer) 30
字符串范围 range
127.0.0.1:6379> set key1 hello,world
OK
127.0.0.1:6379> get key1
"hello,world"
127.0.0.1:6379> getrange key1 0 3 #截取字符串,从0开始到3,闭区间
"hell"
127.0.0.1:6379> getrange key1 0 -1 #获取全部字符串
"hello,world"
127.0.0.1:6379>
替换指定位置开始的字符串
127.0.0.1:6379> set key2 asdfg
OK
127.0.0.1:6379> get key2
"asdfg"
127.0.0.1:6379> setrange key2 1 qqqq #替换从1的字符串为qqqq
(integer) 5
127.0.0.1:6379> get key2
"aqqqq"
127.0.0.1:6379>
#setex(set with expire) #设置过期时间
#setnx(sett if not exist) #不存在值再设置(分布式锁中常常使用)
127.0.0.1:6379> setex key3 30 jdbc #设置key3的值为jdbc 30秒后过期
OK
127.0.0.1:6379> ttl key3
(integer) 25
127.0.0.1:6379> set key4 jjj
OK
127.0.0.1:6379> setnx key4 ggg #如果key4不存在则创建key4,如果存在则创建失败
(integer) 0
127.0.0.1:6379> get key4
"jjj"
mget mset:
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
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 #msetnx是一个原子性操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379>
#对象:
set user:1{name:zhangsan,age:3} #设置一个user:1对象,值为json字符来保存一个对象
#这里的key设计很精妙 : user:{id}:{filed}
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "18"
#getset 先get然后set
127.0.0.1:6379> getset dd redis #如果不存在值,返回nil,并设置新值为redis
(nil)
127.0.0.1:6379> get dd
"redis"
127.0.0.1:6379> getset dd 111 #存在值,返回redis,然后设置值为111
"redis"
127.0.0.1:6379> get dd
"111"
127.0.0.1:6379>
List
所有的list命令都以l开头
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush list one two three #将一个值或者多个值插入到列表的头部(左)
(integer) 3
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379>
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"
Lpop和Rpop:
127.0.0.1:6379> lpop list #移除列表的第一个元素
"three"
127.0.0.1:6379> rpop list #移除列表的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
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) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> llen list #返回列表的长度
(integer) 4
Lrem:
127.0.0.1:6379> lrem list 1 one #移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> lrem list 2 four #移除list集合中指定个数的value(2个)
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
trim:修剪,截断list
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim list 1 3 #通过下标截取指定的长度,这个list已经被改变,只剩下截取的部分
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379>
rpop lpush #移除列表的最后一个元素并且移动到新的列表中
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpoplpush list otherlist #移除list的最后一个元素并且移动到otherlist中
"1"
127.0.0.1:6379> lrange list 0 -1 #可以发现原列表已经被移除
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange otherlist 0 -1 #新列表中存在被移除的元素
1) "1"
lset 将列表中指定下标替换为另外一个值
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> exists list #判断list是否存在
(integer) 0
127.0.0.1:6379> lset list 0 index #将list的第0个元素替换为index 如果不存在则报错
(error) ERR no such key
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 index #存在下标,替换成功
OK
127.0.0.1:6379> lrange list 0 -1
1) "index"
linsert #将某个具体的value插入到某个元素的前面或者后面
127.0.0.1:6379> lpush list hello world
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> linsert list before hello other #将other 插入到 hello 的前面
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "other"
3) "hello"
127.0.0.1:6379>
小结:
list实际上就是一个链表,before Node after ,left,right都可以插入值
如果key不存在,则创建新的列表
如果key存在,新增内容
如果移除了所有值,空链表,也代表不存在
所以在两边插入或者改动值效率最高,中间相对来说效率低一点