花店网站建设方案关键词优化师
Redis 数据类型
- redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型
1. 字符串操作
- set key value [ex seconds] [px milliseconds] [nx|xx]
- 设置key及值,过期时间可以使用秒或毫秒为单位
- [ex seconds]是设置过期时间的,单位是秒,默认是永不过期;[px milliseconds]也是设置过期时间的,单位是毫秒;[nx|xx]中的nx是当设置变量的变量存在时,就不再赋值这个变量了,xx是当这个变量存在时,赋入新的值。
-
- ex 设置过期时间
//创建key名=name,key值=bob,过期时间为10秒
127.0.0.1:6379> set name bob ex 10
OK
127.0.0.1:6379> ttl name
(integer) 4 ---还剩下四秒就过期了
127.0.0.1:6379> ttl name
(integer) -2 ---已经过期了
-
- nx 当没有输入key名,就定义存储,反之如果有这个key名时,就不定义存储数据了
127.0.0.1:6379> set id 88
OK
127.0.0.1:6379> keys *
1) "id"
127.0.0.1:6379> get id
88
127.0.0.1:6379> set id 99 nx ------返回值是(nil),意思就是没有存储id这个变量
(nil)
127.0.0.1:6379> get id ---因为id这个key名已经存在所以set id 99 nx操作无效
"88"
- 3. xx 意思是不管key名存在不存在,都对这个key名进行定义并存储(默认就是xx)
127.0.0.1:6379> get id --查看id的key值
"99"
127.0.0.1:6379> set id 100 xx --覆盖key名为id的值为100
OK
127.0.0.1:6379> get id ---查看id的值99改为100
"100"
- setrange key offset value ------从偏移量开始复写key的特定位的值
127.0.0.1:6379> set name bob -----创建key名=name,key值=bob
OK
127.0.0.1:6379> get name ----查看key名=name的值
"bob"
127.0.0.1:6379> setrange name 2 y -----修改从key值=bob的第二个字符开始修改为y,计算是从0开始的。
(integer) 3
127.0.0.1:6379> get name ----查看name的值
"boy"
127.0.0.1:6379> setrange name 0 andy
(integer) 4
127.0.0.1:6379> get name
"andy"
- strlen key ------统计字符串长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> strlen name ----查看name值的字符串长度为4
(integer) 4
- append key value -------key值存在则追加,不存在则创建key及value,返回key长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> append name db --在key值为andy的后面添加db这两个字符。
(integer) 6
127.0.0.1:6379> get name ---查看name的值
"andydb"127.0.0.1:6379> keys *
1) "name"
2) "id"
127.0.0.1:6379> append age 28 ----可以看的出来age不存在,所以这条命令意思是创建key名=age,key值=28
(integer) 2
127.0.0.1:6379> get age
"28"
- setbit key offset value ------位存储
- bitcount key —查询key值为1的数量
- 1T=1024G、1G=1024M、1M=1024K、1K=1024字节、1字节=8位、1位=0或1
- 使用场景:
-
记录网站用户上线频率,如用户A上线了多少天等类似的数据
-
如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可。
-
这样,即使网站运行10年,每个用户仅占用10*365比特位即456字节。
- 对key所存储的字串,设置或清除特定偏移量上的位(bit)
- value的值可以为1或0,offset为0~2^32之间
- key不存在,则创建新的key
//假如1位在线天数,0代表不在线,yy为用户
127.0.0.1:6379> setbit yy 1 1
(integer) 0
127.0.0.1:6379> setbit yy 2 0
(integer) 0
127.0.0.1:6379> setbit yy 3 1
(integer) 0
127.0.0.1:6379> setbit yy 4 1
(integer) 0
127.0.0.1:6379> setbit yy 5 0
(integer) 0
127.0.0.1:6379> setbit yy 6 1
(integer) 0
127.0.0.1:6379> setbit yy 7 1
(integer) 0
127.0.0.1:6379> bitcount yy ---统计用户yy一周在线天数为5
(integer) 5
- decr key -----将key中的值减1,key不存在则先初始化为0,再减1
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> decr age ---age的值为28-1=27
(integer) 27
127.0.0.1:6379> get age
"27"127.0.0.1:6379> decr bb ----当bb不存在时就是0-1=-1
(integer) -1
127.0.0.1:6379> get bb
"-1"
- decrby key decrement ---------将key中的值,减去decrement。decrement只能为整数
127.0.0.1:6379> get age
"27"
127.0.0.1:6379> decrby age 2 age值27-2=25
(integer) 25
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> decrby age 5 age值25-5=20
(integer) 20
127.0.0.1:6379> get age
"20"
- incr key --------将key的值加1,如果key不存在,则初始为0后再加1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age age的值加一:20+1=21
(integer) 21127.0.0.1:6379> keys *
1) "yy"
2) "bb"
3) "id"
4) "name"
5) "age"
127.0.0.1:6379> incr ys ys不存在,所以是0+1=1
(integer) 1
127.0.0.1:6379> get ys
"1"
- incrby key increment ------将key的值增加increment。decrement只能为整数
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 20 age的值加二十:21+20=41
(integer) 41
127.0.0.1:6379> get age
"41"
- incrbyfloat key increment -----为key中所储存的值加上浮点数增量 increment
127.0.0.1:6379> set id 20
OK
127.0.0.1:6379> get id
"20"
127.0.0.1:6379> incrbyfloat id 0.3 ---id的值加零点三:20+0.3=20.3
"20.3"
127.0.0.1:6379> get id
"20.3"
- getrange key start end
- 返回字串值中的子字串,截取范围为start和end
- 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
127.0.0.1:6379> set likes "Play basketball"
OK
127.0.0.1:6379> get likes
"Play basketball"127.0.0.1:6379> getrange likes 0 3 ---查看likes值的第一个字符到第四个字符,默认从0开始算的。
"Play"127.0.0.1:6379> getrange likes -2 -1 ---查看likes指的倒数第二字符和倒数第一。
"ll"
2. List列表
2.1. List列表简介
- Redis的list是一个字符队列
- 先进后出,变量中先存进去的值,是在最后显示出来的
- 一个key可以有多个值
2.2. List列表命令操作
- lpush key value [value…] -----将一个或多个值value插入到列表key的表头,key不存在,则创建key
- lrange key start stop ----从开始位置读取key的值到stop结束
127.0.0.1:6379> lpush hostname www.baidu.com www.jd.com www.taobao.com ---创建hostname的值为www.baidu.com、www.jd.com、www.taobao.com
(integer) 3
127.0.0.1:6379> lrange hostname 0 -1 ---查看hostname列表的值从第一个到最后一个。
1) "www.taobao.com"
2) "www.jd.com"
3) "www.baidu.com"
127.0.0.1:6379> lrange hostname 0 1
1) "www.taobao.com"
2) "www.jd.com"127.0.0.1:6379> lpush hostname www.jk.com www.sxy.com ---在hostname值追加www.jk.com、www.sxy.com
(integer) 5
127.0.0.1:6379> lrange hostname 0 -1 ---查看hostname所有的值
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
- lpop key -----移除并返回列表头元素数据(即删除列表中的第一个值),key不存在则返回nil
127.0.0.1:6379> lrange hostname 0 -1
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
127.0.0.1:6379> lpop hostname ---删除hostname第一个值:1) "www.sxy.com"
"www.sxy.com"
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
- llen key ----返回列表key值的数量
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> llen hostname ---查看hostname有多少个值
(integer) 4
- lindex key index ----查看key列表的某个值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"127.0.0.1:6379> lindex hostname -1 ---查看hostname最后一个值。
"www.baidu.com"
- lset key index value -----修改指定位置的key值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> lset hostname -1 www.sxy.com ---修改hostname最后一个值为www.sxy.com
OK
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
- rpush key value [value…] —在key值的最后面插入一个或者多个值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
127.0.0.1:6379> rpush hostname AAAA BBBB CCCC
(integer) 7
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
- rpop key — 删除key值的末尾的值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
127.0.0.1:6379> rpop hostname
"CCCC"
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
3. Hash表
3.1. Hash表介绍
-
是一个string类型的field和value的映射表
-
一个key可对应多个field,一个field对应一个value
-
将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存
3.2. Hash表命令操作
- hset key field value ----将hash表中field值设置为value,一次给一个或多个列赋值
- hget key field -----获取hash表中field的值
- hmget key field [field …] ----获取hash表的一个列名值和多个列名值
- hgetall key ----获取hash表中的所有列名和列值
- hkeys key ----获取hash表中的所有列名
- hvals key ----获取hash表中的所有列值
- hdel key field [field …] ----删除hash表的一个列名的值和多个列名的值
127.0.0.1:6379> hset stuinfo name bob sex boy age 18 ---创建hash表名为stuinfo,列名名=name 列值=bob,列名=sex 列值=boy,列名=age 列值=18
(integer) 3127.0.0.1:6379> hget stuinfo name ---查看hash表名=stuinfo,列名=name的值
"bob"127.0.0.1:6379> hmget stuinfo name sex age ---获取hash表stuinfo的列名为:name、sex、age的值
1) "bob"
2) "boy"
3) "18"
127.0.0.1:6379> hgetall stuinfo ---获取hash表stuinfo的所有列名和列值
1) "name"
2) "andy"
3) "sex"
4) "boy"
5) "age"
6) "18"127.0.0.1:6379> hkeys stuinfo ---获取hash表stuinfo的所有列名
1) "name"
2) "sex"
3) "age"127.0.0.1:6379> hvals stuinfo ---获取hash表stuinfo的所有列值
1) "andy"
2) "boy"
3) "18"127.0.0.1:6379> hkeys stuinfo
1) "name"
2) "sex"
3) "age"
127.0.0.1:6379> hdel stuinfo name sex ----删除hash表stuinfo的列名为name、sex和值
(integer) 2
127.0.0.1:6379> hkeys stuinfo
1) "age"