空间数据云网站贵阳网站建站建设定制
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"