五种数据类型
String:字符串
Hash:面向对象的结构
List:双向链表
Set:集合
ZSet:有序集合
1.exits
exists判断一个key是否存在时,没有对key的value进行读取,只是
使用类似contain方法,但是get是将key的value读取过来的,redis
最新版本中可以支持value最大存储数据的1GB,exists判断效率更高
dump.rdb默认大小是77字节,保持了一个基本结构;
2.
flushdb
select 0-15整数:redis默认情况下,会在内存中划分16个数据库区
域,相互之间数据是隔离的,可以通过select 整数选择使用不同的
区域,默认的是0号库
127.0.0.1:6379[15]> select 1
flushdb:db指的就是0-15号分库,清空分库中内存数据,dump持久化文件不受影响(flushall>>flushdb)
很多环境中不确定要不要清除数据(flushall),又要实现数据的不冲突,就可以使用flushdb,如果清除错误,可以通过持久化文件恢复
2.2String的命令
○ set: 新增/覆盖(写) ○ get:获取读数据
○ incr/decr:自增自减 步数1
可以对string类型中纯数字的数据进行自增自减操作,步数1
127.0.0.1:6379> set num 100
OK
127.0.0.1:6379> incr num
(integer) 101
127.0.0.1:6379> decr num
(integer) 100
127.0.0.1:6379>
应用场景:一些程序中变动的数字,上下变动1,-1;投票软件工具
○ incrby/decrby:自增自减,步数自定义
127.0.0.1:6379> incrby num 10
(integer) 110
127.0.0.1:6379> decrby num 20
(integer) 90
127.0.0.1:6379>
应用场景:在线人数
○ append:追加,修改的一种
set可以修改数据,覆盖,将已有的数据重新覆盖写了一遍,追加性能
速度比覆盖高.
127.0.0.1:6379> set location beijing
OK
127.0.0.1:6379> append location yizhuang
(integer) 15
127.0.0.1:6379> get location
“beijingyizhuang”
127.0.0.1:6379>
○ mset/mget:批量操作,批量的新增,批量的获取
127.0.0.1:6379> mset name1 wang name2 liu name3 wu
OK
127.0.0.1:6379> keys *
- “name3”
- “name1”
- “name2”
127.0.0.1:6379> mget name1 name2 name3 name4 - “wang”
- “liu”
分区 day08-redis 的第 5 页 - “liu”
- “wu”
- (nil)
127.0.0.1:6379>
效果和多次执行set/get一样,但是速度远超单个设置,批量操作只
占用带宽传输一次
2.4LIST
双向链表,特点,头尾操作速度快,中间的操作速度慢,有排序,分为上
(左)/下(右)
○ lpush/rpush list的key值 元素值
从头或者从尾插入数据
127.0.0.1:6379> lpush list01 100 200 300 400 500
(integer) 5
127.0.0.1:6379> rpush list01 one two three four five
(integer) 10
○ lrange list的key值 起始下标 结束下标(如果查看全部,0 -1)
127.0.0.1:6379> lrange list01 0 -1
- “500”
- “400”
- “300”
- “200”
- “100”
- “one”
- “two”
- “three”
- “four”
- “five”
127.0.0.1:6379>
○ linsert
LINSERT key BEFORE|AFTER pivot value
对一个list数据做插入元素操作,只能从头从上向下对比数据,pivot
参数元素,value插入的数据,before/after 在参数元素的前后进行数
据写入
127.0.0.1:6379> lrange list02 0 -1 - “three”
- “two”
- “one”
127.0.0.1:6379> linsert list02 after one 100
(integer) 4
127.0.0.1:6379> linsert list02 before one 200
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379> lrange list02 0 -1 - “three”
- “two”
- “200”
- “one”
- “100”
分区 day08-redis 的第 8 页
○ lrem 删除
LREM key count value
由于一个list链表中元素的值可以重复,删除元素时,需要携带删除
的个数
count=正整数,0,负整数
正整数:从头想尾部寻找相同元素个数删除
负整数:从尾到头部寻找相同元素个数删除
0:全删
127.0.0.1:6379> lrange list03 0 -1 - “200”
- “100”
- “200”
- “100”
- “200”
- “100”
127.0.0.1:6379> lrem list03 2 100
(integer) 2
127.0.0.1:6379> lrange list03 0 -1 - “200”
- “200”
- “200”
- “100”
127.0.0.1:6379> lpush list04 100 200 100 200 100 200
(integer) 6
127.0.0.1:6379> lrem list04 -2 100
(integer) 2
127.0.0.1:6379> lrange list04 0 -1 - “200”
- “100”
- “200”
- “200”
127.0.0.1:6379> lrem list04 0 200
(integer) 3
127.0.0.1:6379> lrange list04 0 -1 - “100”
127.0.0.1:6379>
○ ltrim
保留一定范围内的元素值,其他都删除
127.0.0.1:6379> lrange list01 0 -1 - “500”
- “400”
- “300”
- “200”
- “100”
- “one”
- “two”
- “three”
- “four”
- “five”
127.0.0.1:6379> ltrim list01 0 4
OK
分区 day08-redis 的第 9 页
OK
127.0.0.1:6379> lrange list01 0 -1 - “500”
- “400”
- “300”
- “200”
- “100”
127.0.0.1:6379>
○ lpop/rpop
从头部删除一个元素,从尾部删除一个元素,并且将删除的数据返
回
作用是取得list中头和尾的数据;
127.0.0.1:6379> lrange list01 0 -1 - “500”
- “400”
- “300”
- “200”
- “100”
127.0.0.1:6379> lpop list01
“500”
127.0.0.1:6379>
○ llen
查看元素的个数(list长度)
127.0.0.1:6379> lrange list01 0 -1 - “400”
- “300”
- “200”
- “100”
127.0.0.1:6379> llen list01
(integer) 4
127.0.0.1:6379>
○ lset
按照下标,修改元素的值
127.0.0.1:6379> lrange list01 0 -1 - “400”
- “300”
- “200”
- “100”
127.0.0.1:6379> lset list01 2 two
OK
127.0.0.1:6379> lrange list01 0 -1 - “400”
- “300”
- “two”
- “100”
127.0.0.1:6379>
两个list之间的操作(用来做消息队列确认机制) ○ rpoplpush
从第一个list尾部删除元素,
分区 day08-redis 的第 10 页
从第一个list尾部删除元素,
从第二个list头部插入元素
127.0.0.1:6379> lrange list01 0 -1 - “400”
- “300”
- “two”
- “100”
127.0.0.1:6379> lrange list02 0 -1 - “three”
- “two”
- “200”
- “one”
- “100”
127.0.0.1:6379> rpoplpush list01 list02
“100”
127.0.0.1:6379> lrange list02 0 -1 - “100”
- “three”
- “two”
- “200”
- “one”
- “100”
127.0.0.1:6379>
2.5set类型
没有排序,不允许元素重复,一个集合的数据结构
○ 向集合添加一些数据
sadd key 元素值
127.0.0.1:6379> sadd favor math english
(integer) 2
127.0.0.1:6379>
○ srem key member删除
127.0.0.1:6379> sadd favor history
(integer) 1
127.0.0.1:6379> srem favor mathv history
○ scard key 返回元素个数
127.0.0.1:6380> scard favor
(integer) 2
○ sismember key element判断元素是否在集合中
127.0.0.1:6380> sismember favor histroy
(integer) 0
分区 day08-redis 的第 11 页
(integer) 0
127.0.0.1:6380> sismember favor math
(integer) 1
127.0.0.1:6380>
○ srandmember key 随机抽取几个元素
127.0.0.1:6380> sismember favor math
(integer) 1
127.0.0.1:6380> srandmember favor 1
- “math”
127.0.0.1:6380> srandmember favor 1 - “english”
○ smembers key获取所有元素
127.0.0.1:6380> sadd favor english histry
(integer) 2
127.0.0.1:6380> smembers favor - “english”
- “histry”
- “math”
127.0.0.1:6380>
集合间的操作
○ sinter set1 set2 交集
127.0.0.1:6380> sadd favor1 english histroy math
(integer) 3
127.0.0.1:6380> sadd favor2 english math chinese
(integer) 3
127.0.0.1:6380> sinter favor1 favor2 - “english”
- “math”
127.0.0.1:6380>
○ suinon set1 set2 并集
127.0.0.1:6380> sunion favor1 favor2 - “english”
- “chinese”
- “histroy”
- “math”
127.0.0.1:6380>
○ sdiff set1 set2 差集属于set1属于set2的元素为差集
127.0.0.1:6380> sdiff favor1 favor2 - “histroy”
127.0.0.1:6380> sdiff favor2 favor1 - “chinese”
127.0.0.1:6380>
2.6ZSet结构(sorted set)
在集合的基础上绑定一个score作为排序的依据
比较典型的使用场景是排行榜系统。例如视频网站需要对用户上
传的视频做排行榜榜
单集合(集合内)
○ zadd key score memeber添加成员
127.0.0.1:6380> zadd result 10 xiaolaoshi
(integer) 1
127.0.0.1:6380> zadd result 20 wanglaoshi
(integer) 1
127.0.0.1:6380> zadd result 30 chenlaoshi
(integer) 1
127.0.0.1:6380>
○ zcard key计算成员个数同set
○ zscore key member获取某个成员的分数
127.0.0.1:6380> zadd result 30 chenlaoshi
(integer) 1
127.0.0.1:6380> zscore result chenlaoshi
“30”
127.0.0.1:6380> zadd result 40 chenlaoshi
(integer) 0
127.0.0.1:6380> zscore result chenlaoshi
“40”
127.0.0.1:6380>
计算成员的排名
○ zrank key member
127.0.0.1:6380> zrank result xiaolaoshi
(integer) 0
127.0.0.1:6380> zrank result wanglaoshi
(integer) 1
127.0.0.1:6380>
删除成员
○ zrem key member
127.0.0.1:6380> zrem result wanglaoshi
(integer) 1
127.0.0.1:6380> zrank result wanglaoshi
(nil)
127.0.0.1:6380>
○ 增加成员的分数
zincrby key increment member
127.0.0.1:6380> zincrby result 50 xiaolaoshi
“60”
分区 day08-redis 的第 13 页
“60”
127.0.0.1:6380>
返回指定排名范围的成员
○ zrange key start end
127.0.0.1:6380> zrange result 0 1
- “chenlaoshi”
- “xiaolaoshi”
127.0.0.1:6380>
返回指定分数范围的成员
○ zrangebysore key min max
返回指定分数范围成员个数
○ zcount key min max
删除指定排名内的升序元素
○ zremrangebyrank key start end
127.0.0.1:6380> zremrangebyrank result 0 1
(integer) 2
127.0.0.1:6380> zrange result 0 1
(empty list or set)
127.0.0.1:6380>
删除指定分数范围的成员
○ zremrangebyscore key min max
2 集合间的操作
zset数据中的所有交集并集的操作,是将结果输出到一个新的集合
中
交集 zinterstore destination numkeys key
destination:新的zset集合
numkeys:求交集,并集的个数
key:所有zset集合
127.0.0.1:6380> zadd result1 10 xiao
(integer) 1
127.0.0.1:6380> zadd result1 20 wang
(integer) 1
127.0.0.1:6380> zadd result2 30 xiao
(integer) 1
127.0.0.1:6380> zadd result2 40 wa
127.0.0.1:6380> zadd result2 40 wang
(integer) 1
127.0.0.1:6380> zinterstore out1 2 result1 result2
(integer) 2
127.0.0.1:6380> zrange out1 0 -1 withscores
- “xiao”
- “40”
- “wang”
- “60”
127.0.0.1:6380>
并集 zunionstore destionation numkeys key