Redis的一些基本指令总结

570 阅读5分钟

Redis是通过key-value的格式来存储数据的,key是二进制安全的字符串,其中value是支持多种数据类型

字符串(String):二进制安全的字符串,可以是字符串、整数或浮点数
散列(Hash):一个String类型的field和value的映射表,适合存储对象
列表(List):字符串列表,按插入顺序排序
集合(Set):字符串无序集合,去重
有序集合(Sorted Set,zset):与Set相同,不同的是根据score排序

字符串

指令: set/赋值         get/取值   
 Ep:  127.0.0.1:6379> set test 123
					OK
	127.0.0.1:6379> get test
					"123"
        
指令: incr/自增     incrby/增加具体的值      decr/自减    decrby/减少具体的值
        //当value为整数时,才可以使用数值的自增减指令(原子性操作)
  Ep:  127.0.0.1:6379> set counter 100
                    OK
       127.0.0.1:6379> incr counter
                    (integer) 101
        127.0.0.1:6379> incrby counter 20
                    (integer) 121
        127.0.0.1:6379> decr counter
                    (integer) 120
         127.0.0.1:6379> decrby counter 10
                    (integer) 110
             
指令:mset/批量设置     mget/批量获取 
 Ep : 127.0.0.1:6379> mset k1 10 k2 20 k3 30
					OK
	127.0.0.1:6379> mget k1 k2 k3
                    1) "10"
                    2) "20"
                    3) "30"  

散列(Hash)

指令:hset/设置一个字段值     hget/获取一个字段值    
     hmset/设置多个字段值    hmget/获取多个字段值    hgetall/获取所有字段值
Ep:
    127.0.0.1:6379> hmset user name zou age 23
		OK
	127.0.0.1:6379> hset user location Guangzhou
		(integer) 1
	127.0.0.1:6379> hget user name
			"zou"
	127.0.0.1:6379> hgetall user
                    1) "name"
                    2) "zou"
                    3) "age"
                    4) "23"
                    5) "location"
                    6) "Guangzhou"
        
指令:hincrby    增加数值                
        127.0.0.1:6379> hincrby user age 1
		(integer) 24
其它指令:
            # 判断字段是否存在                  HEXISTS key field
            # 只获取字段名 			HKEYS key
            # 只获取字段值			HVALS key
            # 获取字段数量			HLEN key
            # 获取所有字段和值		        HGETALL key       	     
使用场景:存储结构化数据对象等操作;

列表(List)

Redis的列表是链表结构的,可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素 (底层数据结构:双向链表)
     # 列表的左端添加元素    		LPUSH key value [value ...]
	# 列表的右端添加元素			    RPUSH key value [value ...]   
    
    指令:lpush/列表的左端添加元素     rpush/列表右端添加元素 
    Ep :
    	127.0.0.1:6379> lpush list:1 1 2 3 
		(integer) 3 
		127.0.0.1:6379> rpush list:1 4 5 6 
		(integer) 3   
    指令: lrange 获取List中某区间内的值  索引从 0 开始   -1 表示最后一位
     Ep : 
			127.0.0.1:6379> lrange  list:1 0 2 
                                    1) "3" 
                                    2) "2" 
                                    3) "1"
     指令: lpop/从左边弹出一个元素    rpop/从右边弹出一个元素
      Ep:
		127.0.0.1:6379>lpop list:1 
		                "3“ 
		127.0.0.1:6379>rpop list:1 
			        "6“           

集合(Set)

Set是字符串的无序集合,其中的数据是不重复且没有顺序
 指令:sadd/添加元素     srem/删除元素
  Ep:  
  	127.0.0.1:6379> sadd set a b c d
				(integer) 4 
	127.0.0.1:6379> sadd set a 
				(integer) 0 
	127.0.0.1:6379> srem set c d 
				(integer) 2   
 指令:smembers/获取所有元素         sismember/判断元素是否存在集合中 1表示存在,0表示不存在 
 Ep:
        127.0.0.1:6379> smembers set 
                        1)  "b" 
                        2)  "a”
    	127.0.0.1:6379>sismember set a 
					(integer)  1 
		127.0.0.1:6379>sismember set h 
					(integer)  0
 指令:sdiff/差集       sinter/交集        sunion/并集     
 指令:scard/获取集合中元素的个数        spop/随机弹出一个元素 
            
 使用场景:需要去重的列表,提供了求交集、并集、差集等操作;

有序集合(Sorted Set / Zset)

有序集合(Sorted Set,zSet)在Set集合类型的基础上,有序集合类型为集合中的每个元素都关联一个分数(score) ,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作

指令 : zadd/添加元素    zrem/删除元素
Ep :    
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
				(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
				(integer) 0
127.0.0.1:6379> zrem scoreboard lisi
				(integer) 1
指令:zrange/按照元素分数从小到大的顺序返回  zrevrange/按照元素分数从大到小的顺序返回     zscore/获取元素的分数
Ep:
    127.0.0.1:6379> zrange scoreboard 0 2
                    1) "zhangsan"
                    2) "wangwu"
                    3) "lisi“
127.0.0.1:6379> zrevrange scoreboard 0 2
                    1) "lisi"
                    2) "wangwu"
                    3) "zhangsan“
127.0.0.1:6379> zscore scoreboard lisi
					"97"         
使用常见:存放一个有序的并且不重复的集合列表、排行榜相关,排名等操作;

各种数据类型的区别

// String和Hash的区别
Hash类型适合存储那些对象数据,特别是对象属性经常发生【增删改】操作的数据。 
String类型也可以存储对象数据,将Java对象转成json字符串或序列化进行存储,这种存储适合【查询】操作
    
// SortedSet和List的区别
 1、二者都是有序的,List是按数据插入顺序,SortedSet是根据score自然排序
 2、二者都可以获得某一范围的元素
 3、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢  
 4、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快   
 5、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)

其它指令

keys   返回满足规则的键值
del    删除key
exists  key是否存在
expire key seconds (设置key的存活时间,单位为 秒)
tll  key       查看key剩余存活时间
persist key    清除key的存活时间
type  key  查看该key对应的数据类型
rename key newKey  重命名  

鄙人不才,在您面前献丑只愿与您结伴而行,文章若有不当之处,望大佬指点一二;如果我对您有帮助的话,还希望您能点赞分享,成长是一场苦涩的独自修行,我很需要您的陪伴与支持,这也是鄙人不断前行的根本动力,让我们在互相陪伴见证彼此生长的同时能够感染身边最亲近的人一同成长,鄙人在此叩谢!