redis-五大基本数据类型指令集合 string list set hash zset

类型string

使用场景:计数器、统计多单位的数量、对象缓存存储

设置
127.0.0.1:6379> set key1 v1
OK
获取值
127.0.0.1:6379> get key1
"v1"
append追加,有则追加,无责创建
127.0.0.1:6379> append key1 'v2'
(integer) 4
127.0.0.1:6379>
获取长度
127.0.0.1:6379> strlen key1
(integer) 4

设置views 的key
增长1
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
减少1
127.0.0.1:6379> decr views
(integer) 2
127.0.0.1:6379> decr views
(integer) 1
**增长n **
127.0.0.1:6379> incrby views 10
(integer) 11
减少n
127.0.0.1:6379> decrby views 10
(integer) 1
截取0到3位值
127.0.0.1:6379> set key1 'hello word'
OK
127.0.0.1:6379> get key1
"hello word"
127.0.0.1:6379> getrange key1 0 3
"hell"
替换指定位置的字符串
127.0.0.1:6379> setrange key2 1 xx
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
判断是否存在

setex (set with expire) # 设置30s过期时间
127.0.0.1:6379> setex key3 30 'hello' OK 127.0.0.1:6379> ttl key3 (integer) 25
setnc (set if not exist) # 不存在设置 (分布式锁中会用)
127.0.0.1:6379> setnx mykey 'mongodb' # 如果mykey存在,则创建失败 (integer) 0 127.0.0.1:6379> get mykey "redis"

**批量设置、获取值 k1=v1 k2=v2 k3=v3 **

mset
mget

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379>

原子性操作:一起成功,一起失败

设置一个user:1{name:lzx,age:3} 即将user的1的值,保存一个对象

127.0.0.1:6379> MSET user:1:name lzx user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "lzx"
2) "2"

混合命令

127.0.0.1:6379> getset db redis # 如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379>

list

使用场景:列表、队列、堆栈、阻塞队列

插入 list_1

127.0.0.1:6379> lpush list_1 one 将一个或者多个值,插入列表头部(左边)
(integer) 1
127.0.0.1:6379> lpush list_1 two
(integer) 2
127.0.0.1:6379> lpush list_1 three
(integer) 3
127.0.0.1:6379> lrange list_1 0 2 从左边开始获取list的0-2值
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> rpush list_2 one 将一个或者多个值,插入列表尾部(右边)
(integer) 1
127.0.0.1:6379> rpush list_2 two
(integer) 2
127.0.0.1:6379> rpush list_2 three
(integer) 3
127.0.0.1:6379> lrange list_2 0 2  从左边开始获取list的0-2值
1) "one"
2) "two"
3) "three"


查找指定范围的值

127.0.0.1:6379> lrange list_1 0 2 从左边开始获取list的0-2值
1) "three"
2) "two"
3) "one"

移除

LPOP 移除左边第一个

127.0.0.1:6379> lpop list_1
"three"
127.0.0.1:6379> lpop list_1
"two"
127.0.0.1:6379> lpop list_1
"one"

RPOP 移除右边第一个

127.0.0.1:6379> rpop list_2
"three"
127.0.0.1:6379> rpop list_2
"two"
127.0.0.1:6379> rpop list_2
"one"

lindex获取列表下表

127.0.0.1:6379> lpush list_` one
(integer) 1
127.0.0.1:6379> lindex list_` 0
"one"

llen 获取列表长度

27.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list
(integer) 3

移除指定的值lrem

127.0.0.1:6379> lrange list 0 3
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 3
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 3
1) "two"
127.0.0.1:6379>

通过下标截断指定的长度

127.0.0.1:6379> rpush mylist 'hello word'
(integer) 1
127.0.0.1:6379> rpush mylist 'hello to'
(integer) 2
127.0.0.1:6379> rpush mylist 'hello dd'
(integer) 3
127.0.0.1:6379> rpush mylist 'hello ww'
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2  把列表里面第[1][2]个元素截取出来,其他不要
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello to"
2) "hello dd"
127.0.0.1:6379>

