5.关于redis数据类型

五大数据类型

它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询

Redis-key

#EXISTS name 判断当前key是否存在

#move name 1 //移除当前key,其中1带包当前数据库

127.0.0.1:6379[3]> EXPIRE name 10  //设置key过期时间

127.0.0.1:6379[3]> ttl name   //ttl 查看当前key的剩余时间

127.0.0.1:6379[3]> type name   //查看当前key的具体类型

 

String

 

127.0.0.1:6379> APPEND key1 "hello"  //往某个key中追加字符串,如果当前key不存在,就相当于set一个key

127.0.0.1:6379> STRLEN key1         //获取字符串的长度

 

i++

127.0.0.1:6379> incr views  //自增1

127.0.0.1:6379> decr views   //自减1

127.0.0.1:6379> INCRBY views 10   //可以设置步长 指定增量

127.0.0.1:6379> DECRBY views 10   //

获取字符串范围(range)

127.0.0.1:6379> GETRANGE key1 0   3  //截取字符串[0,3]

127.0.0.1:6379> GETRANGE key1 0   -1  //-1获取全部字符串

替换replace

 

 

127.0.0.1:6379> SETRANGE key2 1 xx  //替换指定位置开始的字符串

 

 

 

 

setex (set with expire)//设置过期时间

setnx (set if not exist)//不存在设置(在分布式锁中使用),如果key不存在,则创建新key,若key存在,则创建失败

 

 

mset k1 v1 k2 v2

mget

127.0.0.1:6379> msetnx k1 v1 k4 v4  //msetnx 是一个原子性操作,要么一起成功要么一起失败

 

 #对象

set user:1 {name:zhang,age:3}//设置user:1对象为一个json字符串来保存一个对象

user:{id}:{filed}

 

 

getset 先get在set

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"

 

List

 

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"

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"

##############################
LPOP 

RPOP

 

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"
####################################

127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0   #
"two"
127.0.0.1:6379> lindex list 1   #通过下标获取list中的某一个值
"one"
#####################################

Llen

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> Llen list #返回列表的长度
(integer) 3

##################################### 

 

 

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> Llen list
(integer) 3
127.0.0.1:6379> Lpush list three
(integer) 4
127.0.0.1:6379> lrem list 1 one #移除list集合中指定个数的vaule,经确匹配
(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"
#####################################

trim  list截断

127.0.0.1:6379> Rpush mylist "hello1"
(integer) 1
127.0.0.1:6379> Rpush mylist "hello2"
(integer) 2
127.0.0.1:6379> Rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> Rpush mylist "hello3"
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2 #通过下表截图指定的长度,这个list已经改变了
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello2"
2) "hello2"
###################################

rpoplpush #移除列表的最后一个元素,将它移动到新的列表中

127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist #移除列表的最后一个元素,将它移动到新的列表中
"hello2"
127.0.0.1:6379> lrange mylist 0 -1 #查看原来的列表
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1 #查看目标列表中确实存在该值
1) "hello2"
####################

127.0.0.1:6379> EXISTS list  #判断这个列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item  #如果不存在列表更新就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list "value1"
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "value1"
127.0.0.1:6379> lset list 0 item #如果存在,更新当前下标的值
OK
127.0.0.1:6379> lrange list 0 0
1) "item"

##############

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> linsert mylist before "world" "other"
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "world"
##########################################

set(集合)

127.0.0.1:6379> sadd myset "hello"   #set集合中添加集合
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查看指定set的所有值
1) "world"
2) "hello"
127.0.0.1:6379> SISMEMBER myset hello #判断某一个值是否在set中
(integer) 1
127.0.0.1:6379> SISMEMBER myset test
(integer) 0

127.0.0.1:6379> scard myset  #获取set集合中的内容元素个数
(integer) 3

 

127.0.0.1:6379> scard myset  #移除set集合中的指定元素
(integer) 3
127.0.0.1:6379> srem meyset "hello"
(integer) 0
127.0.0.1:6379> scard myset
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "world"
2) "hello"
3) "hello2"
 set 是无序不重复集合 抽随机

 

127.0.0.1:6379> SRANDMEMBER myset  #随机抽选出一个元素
"hello2"
127.0.0.1:6379> SRANDMEMBER myset
"world"

