第三节.Redis的使用

第三节.Redis的使用 

一.key的操作

redis里边,除了”\n”和空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字长度不做要求。

exists key          #测试指定key是否存在
del key1 key2 key3  #删除给定的key
type key            #返回给定的value的类型
keys pattern        #返回匹配指定模式的所有key
rename oldkey newkey#改名字
dbsize              #返回当前数据库的key数量
expire key seconds  #为key指定过期时间
ttl key             #返回key的剩余过期秒数
select db-index     #选择数据库
move key db-index   #将key从当前数据库移动到指定数据库
flushdb             #删除当前数据库中所有key
flushall            #删除所有数据库中的所有key
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

二.String字符串类型的操作

string是redis最基本的类型 
redis的string可以包含任何数据。包括jpg图片或者序列化的对象。 
单个value值最大上限是1G字节。 
如果只用string类型,redis就可以被看作加上持久化特性的memcache

set key value                   #设置key对应的值为string类型的value
mset key1 value1 key2 value2    #一次设置多个key的值
mget key1 key2                  #一次获取多个key的值
incr key                        #对key的值做加加操作,并返回新的值
decr key                        #对key的值做渐减操作,并返回新的值
incrby key integer              #同incr,加指定的值
decrby key integer              #同decr,减指定的值
append key value                #给指定key的字符串值追加value
substr key start end            #返回截取过的key的字符串值
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
127.0.0.1:6379> mset color1 red color2 blue
OK
127.0.0.1:6379> mget color1 color2
1) "red"
2) "blue"
127.0.0.1:6379> set num 3
OK
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> decr num
(integer) 3
127.0.0.1:6379> incrby num 10
(integer) 13
127.0.0.1:6379> incrby num 10
(integer) 23
127.0.0.1:6379> decrby num 5
(integer) 18
127.0.0.1:6379> decrby num 5
(integer) 13
127.0.0.1:6379> append color2 andyellow
(integer) 13
127.0.0.1:6379> get color2
"blueandyellow"
127.0.0.1:6379> substr color2 4 6
"and"
127.0.0.1:6379> 

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

三.List链表类型

(一)介绍

获得最新的10个登录用户信息: select * from user order by logintime desc limit 10; 
以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,数据库的负载比较高。必要情况还需要给关键字段(id或logintime)设置索引,索引也比较耗费系统资源 
如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新数据就删除一个旧数据。每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗

(二)应用

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。 
这使得list既可以用作栈,也可以用作队列

上进上出 :栈 
上进下出 :队列 

lpush key string    #在key对应list的头部添加字符串元素
rpop key            #在list的尾部删除元素,并返回删除元素
llen key 返回key      #对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
lrange key start end  #返回指定区间内的元素,下标从0开始
rpush key string        #同上,在尾部添加
lpop key            #从list的头部删除元素,并返回删除元素
ltrim key start end  #截取list,保留指定区间内元素
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
(三)事例

通过list链表保存登录系统的最新5个用户信息: 
jim xiaoli jack xiaoming linken mary tom 

设置一个list链表key newlogin,内部有5个元素:

127.0.0.1:6379> lpush newlogin tom
(integer) 1
127.0.0.1:6379> lpush newlogin mary
(integer) 2
127.0.0.1:6379> lpush newlogin linken
(integer) 3
127.0.0.1:6379> lpush newlogin xiaoming
(integer) 4
127.0.0.1:6379> lpush newlogin jack
(integer) 5
127.0.0.1:6379> keys *
1) "newlogin"
2) "color1"
3) "num"
4) "color2"
5) "name"
6) "age"
127.0.0.1:6379> lpush newlogin xiaoli
(integer) 6
127.0.0.1:6379> rpop newlogin
"tom"
127.0.0.1:6379> lrange newlogin 0 100
1) "xiaoli"
2) "jack"
3) "xiaoming"
4) "linken"
5) "mary"
127.0.0.1:6379> 
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

四.set类型的操作使用

redis的set是string类型的无序集合。 
set元素最大可以包含(2的32次方-1)个元素。 
关于set集合类型除了基本的添加删除操作, 
其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。 
注意:每个集合中的各个元素不能重复。

sadd key member             #添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中,返回0,key对应的set不存在返回错误
srem key member [memeber]    #从key对应set中移除给定元素,成功返回1
smove p1 p2 member          #从p1 对应set中移除member并添加到p2对应set中
scard key                   #返回set的元素个数
sismember key member        #判断member是否在set中
sinter key1 key2...keyn     #返回所有给定key的交集
sunion key1 key2...keyn      #返回所有给定key的并集
sdiff key1 key2...keyn      #返回所有给定key的差集
smembers key                #返回key对应set的所有元素,结果是无序的
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