移除列表最后一个元素,然后把截取出来的元素放到新的列表

127.0.0.1:6379> rpush list 'aaa'
(integer) 1
127.0.0.1:6379> rpush list 'bbb'
(integer) 2
127.0.0.1:6379> rpush list 'ccc'
(integer) 3
127.0.0.1:6379> rpoplpush list mylist 将"ccc" 放置新的mylist表中
"ccc"
127.0.0.1:6379> keys *
1) "mylist"
2) "list"
127.0.0.1:6379> lrange mylist 0 -1 
1) "ccc"

将列表指定下标的值,替换成另一个值,更新操作

127.0.0.1:6379> lset list 0 item
(error) ERR no such key 不存在会报错
127.0.0.1:6379> lpush list  aa
(integer) 1
127.0.0.1:6379> lset list 0 item
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379> lset list 1 other  不存在会报错
(error) ERR index out of range
127.0.0.1:6379>

列表插入

127.0.0.1:6379> lpush list 'aa'
(integer) 1
127.0.0.1:6379> linsert list before 'aa' 'before' 在列表数据aa的前面插入新的数据
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "before"
2) "aa"
127.0.0.1:6379> linsert list after 'aa' 'after' 在列表数据aa的后面插入新的数据
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "before"
2) "aa"
3) "after"

总结

set() 无序不重复集合

使用场景:随机数抽取、移除

127.0.0.1:6379> sadd myset 'love'
(integer) 1
127.0.0.1:6379> sadd myset 'love'
(integer) 0

查看set集合中的值

127.0.0.1:6379> smembers myset
1) "hello"
2) "word"
3) "love"
127.0.0.1:6379>

查找是否属于该集合

127.0.0.1:6379> sismember myset hello
(integer) 1
127.0.0.1:6379> sismember myset d
(integer) 0
127.0.0.1:6379>

共计set集合中的个数

127.0.0.1:6379> smembers myset
1) "hello"
2) "add"
3) "word"
4) "love"
127.0.0.1:6379> scard myset
(integer) 4

移除set元素

127.0.0.1:6379> scard myset
(integer) 4
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
127.0.0.1:6379> smembers myset
1) "add"
2) "word"
3) "love"
127.0.0.1:6379>

随机抽选出一个元素

127.0.0.1:6379> smembers myset
1) "add"
2) "word"
3) "love"
127.0.0.1:6379> srandmember myset 不跟数量抽一个
"love"
127.0.0.1:6379> srandmember myset  2 抽两个
1) "add"
2) "love"

随机移除key

127.0.0.1:6379> smembers myset
1) "add"
2) "word"
3) "love"
127.0.0.1:6379> spop myset
"word"
127.0.0.1:6379> smembers myset
1) "add"
2) "love"
127.0.0.1:6379>

将指定的值,移动到另一个set中

127.0.0.1:6379> smembers myset1
1) "bbb"
2) "ccc"
3) "aaa"
127.0.0.1:6379> smembers myset2
1) "ggg"
2) "ddd"
3) "fff"
127.0.0.1:6379> smove myset1 myset2 'aaa'
(integer) 1
127.0.0.1:6379> smembers myset1
1) "bbb"
2) "ccc"
127.0.0.1:6379> smembers myset2
1) "ggg"
2) "ddd"
3) "aaa"
4) "fff"
127.0.0.1:6379>

比较两个set不同的元素

#差集
127.0.0.1:6379> smembers key1
1) "b"
2) "f"
3) "a"
127.0.0.1:6379> smembers key2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> sdiff key1 key2  #找出key1中不同于key2的值
1) "f"
127.0.0.1:6379>
#交集
127.0.0.1:6379> smembers key1
1) "b"
2) "f"
3) "a"
127.0.0.1:6379> smembers key2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> sinter key1 key2 #找出两个set key1 和key2中相同的元素
1) "b"
2) "a"
#并集
127.0.0.1:6379> smembers key1
1) "b"
2) "f"
3) "a"
127.0.0.1:6379> smembers key2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> sunion key1 key2 #将key1和key2中的除去重复的值后加起来
1) "a"
2) "f"
3) "b"
4) "c"

