Redis04_五大基本数据类型


String类型

append 给指定key追加值,如果当前key不存在,就相当于set key
strlen 获取字符串的长度

127.0.0.1:6379> append name hello
(integer) 8
127.0.0.1:6379> get name
"BLUhello"
127.0.0.1:6379> strlen name
(integer) 8

incr 将key中存储的数字值加1 i++
decr 将key中存储的数字值减1 i- -
incrby 将key中存储的数字值增加指定值 i+=10
decrby 将key中存储的数字值减少指定值 i-=7

127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incrby views 10
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> decrby views 7
(integer) 3
127.0.0.1:6379> get views
"3"

getrange 截取字符串(闭区间),0到-1表示获取全部字符串
setrange 替换字符串

127.0.0.1:6379> set key1 hello,BLU!
OK
127.0.0.1:6379> getrange key1 0 3
"hell"
127.0.0.1:6379> getrange key1 0 -1
"hello,BLU!"
127.0.0.1:6379> setrange key1 2 xx
(integer) 10
127.0.0.1:6379> get key1
"hexxo,BLU!"

setex 设置key同时设置过期时间:set with expire
setnx 创建key(如果不存在):set if not exist

127.0.0.1:6379> setex key2 30 Hello!!
OK
127.0.0.1:6379> ttl key2
(integer) 22

127.0.0.1:6379> setnx key3 BLUBLU
(integer) 1
127.0.0.1:6379> setnx key3 BLUBLUBLU
(integer) 0
127.0.0.1:6379> get key3
"BLUBLU"

mset 批量创建key
mget 批量获取key
msetnx 批量创建key(如果不存在) (属于原子性操作,只要有一个存在,都会创建失败)

127.0.0.1:6379> mset key1 v1 key2 v2 key3 v3
OK
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> mget key1 key2 key3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx key1 v1 key2 v2 key3 v3 key4 v4
(integer) 0
127.0.0.1:6379> mget key1 key2 key3 key4
1) "v1"
2) "v2"
3) "v3"
4) (nil)

保存对象的两种方式

set user:1 {
    
    name:zhangsan,age:3}
OK
127.0.0.1:6379> get user:1
"{name:zhangsan,age:3}"


127.0.0.1:6379> mset user:1:name zhangsan user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "18"

getset 获取key的同时创建/修改值

127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mysql
"redis"
127.0.0.1:6379> get db
"mysql"

List类型

本质上是一个链表,在两边插入或改动值效率较高,更新中间元素效率偏低

左存右取 相当于 队列
左存左取 相当于

lpush は値をリストヘッドに
挿入 しますrpush は値をリストに挿入しますテール
lrange はリスト内の特定の間隔の値を取得します0から-1はすべて取得することを意味します

127.0.0.1:6379> lpush list1 one
(integer) 1
127.0.0.1:6379> lpush list1 two
(integer) 2
127.0.0.1:6379> lpush list1 three
(integer) 3
127.0.0.1:6379> rpush list1 right
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lrange list1 0 1
1) "three"
2) "two"

lpop リスト値の先頭を削除します
rpush 値リストの末尾を削除します

lindex はリストの値を添え字(0から開始)で取得します
llen はリストの長さを取得します

127.0.0.1:6379> lpop list1
"three"
127.0.0.1:6379> lrange list1 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list1
"right"
127.0.0.1:6379> lrange list1 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list1 0
"two"
127.0.0.1:6379> llen list1
(integer) 2

リスト内に重複する値が存在する可能性があります
。lrem は指定された数の指定された値を削除します
。ltrim はリストを添字で切り捨てます
。rpoplpush は指定されたリストの末尾の値を削除し、新しいリストの先頭に保存します。

127.0.0.1:6379> lpush list1 three
(integer) 3
127.0.0.1:6379> lpush list1 three
(integer) 4
127.0.0.1:6379> lpush list1 three
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "three"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> lrem list1 2 three
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> ltrim list1 0 1
OK
127.0.0.1:6379> lrange list1 0 -1
1) "three"
2) "two"
127.0.0.1:6379> rpoplpush list1 list2
"two"
127.0.0.1:6379> lrange list1 0 -1
1) "three"
127.0.0.1:6379> lrange list2 0 -1
1) "two"

指定されたリストが存在するかどうか判別するために存在します
。lset は、リスト内の指定された添え字の値を変更します(リストが存在しないか、指定された添え字が存在しない場合、エラーが報告されます)

127.0.0.1:6379> exists list1
(integer) 0
127.0.0.1:6379> lset list1 0 item
(error) ERR no such key
127.0.0.1:6379> lpush list1 v1
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "v1"
127.0.0.1:6379> lset list1 0 item1
OK
127.0.0.1:6379> lset list1 1 item2
(error) ERR index out of range

linsert は、リスト内の指定された値の前後に(前後に)値を挿入します

127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist world
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> linsert mylist before world beautiful
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "beautiful"
3) "world"
127.0.0.1:6379> linsert mylist after world everyday
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "beautiful"
3) "world"
4) "everyday"

