目录
2.1 添加/读取/修改 hash类型键值对中的单条【属性-属性值】结构
2.2 添加/读取/修改 hash类型键值对中的多条【属性-属性值】结构
2.4 删除 hash类型键值对中的单条【属性-属性值】结构
3.3 从key对应的list中指定item位置插入新value
3.4 修改key对应list中指定index处的value值
3.5 将key对应的list中前count次出现的值为value的元素移除
5.2 从value是有序集合类型的结构中【按照顺序】读取集合的所有成员
5.3 从value是有序集合类型的结构中【按照权重】读取集合的所有成员
1.redis数据库内对于string类型的相关操作
redis数据库有五种数据类型指的是key-value型redis数据库中的value值有五种类型,但是key只有唯一一种就是string类型。redis数据库默认创建16个数据库,可以通过指令【~/ $ select index】在16个数据库之间自由切换,在使用第0个数据库的时候不会显式说明正在使用第0个数据库,而在其余数据库使用的时候会使用[]中括号进行标注。
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 0
OK
127.0.0.1:6379>
1.1 添加/读取/修改 单一string类型键值对
使用指令【~/set key value】对redis数据库添加单一键值对数据,使用指令【~/$ get key】读取redis数据库中的数据。
127.0.0.1:6379> set frankName FrankenStein
OK
127.0.0.1:6379> get frankName
"FrankenStein"
127.0.0.1:6379>
1.2 添加/读取 多个string类型键值对
使用指令【~/mset key1 value1 key2 value2 ...】对redis数据库同时添加多条键值对数据,使用指令【~/$ mget key1 key2 ...】同时读取redis数据库中的多条数据。
127.0.0.1:6379> mset frankAge 18 frankGender male frankMarried secret
OK
127.0.0.1:6379> mget frankAge frankGender frankMarried
1) "18"
2) "male"
3) "secret"
127.0.0.1:6379>
1.3 设置 string键值对的过期时间
使用指令【~/ $ setex key expires value】对指定键值对设置过期时间,键值对会在超过过期时间的瞬间被自动删除
127.0.0.1:6379> setex frankSecret 10 heIsASuperman
OK
127.0.0.1:6379> get frankSecret
"heIsASuperman"
127.0.0.1:6379> get frankSecret
(nil)
127.0.0.1:6379>
1.4 向string键值对的value中追加新内容
使用指令【append 指定key 追加的value】向数据库中指定key对应的value值中追加新内容(并不是覆盖),并且会返回添加内容后当前value的总长度。
127.0.0.1:6379> append frankAge 0
(integer) 3
127.0.0.1:6379> get frankAge
"180"
127.0.0.1:6379>
1.5 string键值对的中文识别
如果redis数据库存储中文,那么默认打开redis的指令【~/ $ redis-cli】是不能够识别中文的,redis会将中文对应的ascii编码值输出出来。而解决办法是先采用【~/ $ quit】指令退出数据库,然后执行【~/ $ redis-cli --raw】指令采用中文读写方式进入redis数据库,此时再次读写中文内容就能够识别了。
127.0.0.1:6379> set frankAddress 地球之上
OK
127.0.0.1:6379> get frankAddress
"\xe5\x9c\xb0\xe7\x90\x83\xe4\xb9\x8b\xe4\xb8\x8a"
127.0.0.1:6379> quit
***deMacBook-Pro:~ ***$ redis-cli --raw
127.0.0.1:6379> get frankAddress
地球之上
127.0.0.1:6379>
1.6 redis数据库键指令
键指令指的是redis数据库中提供的一些专门用来对数据库的key键进行操作的指令,他们各自拥有不同于读取设置等操作的特殊能力。键指令一般是通用的,对key对应的是什么类型的数据并不关心。
(1) 查看当前数据库中所有的键指令【~/ $ keys *】,keys后面的参数支持正则表达式写法,例如【~/ $ keys frankA*】。
127.0.0.1:6379> keys *
frankMarried
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> keys *d
frankMarried
127.0.0.1:6379> keys frankA*
frankAddress
frankAge
127.0.0.1:6379>
(2) 查看指定键对应的值类型指令【~/ $ type key】,输出指定键对应的值的类型。
127.0.0.1:6379> type frankAddress
string
127.0.0.1:6379>
(3) 对已经存在的键添加过期时间指令【~/ $ expire key expires】,可以对已经存在过期时间的key进行覆写,过期时间以最后设置的时间为准。指令返回一个数字代表布尔值1代表true表示添加成功。
(4) 与前一条指令息息相关的是查看指定键距离过期还剩下多长时间指令【~/ $ ttl key】,若当前key值已经超过过期时间,那么本指令会返回一个-2结果表示对应的键值对被自动删除。
127.0.0.1:6379> keys *
frankMarried
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> expire frankMarried 50
1
127.0.0.1:6379> ttl frankMarried
35
127.0.0.1:6379> ttl frankMarried
33
127.0.0.1:6379> ttl frankMarried
31
127.0.0.1:6379> ttl frankMarried
-2
127.0.0.1:6379> get frankMarried
127.0.0.1:6379> keys *
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379>
(5) 对已知的键值对进行删除指令【~/ $ del key1 key2 …】,本指令返回删除的键值对的数量。
127.0.0.1:6379> keys *
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> del frankAddress
1
127.0.0.1:6379> keys *
frankGender
frankAge
frankName
127.0.0.1:6379> del frankGender frankAge
2
127.0.0.1:6379> keys *
frankName
127.0.0.1:6379>
(5) 判断redis中一个key是否存在指令【~/ $ exists key】,返回1表示true存在,返回0表示false不存在
127.0.0.1:6379[2]> keys *
frankGirls
frankPCs
127.0.0.1:6379[2]> exists frankPCs
1
127.0.0.1:6379[2]> exists frankPC
0
2.redis数据库内对于hash类型的相关操作
hash就是散列值表,说的直白一点就是oc里面的object对象或者说python里面的list。所以当redis的key对应的value是hash的时候,那么就意味着一个key对应着一个“具有属性和属性值结构的对象”
在本节hash对象被成功添加到redis数据库中后,如果利用前文提到的type指令则能够看到返回的frankInfo字段对应的是hash类型
127.0.0.1:6379[1]> type frankInfo
hash
127.0.0.1:6379[1]>
2.1 添加/读取/修改 hash类型键值对中的单条【属性-属性值】结构
使用【~/ $ hset key propertyName value】指令对redis数据库添加一个hash键值对,本指令会返回添加了多少个key-value键值对。使用【~/ $ hget key propertyName】指令对读取redis数据库中一个hash键值对的某个propertyName属性名对应的属性值。
127.0.0.1:6379[1]> hset frankInfo frankName frank
1
127.0.0.1:6379[1]> hget frankInfo frankName
frank
#非标准用法:因为刚刚已经存在了frankName字段,因此本指令只添加了两条新key-value对
127.0.0.1:6379[1]> hset frankInfo frankName frank frankAge 18 frankGender male
2
#非标准用法:本指令则因为这两个字段已经都存在,所以本指令添加0条新的key-value对
127.0.0.1:6379[1]> hset frankInfo frankName frank frankAge 18
0
2.2 添加/读取/修改 hash类型键值对中的多条【属性-属性值】结构
使用【~/ $ hmset key propertyName1 value1 propertyName2 value2 …】指令对redis数据库添加一个拥有多个属性的hash键值对,本指令会返回添加成功或失败。使用【~/ $ hmget key propertyName1 propertyName2 …】指令读取redis数据库中一个hash键值对的多个propertyName属性名对应的属性值。
127.0.0.1:6379[1]> hmset frankInfo frankAddress secret1 frankMarried secret2
127.0.0.1:6379[1]> hmget frankInfo frankName frankAge frankGender frankAddress frankMarried
frank
18
male
secret1
secret2
127.0.0.1:6379[1]>
2.3 读取 hash类型键值对中所有属性/属性值
使用指令【~/ $ hkeys key】获取当前key对应的hash有多少个property
使用指令【~/ $ hvals key】获取当前key对应的hash中每个property对应的值
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
frankMarried
127.0.0.1:6379[1]> hvals frankInfo
frank
18
male
secret1
secret2
127.0.0.1:6379[1]>
2.4 删除 hash类型键值对中的单条【属性-属性值】结构
使用指令【~/ $ hdel key propertyName】删除key键对应的hash结构中的指定属性对,本指令返回删除hash中属性对的数量。
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
frankMarried
127.0.0.1:6379[1]> hdel frankInfo frankMarried
1
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
127.0.0.1:6379[1]>
2.5 删除hash键值对
使用指令【~/ $ del key】直接删除指定key对应的hash键值对。
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
127.0.0.1:6379[1]> del frankInfo
1
127.0.0.1:6379[1]> hkeys frankInfo
127.0.0.1:6379[1]>
3.redis数据库内对于list类型的相关操作
redis中的list相当于go当中slice切片,或者JavaScript当中的Array结构。所以当redis的key对应的value是list的时候,那么就意味着一个key对应着一个“具有顺序的存储结构”。
3.1 从左向指定key对应的list中添加value
使用指令【~/ $ lpush key value1 value2 …】向key对应的list内添加value。value1先添加在最左面;然后value2继续添加在最左面,value1向右顺位移动1位;以此类推...使用指令【~/ $ lrange key beginIndex endIndex】来读取key对应的list中beginIndex下标与endIndex下标之间的值,包括endIndex处的值。此时当endIndex 为-1时表示倒数第一个。
127.0.0.1:6379[2]> lpush frankPCs lenovo macAir macPro
3
127.0.0.1:6379[2]> lrange frankPCs 0 2
macPro
macAir
lenovo
3.2 从右向指定key对应的list中添加value
这就像是普通的JavaScript语言中的普通push数组方法一样逻辑,通过使用指令【~/ $ rpush key value1 value2 …】来从右向key对应的list中添加value值。注意,不存在rrange从右输出list的value的方法,lrange的l是list的含义!
127.0.0.1:6379[2]> rpush frankGirls a1 a2 a3 a4
4
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
127.0.0.1:6379[2]>
3.3 从key对应的list中指定item位置插入新value
通过使用指令【~/ $ linsert key before/after 现有的value 新value】来将新value插入到list中现有value的前面或者后面。本指令会返回插入数据后,当前key对应的list中有几个item。
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
127.0.0.1:6379[2]> linsert frankGirls before a2 000
5
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
a3
a4
127.0.0.1:6379[2]> linsert frankGirls after a2 000
6
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
000
a3
a4
127.0.0.1:6379[2]>
3.4 修改key对应list中指定index处的value值
通过使用指令【~/ $ lset key index value】来修改key对应list中指定index处的value值,就好像变更切片值一样。
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
000
a3
a4
127.0.0.1:6379[2]> lset frankGirls 0 a11111111
OK
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a11111111
000
a2
000
a3
a4
3.5 将key对应的list中前count次出现的值为value的元素移除
通过使用指令【~/ $lrem key count value】可以将key对应的list中出现count次的value元素移除,count的不同值有着不同的value 元素删除方式。
count > 0 | 从list下标为0开始向后查找,删除前count个value元素 |
count < 0 | 从list下标为0开始向后查找,删除最后count个value元素 |
count = 0 | 删除list中所有的value元素 |
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
a3
a2
a1
127.0.0.1:6379[2]> lrem frankGirls 1 a1
1
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a3
a4
a3
a2
a1
127.0.0.1:6379[2]> lrem frankGirls -1 a2
1
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a3
a4
a3
a1
127.0.0.1:6379[2]> lrem frankGirls 0 a3
2
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a4
a1
4.redis数据库内对于set类型的相关操作
set类型指的是类似于oc当中的NSSet或者JavaScript中的Collection,不过都有所不同。set类型再redis数据库中指的是无序集合类型,所谓集合就是由一个或多个确定的元素所构成的整体,说的在直白一点集合就是一大堆数据对在一起构成的这么一个整体,集合中的数据可以是任意数据类型。但是在redis中set类型在集合的基础上又添加了一些redis数据库的特性,从而保证set类型能够和redis数据库之间不会出现一些语法上的冲突。下列表格列出了一般概念上的set类型和redis数据库中的set类型的区别:
一般概念上set集合 | redis数据库中set集合类型 |
无序集合,集合中的元素没有顺序 | 无序集合,集合中的元素没有顺序 |
元素可以是任意数据类型 | 元素只能是string类型 |
元素具有互斥性,元素唯一且不重复 | 元素具有互斥性,元素唯一且不重复,并且重复添加元素无效 |
元素具有确定性,在集合内或不在集合内 | 元素不支持修改,有就是有,没有就是没有。只有添加和删除操作 |
4.1 向value为集合类型的值内添加成员
可以通过指令【~/ $ sadd key member1 member2 …】向key对应的集合中添加集合成员,本指令能够返回添加进入集合的条目数
127.0.0.1:6379[1]> sadd human peo1 peo2 peo3 peo4 peo5
5
4.2 从value是集合类型的结构中读取集合的所有成员
可以通过指令【~/ $ smembers key】获取key对应的无序集合中的所有成员(注意能够看到集合成员是无序输出的)
127.0.0.1:6379[1]> smembers human
peo3
peo2
peo1
peo4
peo5
4.3 删除集合内成员
可以通过指令【~/ $ srem key value】将key对应的集合内的指定value
127.0.0.1:6379[1]> srem human peo1
1
127.0.0.1:6379[1]> smembers human
peo4
peo5
peo2
peo3
127.0.0.1:6379[1]>
5.redis数据库内对于zset类型的相关操作
zset类型在redis数据库中表示的是有序集合类型,与set类型的区别就是集合中的成员会按照一定顺序排列。可能这看起来会有些和集合的无序性特性冲突,但事实上集合的有序性是建立在权重基础上的:有序集合中的每一个member都会有一个关联的double类型score用来表示member的权重,而zset就是根据这个score权重来将成员按照一定顺序排列。
5.1 向value为有序集合类型的值内添加成员
通过指令【~/ $ zadd key score1 member1 score2 member2…】来向key对应的有序集合中添加带有权重的成员。
127.0.0.1:6379[1]> zadd Stu 1 xiaoming 2 xiaohong 3 xiaolan 4 xiaolv 5 xiaobai
5
5.2 从value是有序集合类型的结构中【按照顺序】读取集合的所有成员
通过指令【~/ $ zrange key startIndex stopIndex】来从key对应的有序集合中获取序号在startIndex到stopIndex之间的成员,这个范围是闭区间范围,即输出内容包含startIndex位置成员和stopIndex位置成员。-1表示最后一个元素。
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
127.0.0.1:6379[1]>
5.3 从value是有序集合类型的结构中【按照权重】读取集合的所有成员
通过指令【~/ $ zrangebyscore key scoreStart scoreStop】来从key对应的有序集合中获取权重在scoreStart到scoreStop之间的成员,同样这个范围是闭区间范围。
127.0.0.1:6379[1]> zrangebyscore Stu 1 5
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
5.4 获取有序集合指定成员score权重值
每一个zset集合成员都有一个与之对应的score权重,因此我们可以通过指令【~/ $ zscore key member】来获取指定成员的权重。
127.0.0.1:6379[1]> zscore Stu xiaobai
5
127.0.0.1:6379[1]> zscore Stu xiaohong
2
5.5 删除有序集合中指定成员
通过指令【~/ $zrem key member1 member2 …】来将key对应的有序集合中的指定member删除
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
127.0.0.1:6379[1]> zrem Stu xiaobai xiaolv
2
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
5.6 删除有序集合中指定权重范围内的集合成员
通过指令【~/ $ zremrangebyscore key scoreStart scoreStop】来删除key对应的zset中权重范围在scoreStart和scoreStop之间的成员,这个范围仍然是闭区间范围。
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
127.0.0.1:6379[1]> zremrangebyscore Stu 1 2
2
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaolan