这两天主要是学习了一下redis的基础语法。后面还有一些,争取明天完成redis语法的学习。
一.Redis的开启语法
1.redis服务运行正常
127.0.0.1:6379[1]> ping
PONG
2.选择数据库
127.0.0.1:6379> select 0 选择数据库0 总共16个数据库
3.清空当前的数据库
127.0.0.1:6379[1]> flushdb
4.开启数据库步骤
[root@localhost ~]# redis-server &
[root@localhost ~]# redis-cli
127.0.0.1:6379> 至此进入数据库
二.Redis的1个key+5种数类型的操作语法
1.key
k1 v1 这是准备工作:先在库0 中准备这样几个key和value,来练习key的操作。
word w1 注意:redis默认是有16个库:库0-库15
woord w2
set wod w3
1.keys语法
keys * 查询此表中所有的key。
keys wo?d wo?d 匹配 word , wood(?表示单个的字符)。
keys wo[or]d wo[or]d匹配 word, wood,不匹配wold、woord。
2.exists语法
127.0.0.1:6379> exists k1 判断k1是否存在?
(integer) 1 存在的话:返回个数1。
-----------------------------------------------------------------------------------
127.0.0.1:6379> exists k5 k5是否存在?
(integer) 0 不存在?返回个数0。
-----------------------------------------------------------------------------------
127.0.0.1:6379> exists k1 k2 k3 word 判断k1 k2 k3 word是否存在?
(integer) 2 存在的话:返回存在的个数!
3.move语法
127.0.0.1:6379> move k1 1 把k1移动到库1中
(integer) 1 移动成功:返回1。失败:返回0。
4.ttl语法
127.0.0.1:6379[1]> ttl k1 查看k1的剩余有效时间
(integer) -1 -1表示:永不过期。 -2:k1不存在。
5.expire语法
127.0.0.1:6379[1]> expire k1 20 设置k1的生命时间是20s。过时自动删除。
(integer) 1 设置成功:返回1。
6.type语法
127.0.0.1:6379> type k1 查看k1的存储的值的数据类型。
string none(k1不存在)、string、list、set、zset、hash。
7.rename语法
127.0.0.1:6379> rename k1 kk1 重命名k1为kk1
OK
8.del语法
127.0.0.1:6379> del k1 k2 删除k1、k2等
(integer) 2 删除成功的个数。
2.string 字符串
令中set/get居多。
username zhangsan
id 1620014 准备工作:设置这样几个string类型的数据
age 20
adddress suzhou
1.set语法(string赋值)
127.0.0.1:6379> set username zhanmusi 赋值,如果已经赋值了,就覆盖。
OK
2.get语法(string获取值)
127.0.0.1:6379> get username 获取值。
"zhanmusi"
--------------------------------------------------------------------------------------------
127.0.0.1:6379> get k34 key值不存在
(nil) 返回:nil
3.append语法 (尾部追加)
追加!
127.0.0.1:6379> append phone 188625841 key值不存在:创建key并赋值
(integer) 9 返回:字符串的长度。
127.0.0.1:6379> get phone
"188625841"
-------------------------------------------------------------------------------------
127.0.0.1:6379> append phone 81 key值存在:进行追加
(integer) 11 返回:字符串的总长度。
127.0.0.1:6379> get phone
"18862584181"
4.strlen语法(获取string长度)
127.0.0.1:6379> strlen phone 返回字符串的长度 。
(integer) 11
5.incr语法(string数字加1)
127.0.0.1:6379> incr age 对string类型的“数字”加1
(integer) 21 返回integer类型的加1后的数据。
------------------------------------------------------------------------------------------
127.0.0.1:6379> incr username incr只能操作string类型的“数字”
(error) ERR value is not an integer or out of range 报错
6.decr语法(string数字减1)
127.0.0.1:6379> decr age 同上
(integer) 20
127.0.0.1:6379> decr age
(integer) 19
7.incrby语法(string数字增加任意数值)
127.0.0.1:6379> incrby age 2 有这个语法,还要上面的incr干啥啊?
(integer) 22
8.decrby语法(string增加任意数值)
127.0.0.1:6379> decrby age 2 同上
(integer) 20
9.getrange语法(截取“字符”)
127.0.0.1:6379> getrange username 0 2 0表示第一个字符
"zha"
--------------------------------------------------------------------------------------------------
127.0.0.1:6379> getrange username -4 -1 -1表示最后一个字符
"musi"
10.setrange语法(指定下标开始替换)
127.0.0.1:6379> setrange address 2 nan 从下标2开始进行替换
(integer) 6
127.0.0.1:6379> get address
"sunanu" 结果:suzhou变sunan
11.setex语法(规定生命时间)
127.0.0.1:6379> setex phone 20 151515151 设置生命时间,新值覆盖
OK
12.mset语法(赋值:多键值对)
127.0.0.1:6379> mset k1 y1 k2 v2 k3 v3 同时赋值多个键值对
OK
13.mget语法(获值:多键值对)
127.0.0.1:6379> mget k1 k2 k3 同时获取多个键值对
1) "y1"
2) "v2"
3) "v3"
3.list 有序可重复列表/链表(l)
命令中l居多。
Redis的list列表是:一个个字符串组成的一个无序可重复列表。
列表类型的数据操作总的思想是通过key和下标操作value。
1.lpush语法(list赋值:逆序赋值)
127.0.0.1:6379[1]> lpush liebiao01 abandon view java c# 这就是给无序list赋值的语法
(integer) 4
127.0.0.1:6379[1]> lpush liebiao01 python js jsp
(integer) 7 返回的是:这列表的长度(包含的 字符串个数)
127.0.0.1:6379[1]> lrange liebiao01 0 -1
1) "jsp" 3
2) "js" 2
3) "python" 1 注意:轮到谁,谁就在左边(最前面)。
4) "c#" 4 最后一个人永远在最左边。
5) "java" 3
6) "view" 2
7) "abandon" 1
2.rpush语法(list赋值:顺序赋值)
127.0.0.1:6379[1]> rpush liebiao02 view java c#
(integer) 3
127.0.0.1:6379[1]> rpush liebiao02 python js jsp
(integer) 6
127.0.0.1:6379[1]> lrange liebiao02 0 -1
1) "view"
2) "java"
3) "c#"
4) "python" 注意:轮到谁,谁就在最右边(最后边),所以是顺序赋值。
5) "js"
6) "jsp"
3.lrange语法(获取list的部分元素)
在上面已经用过了。
4.lpop语法(移除第一个元素,并返回之值)
127.0.0.1:6379[1]> lpop liebiao
"view"
---------------------------------------
127.0.0.1:6379[1]> lpop liebiao
"java"
5.rpop语法(移除最后一个元素,并返回之值)
127.0.0.1:6379[1]> rpop liebiao
"jsp"
6.lindex语法(按下标获取某个元素)
127.0.0.1:6379[1]> lindex liebiao 0 0:获取第一个元素
"c#"
127.0.0.1:6379[1]> lindex liebiao 2 2:获取第三个元素
"js"
127.0.0.1:6379[1]> lindex liebiao -2 -2:获取倒数第二个元素
"python"
127.0.0.1:6379[1]> lindex liebiao -1 -1:获取倒数第一个元素
"js"
7.llen语法(获取列表长度)
127.0.0.1:6379[1]> llen liebiao
(integer) 3
8.lrem语法(移除指定元素,指定个数)
语法:lrem key count value
127.0.0.1:6379[1]> rpush liebiao china china usa china uk china italia
(integer) 7
127.0.0.1:6379[1]> lrem liebiao 2 china 移除list最左边的两个China
(integer) 2 返回移除成功的个数
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "usa" 注意:这个count
2) "china" count>0:从左开始移除指定个数的china
3) "uk" count<0:从右开始移除指定个数china
4) "china" count=0:移除所有的china
5) "italia"
9.ltrim语法(截取指定元素并赋值给原来的list,区别于lrange)
注意:lrange是获取部分元素,原来的list是不变的。
ltrim 是截取部分元素,然后赋给原来的list。
127.0.0.1:6379[1]> ltrim liebiao 1 2 截取原lsit的下标是1到2的元素,赋给原来的list。
OK
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "china" 注意:string是没有这种操作的。只有getrange。
2) "uk"
10.lset语法(指定的下标,更改值)
127.0.0.1:6379[1]> lset liebiao 0 zhongguo 下标是0的元素,值更改为:zhogguo
OK
11.linsert 语法(指定的value之前/后插入元素)
语法:linsert key before/after pivot value
127.0.0.1:6379[1]> linsert liebiao after zhongguo beijing 在元素zhongguo之后插入beijing
(integer) 3
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "zhongguo"
2) "beijing"
3) "uk"
4.set 无序不重复集合(s)
命令中s居多。
Redis的set是string类型的无序不重复集合。
集合类型的数据操作总的思想是通过key确定集合
1.sadd语法(set赋值)
127.0.0.1:6379[1]> sadd set01 china usa italia china usa 注意:这里是有重复的元素的,
(integer) 3 返回set中收录的元素个数。
2.smembers语法(展示set中的全部元素)
127.0.0.1:6379[1]> smembers set01 展示:所有的元素
1) "china"
2) "italia" 上面的重复的赋值直接忽略。
3) "usa"
3.sismember语法(判断这个元素是否在此set中)
127.0.0.1:6379[1]> sismember set01 zhongguo
(integer) 0 有就返回:1 没有就返回:0
4.scard(set中有几个元素)
127.0.0.1:6379[1]> scard set01
(integer) 3
5.srem语法(移除指定的多个value)
语法:srem key value1 value2 value3
127.0.0.1:6379[1]> srem set01 china usa 移除指定的value
(integer) 2
6.srandmember语法(随机展示一个元素)
语法:srandmember key count 感觉没啥用
127.0.0.1:6379[1]> sadd set01 beijing shanghai jiangsu shangdong
(integer) 4
127.0.0.1:6379[1]> srandmember set01 count不写:随机展示一个元素
"beijing"
127.0.0.1:6379[1]> srandmember set01 3 count==3:随机展示三个元素
1) "beijing"
2) "jiangsu"
3) "shanghai"
7.spop语法(随机弹出/移除一个或多个元素)
127.0.0.1:6379[1]> sadd set01 beijing shanghai jiangsu shangdong chongqing sichuan yunnan riben taiwan HK
(integer) 10
127.0.0.1:6379[1]> spop set01 没有count:随机删除一个元素
"sichuan"
127.0.0.1:6379[1]> spop set01 3 count==3: 随机删除三个元素
注意:为何是随机?比较lpop(弹出左1)、rpop(弹出右1)!
因为:list有序、set无序。
8.smove语法(移动某元素至另一个set)
127.0.0.1:6379[1]> sadd set02 zhongguo riben meiguo
(integer) 3
127.0.0.1:6379[1]> smove set02 set01 meiguo 把set02中的meiguo移动到set01中
(integer) 1
9.sdiff(返回两个集合的差集)
127.0.0.1:6379[1]> sdiff set01 ste02 返回两个集合的差集!感觉没啥用。
10.sinter(返回两个集合的交集)
127.0.0.1:6379[1]> sinter set01 set02 返回set01和set02的交集!感觉还是没啥用。
1) "riben"
11.sunion(返回两个集合的并集)
127.0.0.1:6379[1]> sunion set01 set02 返回两个集合的并集。
5.hash(h)数据存储
Redis的hash 是一个key和value的映射表。
hash类型的数据操作总的思想是:通过key和field操作value,
key<------->field:value field:value field:value field:value
key :数据标识
field :域
value:我们感兴趣的业务数据
1.hset语法(hash赋值)
127.0.0.1:6379[1]> hset user name zhangsan age 20 id 10010
(integer) 3 3: 插入成功的filed:value个数
注:其中key是user,有三对filed:value
2.hget语法(获取单个filed的值)
127.0.0.1:6379[1]> hget user name
"zhangsan"
3.hmset语法(hash赋值)
127.0.0.1:6379[1]> hmset user name zhangsan age 20 id 10010
OK
真不知道这和hset有啥区别???
4.hmget语法(获取多个filed的值)
127.0.0.1:6379[1]> hmget user name age id
1) "zhangsan"
2) "20"
3) "10010"
5.hgetall语法(展示所有的filed:value)
127.0.0.1:6379[1]> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "20"
5) "id"
6) "10010"
6.hdel语法(删除一个、多个filed:value)
127.0.0.1:6379[1]> hdel user name age 删除name和age这两个filed
(integer) 2
127.0.0.1:6379[1]> hgetall user
1) "id"
2) "10010"
7.hlen语法(获取filed的个数)
127.0.0.1:6379[1]> hlen user
(integer) 1
8.hexists语法(判断是否存在某个filed)
127.0.0.1:6379[1]> hexists user age
(integer) 0 不存在:返回0
127.0.0.1:6379[1]> hexists user id
(integer) 1 存在:返回1
9.hkeys语法(展示所有的filed)
127.0.0.1:6379[1]> hkeys user
1) "id"
10.hvals语法(展示hash中所有的值)
127.0.0.1:6379[1]> hvals user 展示hash中所有的值:列表展示
1) "10010"
2) "zhangsan"
3) "20"
11.hincrby语法(指定的filed增加指定的数)
127.0.0.1:6379[1]> hincrby user age 30 年龄增加30
(integer) 70 增加完的年龄
12.hincrbyfloat语法(指定的数增加指定的浮点型数)
127.0.0.1:6379[1]> hincrbyfloat user age 10.5 年龄增加10.5
"80.5" 增加完的年龄数
13.hsetnx语法(什么垃圾语法)
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
6.zset有序不重复(z)
Redis的zset集合是string类型的有序不重复的集合。
zset集合每个元素都会关联一个分数(分数可以重复)
1.zadd语法(zset赋值)
语法 : zadd key score member score member score member
127.0.0.1:6379[1]> zadd city 3000 beijing 2800 shanghai 2000 jiangsu 1800 zhejiang
(integer) 4
2.zrange语法(展示指定下标区间的元素)
127.0.0.1:6379[1]> zrange city 0 -1 不带分数展示:从头到尾
1) "zhejiang"
2) "jiangsu"
3) "shanghai"
4) "beijing"
---------------------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrange city 0 -1 withscores 带分数展示:从头到尾
1) "zhejiang"
2) "1800"
3) "jiangsu"
4) "2000"
5) "shanghai"
6) "2800"
7) "beijing"
3.zrangebyscore语法(zset排序语法)
语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
127.0.0.1:6379[1]> zadd city 100 suzhou 90 nanjing 80 wuxi 60 nantong 50 changzhou 40 xuzhou 35 huaian 30 yangzhou 20 yancheng 15 taizhou 10 zhenjiang 8 lianyungang 6 suqian
(integer) 13 准备13个数据先
---------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 100 获取[90-100]之间的数据。
1) "nanjing"
2) "suzhou"
---------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 100 withscores 获取[90-100]之间的数据(带分数)
1) "nanjing"
2) "90"
3) "suzhou"
4) "100"
-------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 (100 withscores 获取[90-100)之间的数据(带分数)
1) "nanjing"
2) "90"
----------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 20 100 limit 1 4 获取[20-40]之间的数据。
1) "yangzhou" 从下标1开始。
2) "huaian" 截取结果中的4个数据。
3) "xuzhou"
4) "changzhou"
4.zrem语法(移除指定的一个、多个元素)
127.0.0.1:6379[1]> zrem city yancheng zhenjiang
(integer) 2
5.zcard语法(统计zset中的元素个数)
127.0.0.1:6379[1]> zcard city
(integer) 11
6.zcount语法(统计指定分数区间,元素个数)
127.0.0.1:6379[1]> zcount city 20 100 统计分数在[20-100]之间的元素个数
(integer) 8
7.zrank语法(获取指定元素的排名:从小到大)
127.0.0.1:6379[1]> zrank city suqian suqian排名最小:返回的是0。
(integer) 0
8.zscore语法(获取指定元素的分数)
127.0.0.1:6379[1]> zscore city nanjing nanjing分数是:90
"90"
127.0.0.1:6379[1]> zscore city xian xian不存在:nil
(nil)
9.zrevrank语法(获取指定元素的排名:从大到小)
127.0.0.1:6379[1]> zrevrank city suzhou suzhou排名1
(integer) 0
127.0.0.1:6379[1]> zrevrank city suqian suqian排名11
(integer) 10
10.zrevrange语法(指定下标区间:分数从大到小排序)
127.0.0.1:6379[1]> zrevrange city 0 2 withscores
1) "suzhou"
2) "100"
3) "nanjing"
4) "90"
5) "wuxi"
6) "80"
11.zrevrangebyscore语法(指定分数区间,从大到小排序)
127.0.0.1:6379[1]> zrevrangebyscore city 100 50
1) "suzhou"
2) "nanjing"
3) "wuxi"
4) "nantong"
5) "changzhou"
上面是自己做的笔记,并且全部敲了一下加深了一下印象。