hset key field value:key 是 相当于变量名,filed是value中的key-value对中的key,但是面向对象时表示一个对象的属性名称, value表示属性的值
127.0.0.1:6379> hset user username hanlaoshi
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hset user location beijing
(integer) 1
127.0.0.1:6379> type user
hash
127.0.0.1:6379>
hget key field
127.0.0.1:6379> hget user username
"hanlaoshi"
127.0.0.1:6379>
hexists key field:判断hash类型中的属性值是否存在
127.0.0.1:6379> hexists user haha
(integer) 0
127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379>
hmset和hmget:批量设置,不支持分布式
127.0.0.1:6379> hmset student age 19 name wangxiaoxiao gender male
OK
127.0.0.1:6379> hmget student age name gender
1) "19"
2) "wangxiaoxiao"
3) "male"
127.0.0.1:6379>
Hdel key field:删除属性和值
127.0.0.1:6379> hdel student age
(integer) 1
127.0.0.1:6379> hget student age
(nil)
127.0.0.1:6379>
Hkeys Hvals:单独获取对象的属性名,或者属性的值
127.0.0.1:6379> hkeys user
1) "name"
2) "username"
3) "age"
4) "location"
127.0.0.1:6379> hvals user
1) "haha"
2) "hanlaoshi"
3) "18"
4) "beijing"
127.0.0.1:6379>
Hlen key:获取属性个数(长度)
127.0.0.1:6379> hlen user
(integer) 4
127.0.0.1:6379> hlen student
(integer) 2
127.0.0.1:6379>
Hincreby:和String类型特性区别的一个体现
String对应存储对象数据:需要在redis中修改对象某个属性的数值(10-15)
{“id”:1623125,"age":10,“name”:"hanlaoshi"}
不能直接在redis中获取age将10变成15,
从redis读出来,转化成对象,对象set属性,重新放回redis
和hash存储对象数据
user id 1623125
age 10
name hanlaoshi
Hincreby user name 5
List链表数据结构
list01--{“200”,"300","400"}
查看链表list和设置链表数据Lpush(左表示上,右表示下)
lpush key value [vlaues]:对于一个链表,从左(上)开始插入数据;
lrange key 起始下标 结束下标(展示范围,结束下标是-1表示到尾部)
127.0.0.1:6379> lpush mylist01 100 200 300
(integer) 3
127.0.0.1:6379> lrange mylist 0 1
(empty list or set)
127.0.0.1:6379> lrange mylist01 0 1
1) "300"
2) "200"
127.0.0.1:6379>
Rpush key value:从下向上插入数据
127.0.0.1:6379> rpush mylist01 400
(integer) 4
127.0.0.1:6379> lrange mylist01 0 -1
1) "300"
2) "200"
3) "100"
4) "400"
127.0.0.1:6379>
Linsert:从链表中间操作数据,从左侧找到第一个相同元素插入数据(before after)
linsert mylist01 before 100 one
在mylist01链表中,找到100这个元素,从前插入数据one 300 200 one 100 400
127.0.0.1:6379> linsert mylist01 before 100 one
(integer) 5
127.0.0.1:6379> lrange mylist01 0 -1
1) "300"
2) "200"
3) "one"
4) "100"
5) "400"
127.0.0.1:6379> lpush mylist01 100
(integer) 6
127.0.0.1:6379> lrange mylist01 0 -1
1) "100"
2) "300"
3) "200"
4) "one"
5) "100"
6) "400"
127.0.0.1:6379> linsert mylist01 after 100 two
(integer) 7
127.0.0.1:6379> lrange mylist01 0 -1
1) "100"
2) "two"
3) "300"
4) "200"
5) "one"
6) "100"
7) "400"
127.0.0.1:6379>
lset key index value将下标对应的数据修改
127.0.0.1:6379> lset mylist01 1 2
OK
127.0.0.1:6379> lrange mylist01 0 -1
1) "100"
2) "2"
3) "300"
4) "200"
5) "one"
6) "100"
7) "400"
127.0.0.1:6379>
Lrem:这个没有rrem,内部逻辑涉及到了从下往上删除
lrem key count value:从左向右寻找count个value相同值元素删除。
count>0从左往右删
count=0 全删
count<0从右往左删
127.0.0.1:6379> lpush mylist01 200 200 200
(integer) 9
127.0.0.1:6379> lrange mylist01 0 -1
1) "200"
2) "200"
3) "200"
4) "2"
5) "300"
6) "200"
7) "one"
8) "100"
9) "400"
127.0.0.1:6379> lrem mylist01 -2 200
(integer) 2
127.0.0.1:6379> lrange mylist01 0 -1
1) "200"
2) "200"
3) "2"
4) "300"
5) "one"
6) "100"
7) "400"
127.0.0.1:6379> lrem mylist01 0 200
(integer) 2
127.0.0.1:6379>
ltrim 保留链表的范围内的数据元素
ltrim key 起始位置 结束位置(-1表示到尾部)
127.0.0.1:6379> ltrim mylist01 4 6
OK
127.0.0.1:6379> lrange mylist01 0 -1
1) "400"
127.0.0.1:6379>
两个链表的数据交互
lpop 从list头部删除元素,返回删除结果(类似remove) 秒杀逻辑,可以利用list对象实现阻止超卖现象
127.0.0.1:6379> lrange mylist01 0 -1
1) "six"
2) "five"
3) "four"
4) "three"
5) "two"
6) "one"
7) "400"
127.0.0.1:6379> lpop mylist01
"six"
127.0.0.1:6379> lrange mylist01 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
6) "400"
127.0.0.1:6379>
rpoplpush:从第一个list的尾部删除数据,移动到第二个list的头部添加
127.0.0.1:6379> rpoplpush mylist01 mylist02
"400"
127.0.0.1:6379> lrange mylist02 0 -1
1) "400"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379>