【Redis】Redis的五大数据类型


字符串(strings)

  1. 开启redis服务并连接
[root@localhost bin]# redis-server config/redis.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushall  # 情空数据库中的所有数据
OK
  1. 相关操作

(a)setget

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"

(b)EXISTS key查看当前key是否存在 :1存在,0不存在

127.0.0.1:6379> EXISTS key1
(integer) 1


( c)type key查看key对应的类型

127.0.0.1:6379> type key1
string

(d)APPEND key value 追加一个value到key上,返回为key的长度

127.0.0.1:6379> APPEND key1 "hello"
(integer) 11
127.0.0.1:6379> get key1
"value1hello"

(e)keys *查看所有的key

127.0.0.1:6379> keys *
1) "key1"

(f)STRLEN key查看key的长度

127.0.0.1:6379> STRLEN key1
(integer) 11

(g)move key db把key移到第db个数据库中

127.0.0.1:6379> move key1 1
(integer) 1

(h)EXPIRE key seconds设置key的过期时间,单位秒。ttl key查看key还有多就过期

127.0.0.1:6379> EXPIRE name 6
(integer) 1
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2

(i)incr key:可以对应value++,decr key:value - -,incrby views 10decrby views 5是设置步长的加减

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> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
127.0.0.1:6379> incrby views 10
(integer) 9
127.0.0.1:6379> decrby views 5
(integer) 4

(j)字符串范围:getrang key i j

127.0.0.1:6379> set key1 hello,world
OK
127.0.0.1:6379> get key1
"hello,world"
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,world"
127.0.0.1:6379>