セットタイプ

set 中的元素无序且不能重复
sadd 往set里添加值
smembers 获取set里的值
sismember 判断指定值在set里是否存在,存在返回1,不存在返回0
scard 获取set中元素的数量
srem 移除set中指定的元素
srandmember 从set中随机取出指定个数的元素
spop 从set中随机移除一个元素
smove 将set中的指定元素移出至另一个set

127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset BLU
(integer) 1
127.0.0.1:6379> sadd myset happy
(integer) 1
127.0.0.1:6379> sadd myset everyday
(integer) 1
127.0.0.1:6379> smembers myset
1) "happy"
2) "BLU"
3) "everyday"
4) "hello"
127.0.0.1:6379> sismember myset BLU
(integer) 1
127.0.0.1:6379> scard myset
(integer) 4
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> srandmember myset
"happy"
127.0.0.1:6379> srandmember myset 2
1) "happy"
2) "everyday"
127.0.0.1:6379> spop myset
"everyday"
127.0.0.1:6379> smembers myset
1) "happy"
2) "BLU"
127.0.0.1:6379> smove myset myset2 BLU
(integer) 1
127.0.0.1:6379> smembers myset
1) "happy"
127.0.0.1:6379> smembers myset2
1) "BLU"

sdiff 比较a集合与b集合,返回a集合独有的元素(差集)
sinter 比较a集合与b集合,返回两集合共有的元素(交集)
例子:查询两个用户的共同关注、共同好友

sunion 比较a集合与b集合,返回两集合所有的元素(并集)

sadd set1 a
sadd set1 b
sadd set1 c
sadd set1 d
sadd set2 c
sadd set2 d
sadd set2 e
127.0.0.1:6379> sdiff set1 set2
1) "a"
2) "b"
127.0.0.1:6379> sinter set1 set2
1) "c"
2) "d"
127.0.0.1:6379> sunion set1 set2
1) "e"
2) "c"
3) "d"
4) "b"
5) "a"

Hash(哈希)类型

hset 存值
hget 取值
hmset 批量存值
hmget 批量取值
hgetall 取出hash中的所有key和value
hdel 删除指定字段
hlen 获取哈希的长度(字段数量)
hexists 判断指定字段是否存在
hkeys 获取所有的key
hvals 获取所有的值

127.0.0.1:6379> hset myhash field1 BLU
(integer) 1
127.0.0.1:6379> hget myhash field1
"BLU"
127.0.0.1:6379> hmset myhash field2 hello field3 world
OK
127.0.0.1:6379> hmget myhash field1 field2 field3
1) "BLU"
2) "hello"
3) "world"
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "BLU"
3) "field2"
4) "hello"
5) "field3"
6) "world"
127.0.0.1:6379> hdel myhash field3
(integer) 1
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hexists myhash field1
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field2"
127.0.0.1:6379> hvals myhash
1) "BLU"
2) "hello"

hincrby 将指定字段的数字值增加指定大小
hsetnx 存值(如果key不存在),如果key已存在,则存值失败

127.0.0.1:6379> hset myhash field3 7
(integer) 1
127.0.0.1:6379> hincrby myhash field3 3
(integer) 10
127.0.0.1:6379> hsetnx myhash field4 hahaha
(integer) 1
127.0.0.1:6379> hsetnx myhash field4 lollollol
(integer) 0

Hash 比 String 更适合存储对象

127.0.0.1:6379> hset user:1 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1
127.0.0.1:6379> hget user:1 name
"zhangsan"
127.0.0.1:6379> hget user:1 age
"26"

Zset 有序集合类型

应用:排行榜

zadd 往Zset里添加值
zrange 获取Zset中具体区间的值(默认根据score由低到高排序)

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three 4 four
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"

zrangebyscore 根据score排序,-inf 表示负无穷 +inf 表示正无穷,withscores表示显示score值,
zrevrange 倒序排序

127.0.0.1:6379> zadd salary 2500 zhangsan 5000 lisi 1200 BLU
(integer) 3
127.0.0.1:6379> zrangebyscore salary -inf +inf
1) "BLU"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "BLU"
2) "1200"
3) "zhangsan"
4) "2500"
5) "lisi"
6) "5000"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores
1) "BLU"
2) "1200"
3) "zhangsan"
4) "2500"
127.0.0.1:6379> zrevrange salary 0 -1 withscores
1) "lisi"
2) "5000"
3) "zhangsan"
4) "2500"
5) "BLU"
6) "1200"

zrem 移除Zset里的指定值
zcard 统计Zset里值的数量
zcount 统计指定区间里值的数量

127.0.0.1:6379> zrem salary lisi
(integer) 1
127.0.0.1:6379> zcard salary
(integer) 2

127.0.0.1:6379> zadd myset 1 hello 2 world 3 BLU
(integer) 3
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 2 3
(integer) 2

おすすめ

転載: blog.csdn.net/BLU_111/article/details/108277124