127.0.0.1:6379> SRANDMEMBER myset 2 #随机抽选指定个数的元素
1) "world"
2) "hello"

移除指定的key,随机删除指定的key

 

127.0.0.1:6379> SMEMBERS myset
1) "world"
2) "hello"
3) "hello2"
127.0.0.1:6379> spop myset #随机删除set集合中的元素
"world"
127.0.0.1:6379> spop myset
"hello2"
127.0.0.1:6379> SMEMBERS myset
1) "hello"


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

 

127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> sadd myset "world!!"
(integer) 1
127.0.0.1:6379> sadd myset "test2"
(integer) 1
127.0.0.1:6379> sadd myset2 "test3"
(integer) 1
127.0.0.1:6379> smove myset myset2 "test2" #
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "world"
2) "world!!"
3) "hello"
127.0.0.1:6379> SMEMBERS myset2
1) "test3"
2) "test2"

127.0.0.1:6379> clear
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 #差集
1) "a"
2) "b"
127.0.0.1:6379> SINTER key1 key2 #交集
1) "c"
127.0.0.1:6379> SUNION key1 key2 #并集
1) "b"
2) "a"
3) "d"
4) "c"
5) "e"
微博,A用户将所有关注的人放在一个set集合中,将它的粉丝以放在一个集合中,比如共同关注

#################################################

hash(哈希)Map集合 key-map集合  hash本质跟string类型没有太大区别 还是一个key-vaule 只是这个值一个map集合

set myhash filedhello 

 

 

127.0.0.1:6379> hset myhash field1 hello #set一个具体key-vaule
(integer) 1
127.0.0.1:6379> hget myhash field1 #获取一个字段值
"hello"
127.0.0.1:6379> hmset myhash field1 hello1 field2 world #set多个key-vaule
OK
127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段值
1) "hello1"
2) "world"
127.0.0.1:6379> hgetall myhash  #获取全部的数据
1) "field1"
2) "hello1"
3) "field2"
4) "world"

127.0.0.1:6379> hdel myhash field1  #删除hash指定的key字段 对应的vaule值也就没有了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"

127.0.0.1:6379> HLEN myhash #获取hash表的字段数量
(integer) 1

 

127.0.0.1:6379> HEXISTS myhash field1  #判断hash中指定字段是否存在
(integer) 0
127.0.0.1:6379> HEXISTS myhash field2
(integer) 1

127.0.0.1:6379> hkeys myhash   #只获得所有field
1) "field2"
127.0.0.1:6379> HVALS myhash #只获得所有的vaule
1) "world"

incr decr

 

127.0.0.1:6379> hset myhash field3 5  #指定一个增量
(integer) 1
127.0.0.1:6379> HINCRBY myhash field3 1  
(integer) 6
127.0.0.1:6379> HSETNX myhash field4 hello  #如果不存在则可以设置,如果存在则不能设置
(integer) 1
127.0.0.1:6379> HSETNX myhash field4 world
(integer) 0

可以存一些变更数据 user name age ,尤其是用户信息之类的,经常变动的信息 hash更适合对象的存储 string更适合字符串的存储

 ####################################

Zset有序集合详解

在set基础上,增加了一个值,set k1 v1 zset k1 score v1

127.0.0.1:6379> zadd myset 1 one #添加一个值
(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"
排序如何实现

127.0.0.1:6379> zadd salary 2500 xiaohong  #添加3个用户
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 200 kuangshen
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf  # --inf 是负无穷
1) "kuangshen"
2) "xiaohong"
3) "zhangsan"

127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores #显示全部用户并附带成绩
1) "kuangshen"
2) "200"
3) "xiaohong"
4) "2500"
5) "zhangsan"
6) "5000"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores #显示工资小于2500员工的升序排序
1) "kuangshen"
2) "200"
3) "xiaohong"
4) "2500"
移除rem中的元素

127.0.0.1:6379> zrange salary 0 -1
1) "kuangshen"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> zrem salary xiaohong  #移除有序集合中有序的元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "kuangshen"
2) "zhangsan"

获取有序集合中的个数

 

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 world 3 test
(integer) 2
127.0.0.1:6379> ZCOUNT myset 1 3 #获取指定区间成员的数量
(integer) 3
127.0.0.1:6379>

 

 

posted @ 2021-04-01 17:40  白语  阅读(75)  评论(0)    收藏  举报