(k)字符串替换:`SETRANGE key2 2 xxx

127.0.0.1:6379> set key2 abcdefgh
OK
127.0.0.1:6379> get key2
"abcdefgh"
127.0.0.1:6379> SETRANGE key2 2 xxx
(integer) 8
127.0.0.1:6379> get key2
"abxxxfgh"

(l)setex key3 30 "hello"设置过期时间,SETNX key4 "world":不存在设置

127.0.0.1:6379> setex key3 30 "hello"
OK
127.0.0.1:6379> ttl key3
(integer) 23
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> SETNX key4 "world"  # key4不存在,创建key4
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "key4"
3) "key1"
127.0.0.1:6379> setnx key4 "hi" # key4存在,创建失败
(integer) 0
127.0.0.1:6379> get key4
"world"

(m)设置多个key-value:mset k1 v1 k2 v2 k3 v3,取多个key的value:mget k1 k2 k3

27.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k2 v4 k5 v5 # k2设置过了,失败,原子性操作,k5设置失败
(integer) 0
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> 

(n)设置对象

127.0.0.1:6379> set user:1 {name:zhangsan,age:3} # 设置user:1对象,json保存
OK
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3
OK
127.0.0.1:6379> get user:1
"{name:zhangsan,age:3}"
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "3"


(o)getset存在这个key,返回这个key的value,不存在返回null并创建

127.0.0.1:6379> getset k9 hi
(nil)
127.0.0.1:6379> get k9
"hi"
127.0.0.1:6379> getset k9 hello
"hi"

散列(hashes)

哈希,类似map集合,前面的是key-value,这里是key-Map。

  1. hset可以在一个hashes中设置多个key-value,hget只可以获取一个散列中一个key的value,hmget可以获取多个,hgetall获得hash中所有的key-value
127.0.0.1:6379> hset myhash field1 hello
(integer) 1
127.0.0.1:6379> hget myhash field1
"hello"
127.0.0.1:6379> hset myhash field2 world field3 good
(integer) 2
127.0.0.1:6379> hmget myhash field1 field2
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3"
6) "good"
  1. 删除hash中指定的key,对应value也就没有了hdel
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3"
6) "good"
127.0.0.1:6379> hdel myhash field2
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379> 
  1. 查看hash中key-value的对数hlen
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379> hlen myhash
(integer) 2

  1. 判断hash中的key是否存在:HEXISTS存在返回1,不存在返回0
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field3"
4) "good"
127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
127.0.0.1:6379> HEXISTS myhash field2
(integer) 0
127.0.0.1:6379>
  1. 获取所有的keyhkeys,获取所有的valuehvals
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field3"
127.0.0.1:6379> hvals myhash
1) "hello"
2) "good"

  1. 加减操作 HINCRBY
127.0.0.1:6379> hset myhash field4 3
(integer) 1
127.0.0.1:6379> HINCRBY myhash field4 1  #加1
(integer) 4
127.0.0.1:6379> HINCRBY myhash field4 -2 #减2
(integer) 2

  1. key存在就不可以设置,不存在可以设置hsetnx返回0表示存在不能设置,1设置成功
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field3"
3) "field4"
127.0.0.1:6379> hsetnx myhash field3 hi
(integer) 0
127.0.0.1:6379> hsetnx myhash field2 hi
(integer) 1

列表(lists)

在这里插入图片描述

  1. List列表命令基本都是 l 开头的。
  2. 相关操作:

(a)lpush key value:将一个值或多个值插到列表头部(左)RPUSH key value:将一个值或多个值插到列表尾部(右)
LRANGE key 0 -1获取列表中的值,

127.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> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1  # 获取具体范围的值
1) "three"
2) "two"
127.0.0.1:6379> RPUSH list right
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"

(b)移除命令LPOPRPOP:

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> LPOP list  # 移除左边
"three"
127.0.0.1:6379> RPOP list # 移除右边
"right"

©获取下标的值:LINDEX key i

127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lindex list 0
"two"

(d)获取长度llen key

127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> llen list
(integer) 2

(e)移除指定个数的value,精确匹配lrem key i value

127.0.0.1:6379> LRANGE list 0 -1
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 -1
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 -1
1) "two"

(f)截取指定的范围的valueltrim

127.0.0.1:6379> LPUSH list hello1 hello2 hello3 hello4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "hello4"
2) "hello3"
3) "hello2"
4) "hello1"
127.0.0.1:6379> ltrim list 1 2
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "hello3"
2) "hello2"

(g)将最后一个元素移到别的list上RPOPLPUSH mylist newlist

127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> RPOPLPUSH mylist newlist
"hello1"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello3"
2) "hello2"
127.0.0.1:6379> LRANGE newlist 0 -1
1) "hello1"

(h)替换,更新操作lset key i newvalue

127.0.0.1:6379> EXISTS list  #查看list是否存在
(integer) 0                 #0不存在
127.0.0.1:6379> lset list 0 value1  #往一个不存在的list更新,报错
(error) ERR no such key
127.0.0.1:6379> lpush list hello  
(integer) 1
127.0.0.1:6379> lpush list hello2
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "hello2"
2) "hello"
127.0.0.1:6379> lset list 0 item  # 更新第0个
OK
127.0.0.1:6379> LRANGE list 0 -1  #查看
1) "item"
2) "hello"
127.0.0.1:6379> lset list 2 item  # 更新下标不存在的,报错越界
(error) ERR index out of range
127.0.0.1:6379> 

(i)插入操作:linsert key after|before value newvalue在value后面或者前面插入一个newvalue

127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "hello"
127.0.0.1:6379> LINSERT list after item good
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "good"
3) "hello"
127.0.0.1:6379> LINSERT list before hello great
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
2) "good"
3) "great"
4) "hello"
127.0.0.1:6379> 

集合(sets)

set中的值不能重复

  1. saad key valueset集合中添加值,SMEMBERS key查看所有值,SISMEMBER查看value是否存在,scard key获取set集合中的内容元素个数
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "good"
(integer) 1
127.0.0.1:6379> sadd myset "great"
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hello"
127.0.0.1:6379> SISMEMBER myset hi
(integer) 0
127.0.0.1:6379> SISMEMBER myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
  1. 移除某个值srem key value
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hello"
127.0.0.1:6379> srem myset great
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "hello"
  1. set无序不重复,可以随机抽取值
127.0.0.1:6379> SRANDMEMBER myset 1   #随机抽取1个值
1) "good"
127.0.0.1:6379> SRANDMEMBER myset 1
1) "hello"
127.0.0.1:6379> SRANDMEMBER myset 2 #随机抽取2个值
1) "good"
2) "hello"

  1. 随机删除SMEMBERS key默认删除1个,也可以在后面指定删除的个数,随机
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
4) "hello"
127.0.0.1:6379> spop myset
"great"
127.0.0.1:6379> spop myset
"hello"
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "hi"
  1. 将集合中指定的元素移动到另一个集合中smove key1 key2 valuekey1中的value移到key2
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
4) "hello"
127.0.0.1:6379> SMEMBERS myset2
1) "world"
127.0.0.1:6379> smove myset myset2 hello
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "good"
2) "great"
3) "hi"
127.0.0.1:6379> SMEMBERS myset2
1) "hello"
2) "world"

有序集合(sorted sets)

在set集合的基础上增加一个值。

  1. 增加操作
127.0.0.1:6379> zadd myset 1 one  #增加1个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three  #增加多个
(integer) 2
127.0.0.1:6379> zrange myset 0 -1  #查看全部
1) "one"
2) "two"
3) "three"
  1. 排序操作
127.0.0.1:6379> zadd salary 2000 halen
(integer) 1
127.0.0.1:6379> zadd salary 3000 lily
(integer) 1
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #小到大排序,范围负无穷到正无穷
1) "halen"
2) "xiaoming"
3) "lily"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores #小到大排序带上数字,范围负无穷到正无穷
1) "halen"
2) "2000"
3) "xiaoming"
4) "2500"
5) "lily"
6) "3000"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores #小到大排序带上数字,范围负无穷到2500
1) "halen"
2) "2000"
3) "xiaoming"
4) "2500"
127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf withscores #大到小排序
1) "lily"
2) "3000"
3) "xiaoming"
4) "2500"
5) "halen"
6) "2000"

  1. 移除操作
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "xiaoming"
3) "lily"
127.0.0.1:6379> zrem salary xiaoming
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "lily"
  1. 获取集合中元素的有效个数
127.0.0.1:6379> ZRANGE salary 0 -1
1) "halen"
2) "lily"
127.0.0.1:6379> zcard salary
(integer) 2

  1. 获取指定区间的元素个数
127.0.0.1:6379> zadd myset 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 2 3
(integer) 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值