该类型应用场合:qq好友推荐。 
tom朋友圈(与某某是好友):mary jack xiaoming wang5 wang6 
linken朋友圈(与某某是好友):yuehan daxiong luce wang5 wang6 

1.创建tomFri的set集合类型数据,内部有5个元素:

127.0.0.1:6379> sadd tomFri mary
(integer) 1
127.0.0.1:6379> sadd tomFri jack
(integer) 1
127.0.0.1:6379> sadd tomFri xiaoming
(integer) 1
127.0.0.1:6379> sadd tomFri wang5
(integer) 1
127.0.0.1:6379> sadd tomFri wang6
(integer) 1
127.0.0.1:6379> keys *
1) "tomFri"
127.0.0.1:6379> smembers tomFri
1) "xiaoming"
2) "wang5"
3) "mary"
4) "jack"
5) "wang6"
127.0.0.1:6379> 

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.再创建一个linkenFri的set集合key:

127.0.0.1:6379> sadd linkenFri yuehan
(integer) 1
127.0.0.1:6379> sadd linkenFri daxiong
(integer) 1
127.0.0.1:6379> sadd linkenFri luce
(integer) 1
127.0.0.1:6379> sadd linkenFri wang5
(integer) 1
127.0.0.1:6379> sadd linkenFri wang6
(integer) 1
127.0.0.1:6379> keys *
1) "linkenFri"
2) "tomFri"
127.0.0.1:6379> smembers linkenFri
1) "daxiong"
2) "wang5"
3) "luce"
4) "yuehan"
5) "wang6"
127.0.0.1:6379> 
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3.集合取交集、并集:

127.0.0.1:6379> sinter tomFri linkenFri
1) "wang5"
2) "wang6"
127.0.0.1:6379> sunion tomFri linkenFri
1) "xiaoming"
2) "wang5"
3) "mary"
4) "luce"
5) "yuehan"
6) "wang6"
7) "daxiong"
8) "jack"
127.0.0.1:6379> 

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.两个集合互取差集:

127.0.0.1:6379> sdiff tomFri linkenFri
1) "xiaoming"
2) "mary"
3) "jack"
127.0.0.1:6379> sdiff  linkenFri tomFri
1) "daxiong"
2) "luce"
3) "yuehan"
127.0.0.1:6379> 
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述

五.Sort Set排序集合类型

和set一样sorted set也是string类型元素的集合, 
不同的是每个元素都会关联一个权。 
通过权值可以有序的获取集合中的元素

该Sort set类型适合场合: 
获得热门帖子(回复量)信息:select * from message order by backnum desc limit 5; 
(以上需求可以通过简单sql语句实现,但是sql语句比较耗费MySQL数据库资源)

案例:利用sort set实现获取最热门的前5帖子信息 
这里写图片描述

排序集合中的每个元素都是值、权的组合 
(之前的set集合类型每个元素就只是一个 值) 
这里写图片描述

我们只做一个sort set排序集合,里边只保留5个元素信息,该5个元素是回复量最高的 
每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于在集合,回复量低的就被删除。

127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> zadd hotmessage 102 11  //添加
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 141 12
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 159 13
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 72 14
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 203 15
(integer) 1
127.0.0.1:6379[2]> keys *
1) "hotmessage"
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
//按照权由高到低的顺序获得具体元素值的信息
1) "15"
2) "13"
3) "12"
4) "11"
5) "14"
127.0.0.1:6379[2]> zadd hotmessage 189 16
(integer) 1
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "15"
2) "16"
3) "13"
4) "12"
5) "11"
6) "14"
127.0.0.1:6379[2]> zremrangebyrank hotmessage 0 0
(integer) 1
//把权最低的那个删掉 0 0表示删除第一个权;0 1表示删除第一个,第二个权;
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "15"
2) "16"
3) "13"
4) "12"
5) "11"
127.0.0.1:6379[2]> zrank hotmessage 12
//权由低到高获得元素排名
(integer) 1
127.0.0.1:6379[2]> zrank hotmessage 11
(integer) 0
127.0.0.1:6379[2]> zrevrank hotmessage 13
//权由高到低获得元素排名
(integer) 2
127.0.0.1:6379[2]> zcard hotmessage
//获得集合中元素个数
(integer) 5
127.0.0.1:6379[2]> zscore hotmessage 16
//根据元素值获得对应的权
"189"
127.0.0.1:6379[2]> zincrby hotmessage 100 12
//给指定的元素值增加一些权信息
"241"
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "12"
2) "15"
3) "16"
4) "13"
5) "11"
127.0.0.1:6379[2]> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值