redis中命令不区分大小写!
#######################################################################################
127.0.0.1:6379> set key1 value1 #设置值
OK
127.0.0.1:6379> get key1 #获得值
"value1"
127.0.0.1:6379> keys * #huo得所有的值
1) "key1"
127.0.0.1:6379> EXISTS key1 #判断一个key是否存在
(integer) 1 #返回1则为存在,0则不存在
127.0.0.1:6379> APPEND key1 haha #给某一个key追加字符串
(integer) 10 #返回字符串的长度
127.0.0.1:6379> get key1
"value1haha"
127.0.0.1:6379> append name fanmenggang #如果这个key不存在的话,就相当于set key
(integer) 11
127.0.0.1:6379> KEYS *
1) "name"
2) "key1"
127.0.0.1:6379>
127.0.0.1:6379> STRLEN key1 #查看字符串的长度
(integer) 10
#######################################################################################
#i++
#i--
#步长:i+=
#i-=
127.0.0.1:6379> set views 1 #初始浏览量为1
OK
127.0.0.1:6379> incr views #自增一 浏览量加一
(integer) 2 #返回当前的值
127.0.0.1:6379> incr views
(integer) 3
127.0.0.1:6379> get views #查看
"3"
127.0.0.1:6379> decr views #自减一
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> incrby views 10 #增加步长 可以指定增量!
(integer) 12
127.0.0.1:6379> get views
"12"
127.0.0.1:6379> decrby views 5 #可以指定减去的数量
(integer) 7
127.0.0.1:6379> decrby views 5
(integer) 2
127.0.0.1:6379> get views
"2"
#######################################################################################
#字符串范围截取 range
127.0.0.1:6379> set key1 hello,redis
OK
127.0.0.1:6379> get key1
"hello,redis"
127.0.0.1:6379> GETRANGE key1 0 5 #截取字符串 [0,5]
"hello,"
127.0.0.1:6379> GETRANGE key1 0 -1 #查看全部的字符串 ,相当于get key
"hello,redis"
#替换
127.0.0.1:6379> set key2 abcde
OK
127.0.0.1:6379> SETRANGE key2 2 oo #替换指定位置开始的字符串
(integer) 5
127.0.0.1:6379> get key2
"abooe"
#######################################################################################
#setex (set with expire) 设置过期时间
#setnx (set if not exist) 不存在再设置(在分布式锁中常常使用)
127.0.0.1:6379> setex key3 30 hello #设置值的时候顺便设置过期时间
OK
127.0.0.1:6379> ttl key3 #查看剩余时间
(integer) 21
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey oo #如果不存在才能设置成功 返回1
(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 aa #存在则设置失败 返回0
(integer) 0
127.0.0.1:6379> get mykey
"oo"
#######################################################################################
# mset 批量设值
# mget 批量取值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #批量设值
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
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 #如果存在则设置失败,原子性的操作
(integer) 0
127.0.0.1:6379> get k4
(nil)
#######################################################################################
# 对象
#set user:1:{name zhangsan,age 3} 设置一个user:1对象 值为 json字符串来保存
#这里的key是一个巧妙的设计,user:{id}:{filed} 就是把key换了种方式写也是OK的
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "3"
#######################################################################################
# getset 先获取值再设值
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"
#######################################################################################
String类型的使用场景: value除了是字符串外还可以是数字!
在redis里面,我们可以把它玩成 栈(lpush lpop),消息队列(lpush rpop),阻塞队列!这些都可以用list实现!
基本上list命令都是l开头的
#######################################################################################
#lpush
#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 #通过区间获取具体的值
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"
#######################################################################################
#lpop
#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 #移除列表中的第一个元素
"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> 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> llen list #返回列表的长度
(integer) 3
#######################################################################################
# 移除指定的值! lrem
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 two #移除指定的值,移除一个
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
127.0.0.1:6379> lrem list 2 three #移除两个指定的值,list中允许重复值,
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"
#######################################################################################
# ltrim list截断!
127.0.0.1:6379> lpush list hello1 hello2 hello3
(integer) 3
127.0.0.1:6379> ltrim list 0 1 #通过下标截取指定的长度,这个list已经被改变,截断了只剩下截取的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "hello3"
2) "hello2"
#######################################################################################
# rpoplpush 移除列表中的最后一个元素,并将它移动到新的列表(如果不存在,就给你创建一个)中
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> rpush list hello hello1 hello2
(integer) 3
127.0.0.1:6379> rpoplpush list mylist #移除列表中的最后一个元素,并将它移动到新的列表(如果不存在,就给你创建一个)中
"hello2"
127.0.0.1:6379> lrange list 0 -1 #查看原来列表中的值
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange mylist 0 -1 #查看目标列表中的值
1) "hello2"
#######################################################################################
# lset 将列表中指定下标的值替换为另一个值,相当于一个更新操作
127.0.0.1:6379> exists list #判断有没有这个列表
(integer) 0
127.0.0.1:6379> lset list 0 oo #如果不存在这个列表则更新失败
(error) ERR no such key
127.0.0.1:6379> lpush list haha #设置值
(integer) 1
127.0.0.1:6379> lrange list 0 0 #查看
1) "haha"
127.0.0.1:6379> lset list 0 oo #将0号值替换
OK
127.0.0.1:6379> lrange list 0 0 #查看
1) "oo"
127.0.0.1:6379> lset list 1 o #没有这个元素则失败
(error) ERR index out of range
#######################################################################################
# linsert 将某个具体的value插入到列表中某个元素的前面或者后面
127.0.0.1:6379> rpush list hello world
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> linsert list before world , #将,插入到列表中world的前面
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) ","
3) "world"
127.0.0.1:6379> linsert list after world ! #将!插入到列表中world的后面
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) ","
3) "world"
4) "!"
#######################################################################################
set中的值不可以重复!无序不重复集合
#######################################################################################
127.0.0.1:6379> sadd set hello fanmenggang loveyou #set集合中添加元素
(integer) 3
127.0.0.1:6379> smembers set #查看指定set的所有值
1) "loveyou"
2) "fanmenggang"
3) "hello"
127.0.0.1:6379> sismember set hello #判断某一个值是不是在set集合中
(integer) 1 #存在返回1,不存在返回0
127.0.0.1:6379> sismember set he
(integer) 0
127.0.0.1:6379> scard set #获取set集合中的元素个数
(integer) 3
#######################################################################################
# srem 移除指定元素
127.0.0.1:6379> srem set hello #移除指定元素
(integer) 1
127.0.0.1:6379> smembers set
1) "loveyou"
2) "fanmenggang"
#######################################################################################
# 抽随机 srandmember
127.0.0.1:6379> SMEMBERS set
1) "ooo"
2) "haha"
3) "loveyou"
4) "fanmenggang"
127.0.0.1:6379> SRANDMEMBER set #随机抽出一个元素
"haha"
127.0.0.1:6379> SRANDMEMBER set
"fanmenggang"
127.0.0.1:6379> SRANDMEMBER set 2 #随机抽出指定数量的元素
1) "haha"
2) "fanmenggang"
127.0.0.1:6379> SRANDMEMBER set 2
1) "ooo"
2) "loveyou"
#######################################################################################
# 随即删除set集合中的元素
127.0.0.1:6379> SMEMBERS set
1) "ooo"
2) "haha"
3) "loveyou"
4) "fanmenggang"
127.0.0.1:6379> spop set #随即删除一个元素
"fanmenggang"
127.0.0.1:6379> SMEMBERS set
1) "ooo"
2) "haha"
3) "loveyou"
127.0.0.1:6379> spop set 2 #随机删除指定数量的元素
1) "ooo"
2) "loveyou"
127.0.0.1:6379> SMEMBERS set
1) "haha"
#######################################################################################
# 将一个指定的值移动到另一个set集合中 smove
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd set1 hah hehe oo
(integer) 3
127.0.0.1:6379> sadd set2 hhh
(integer) 1
127.0.0.1:6379> smove set1 set2 oo #将一个指定的值移动到另一个set集合中
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "hehe"
2) "hah"
127.0.0.1:6379> SMEMBERS set2
1) "oo"
2) "hhh"
#######################################################################################
#数字集合类:- 交集 sinter - 并集 sunion - 差集 sdiff
127.0.0.1:6379> sadd key1 a b c
(integer) 3
127.0.0.1:6379> sadd key2 c d e
(integer) 3
127.0.0.1:6379> sinter key1 key2 #交集 共同好友
1) "c"
127.0.0.1:6379> sunion key1 key2 #并集
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> sdiff key1 key2 #差集
1) "a"
2) "b"
共同好友,可能认识的人
存的值是map集合,key-map!本质和String类型没有太大区别!
#######################################################################################
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> hset user name fanmenggang #set一个具体的key-value
(integer) 1
127.0.0.1:6379> hget user name #获取一个值
"fanmenggang"
127.0.0.1:6379> hmset user name gangzi age 20 #set多个key-value,可以覆盖以前的字段
OK
127.0.0.1:6379> hmget user name age #获取多个字段的值
1) "gangzi"
2) "20"
127.0.0.1:6379> hgetall user #获取全部的数据
1) "name"
2) "gangzi"
3) "age"
4) "20"
127.0.0.1:6379> hdel user age #删除指定的字段
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "gangzi"
#######################################################################################
# hlen 获取hash表中字段数量!
127.0.0.1:6379> hgetall user
1) "name"
2) "gangzi"
127.0.0.1:6379> hlen user #获取hash表中字段数量!
(integer) 1
#######################################################################################
127.0.0.1:6379> hexists user name #判断hash中的key中指定字段是否存在
(integer) 1 #存在返回1,不存在返回0
127.0.0.1:6379> hexists user age
(integer) 0
#######################################################################################
127.0.0.1:6379> hkeys user #只获得所有的字段
1) "name"
127.0.0.1:6379> hvals user #只获得所有的value
1) "gangzi"
#######################################################################################
127.0.0.1:6379> hset user age 5
(integer) 1
127.0.0.1:6379> hincrby user age 5 #设值指定增量
(integer) 10
127.0.0.1:6379> HINCRBY usr age -3 #没有hdecrby 可以写负数相当于hdecrby
(integer) -3
127.0.0.1:6379> hsetnx user sex nan #如果没有则添加成功
(integer) 1
127.0.0.1:6379> hsetnx user sex nv #如果有则添加失败
(integer) 0
#######################################################################################
做一些用户信息的保存 ,经常变动的信息!hash更适合对象的存储,String更适合字符串!
在set的基础上,增加了一个值,set k1 v1—zset k1 score v1 这个标志可以让它排序
#######################################################################################
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd myset 1 one #设置值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three #设置多个值
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1 #查看全部的值
1) "one"
2) "two"
3) "three"
#######################################################################################
# 如何进行排序 -inf:负无穷,+inf:正无穷
# ZREVRANGEBYSCORE 由高到低排序
# ZRANGEBYSCORE 由低到高排序
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd salsry 2500 zhangsan #存储数据
(integer) 1
127.0.0.1:6379> zadd salsry 500 lisi
(integer) 1
127.0.0.1:6379> zadd salsry 5000 wangwu
(integer) 1
127.0.0.1:6379> ZREVRANGEBYSCORE salsry +inf -inf #由高到低排序
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> ZREVRANGEBYSCORE salsry +inf -inf withscores #带上分数由高到低排序
1) "wangwu"
2) "5000"
3) "zhangsan"
4) "2500"
5) "lisi"
6) "500"
127.0.0.1:6379> ZRANGEBYSCORE salsry -inf +inf #由低到高排序
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> ZRANGEBYSCORE salsry -inf +inf withscores #带上分数由低到高排序
1) "lisi"
2) "500"
3) "zhangsan"
4) "2500"
5) "wangwu"
6) "5000"
#######################################################################################
# rem 移除集合中的元素 , zcard 获取集合中所有的元素个数
127.0.0.1:6379> ZRANGE salsry 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> ZREM salsry lisi #移除集合中指定的元素
(integer) 1
127.0.0.1:6379> ZRANGE salsry 0 -1
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379> zcard salsry #查看集合中元素的个数
(integer) 2
#######################################################################################
# zcount 获取指定区间的元素个数
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd set 1 hello 2 world 3 haha
(integer) 3
127.0.0.1:6379> zcount set 1 3 #获取指定区间的元素个数
(integer) 3
#######################################################################################
排行榜应用实现,存储班级成绩表,工资表排序!