哈希hash()

使用场景:存储Map集合,key-key:value 对象数据

插入

127.0.0.1:6379> hset myhash field 'hello'
(integer) 1

取出

127.0.0.1:6379> hget myhash field
"hello"

插入和获取多个值

127.0.0.1:6379> hmset myhash field hello field2 world
OK
127.0.0.1:6379> hmget myhash field field2
1) "hello"
2) "world"
127.0.0.1:6379>
127.0.0.1:6379> hgetall myhash #获取键值对和value值
1) "field"
2) "hello"
3) "field2"
4) "world"

删除

127.0.0.1:6379> hdel myhash field2 #删除对应的键值,其value也会删除
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field"
2) "hello"
127.0.0.1:6379>

获取hash的长度

127.0.0.1:6379> hgetall myhash
1) "field"
2) "hello"
3) "field1"
4) "hello"
5) "field2"
6) "world"
127.0.0.1:6379> hlen myhash
(integer) 3

判断指定hash中的指定键值是否存在

127.0.0.1:6379> hexists myhash field3
(integer) 0
127.0.0.1:6379> hexists myhash field2
(integer) 1

只获得所有的键值

127.0.0.1:6379> hkeys myhash
1) "field"
2) "field1"
3) "field2"

只获得所有的value

127.0.0.1:6379> hvals myhash
1) "hello"
2) "hello"
3) "world"

自增

127.0.0.1:6379> hgetall myhash
1) "field"
2) "hello"
3) "field1"
4) "hello"
5) "field2"
6) "world"
7) "field3"
8) "5"
127.0.0.1:6379> hincrby myhash field3 1
(integer) 6

自减

127.0.0.1:6379> hincrby myhash field3 -2
(integer) 4

存在不添加,不存在添加

127.0.0.1:6379> hsetnx myhash field4 aaa
(integer) 1
127.0.0.1:6379> hget myhash field4
"aaa"
127.0.0.1:6379> hsetnx myhash field4 world
(integer) 0

hash适合存储对象数据保存

127.0.0.1:6379> hmset user:1 name lzx
OK
127.0.0.1:6379> hget user:1 name
"lzx"

Zset(有序集合)

使用场景:在set的基础上增加了一个值,set k1 v1 zset k1 score1 v1 可以实现排序

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

实现排序

127.0.0.1:6379> zadd salary 2500 x
(integer) 1
127.0.0.1:6379> zadd salary 3500 l
(integer) 1
127.0.0.1:6379> zadd salary 5500 c
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf #从负无穷到正无穷排序 升序
1) "x"
2) "l"
3) "c"
#降序
127.0.0.1:6379> zrevrange salary 0 -1 withscores
1) "l"
2) "8000"
3) "c"
4) "5500"
5) "x"
6) "2500"
#带value
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "x"
2) "2500"
3) "c"
4) "5500"
5) "l"
6) "8000"

移除rem中的

127.0.0.1:6379> zrange salary 0 -1
1) "x"
2) "l"
3) "c"
127.0.0.1:6379> zrem salary l
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "x"
2) "c"

获取有序集合中个数

127.0.0.1:6379> zrange salary 0 -1
1) "x"
2) "c"
127.0.0.1:6379> zcard salary
(integer) 2

获取有序集合中的个数

127.0.0.1:6379> zadd myset 1 'hello'
(integer) 1
127.0.0.1:6379> zadd myset 2 'word'
(integer) 1
127.0.0.1:6379> zadd myset 3 'mmm'
(integer) 1
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2
127.0.0.1:6379> zcount myset 1 1
(integer) 1

更多指令查找官方文档

posted @ 2022-04-27 15:48  Chiffon1996  阅读(59)  评论(0)    收藏  举报