Redis五大基本数据类型

五大基本数据类型 String,List,Set,Hash,Zset

Redis-key
move  键名 1 # 1代表当前数据库

expire 键名 #秒数  设置key过期时间

exists name #判断当前是否存在

ttl name #剩余时间

type name #查看key的类型

String(字符串)

127.0.0.1:6379> exists key1  # 检查是否存在当前key值
(integer) 1
127.0.0.1:6379> append key1 "hello"  #在key后面追加字符串,如果当前key不存在就相当于set key
(integer) 7
127.0.0.1:6379> strlen key1  # 获取字符串长度
(integer) 7
*****************************************************************************
127.0.0.1:6379> incr views  #key值加一
(integer) 1
127.0.0.1:6379> decr views   #key值减一
(integer) 0
127.0.0.1:6379> incrby views 10  #根据步长递加 后面数字为步长
(integer) 10
127.0.0.1:6379> decrby views 5	#根据步长减少
(integer) 5
*****************************************************************************
127.0.0.1:6379> getrange key1 0 5  # 截取key1 的 0到5的字符串 0起始位置 5是结束位置
"xqj he"
127.0.0.1:6379> getrange key1 0 -1  #显示所有的字符串
"xqj hello word"
127.0.0.1:6379> setrange key1 1 "demo"  #用后面的字符串替换指定位置的字符 1 是位置 
(integer) 14
127.0.0.1:6379> get key1
"xdemoello word"
*****************************************************************************
127.0.0.1:6379> setex session 20 "aa"  #设置一个session的key 20秒后过期
OK
127.0.0.1:6379> get session
"aa"
127.0.0.1:6379> ttl session  # 查看指定key剩余有效时间
(integer) 6
127.0.0.1:6379> get session
(nil)
127.0.0.1:6379> setnx session "aaa"  # 如果session 不存在就设置否则返回0 ,成功放回1
(integer) 1
127.0.0.1:6379> get session
"aaa"
127.0.0.1:6379> setnx session "dd" # 当前session已经有值,所以设置失败
(integer) 0
127.0.0.1:6379> get session
"aaa"
127.0.0.1:6379> 
*****************************************************************************

127.0.0.1:6379> mset key1 "v1" key2 "v2" #同时设置多个值
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> mget key1 key2  #同时获取多个值
1) "v1"
2) "v2"
127.0.0.1:6379> msetnx key1 "111" key3 "22" #如果不存在则设置,批量设置时若有一个设置失败,则所有的都会设置失败
(integer) 0
127.0.0.1:6379> get key3
(nil)
*****************************************************************************
#设置对象
set user:1 {name:xqj,age:18} #设置一个user:1 对象值为json字符保存对象

#使用user:[id]:[filed] value 设置带id的
127.0.0.1:6379> mset user:1:name xqj user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "xqj"
2) "18"

*****************************************************************************
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 demo1 # 如果存在则获取原来的并设置新的值
"redis"
127.0.0.1:6379> get db
"demo1"
127.0.

List

基本数据类型,列表(所有list的命令都l开头,Redis不区分大小写)

#插入值
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  #显示下标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"

 *****************************************************************************
#获取值&移除值
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 1  #通过下标获取列表对应的值
"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> llen list  #获取列表长度
(integer) 2
********************************************************************************
 lrem key count 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  #移除list中指定个数的value,精确匹配
(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"
127.0.0.1:6379> 
********************************************************************************
 ltrim key start stop #截取指定的值
 127.0.0.1:6379> lrange list 0 -1
1) "hello1"
2) "hell01"
3) "hell02"
4) "hell03"
127.0.0.1:6379> ltrim list 2 3  #截取下标2~3的元素值,只剩下截取的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "hell02"
2) "hell03"
********************************************************************************
 rpoplpush #移除列表的最后一个元素,并添加到新的列表
 127.0.0.1:6379> rpush list "v1"
(integer) 1
127.0.0.1:6379> rpush list "v2"
(integer) 2
127.0.0.1:6379> rpush list "v3"
(integer) 3
127.0.0.1:6379> rpush list "v4"
(integer) 4
127.0.0.1:6379> rpoplpush list otherlist  #移除列表的最后一个元素并添加到一个新的列表
"v4"
127.0.0.1:6379> lrange otherlist 0 -1  #查看目标列表(愿列表已经被删除了该元素)
1) "v4"
********************************************************************************
 lset #将指定下标的值替换另外一个值
127.0.0.1:6379> lpush listr value
(integer) 1
127.0.0.1:6379> lset listr 0 demo #将列表原有元素value替换成demo 下标为0(如果不存在列表就会报错)
OK
127.0.0.1:6379> lrange list 0 1
(empty array)
127.0.0.1:6379> lrange list 0 0
(empty array)
127.0.0.1:6379> lrange listr 0 0
1) "demo"
127.0.0.1:6379> 
********************************************************************************
 linsert key before|after pivot element #在指定字符之前或之后插入一个字符串
127.0.0.1:6379> lpush list "v1"
(integer) 1
127.0.0.1:6379> lpush list "v2"
(integer) 2
127.0.0.1:6379> linsert list before "v1" "vs" 在字符串“v1”后面插入“vs”
(integer) 3
127.0.0.1:6379> lrange list 0 -1  #显示列表元素可以看到已经插入成功了
1) "v2"
2) "vs"
3) "v1"

list 小结

  • 实际上是一个链表,before node after ,left right,都可以插入值
  • 如果key不存在,就创建新的链表
  • 如果存在就新增内容
  • 如果移除了所有值,变成了空的链表,也代表不纯在
  • 在链表的两端插入或者改动效率最高,中间的有元素相对来说效率会慢一些

Set(集合)

set的值不能重复

sadd 集合名 value #给set集合添加元素
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "xqj"
(integer) 1
127.0.0.1:6379> sadd myset "study"
(integer) 1
127.0.0.1:6379> sadd myset "one day"
(integer) 1
127.0.0.1:6379> smembers myset  #显示指定集合里的所有元素
1) "hello"
2) "one day"
3) "study"
4) "xqj"
127.0.0.1:6379> sismember myset study #查找是否存在指定值存在返回1
(integer) 1
127.0.0.1:6379> sismember myset stud  #不存在返回0
(integer) 0
********************************************************************************
127.0.0.1:6379> scard myset #获取集合中的元素个数
(integer) 4
********************************************************************************
srem key value #移除集合中指定元素
127.0.0.1:6379> srem myset xqj  #删除元素
(integer) 1
127.0.0.1:6379> smembers myset  #查看所有元素发现已经移除了
1) "hello"
2) "one day"
3) "study"
********************************************************************************
srandmember key count #随机选择指定个数元素
127.0.0.1:6379> SRANDMEMBER myset 
"one day"
127.0.0.1:6379> SRANDMEMBER myset  #随机选择1个元素
"one day"
127.0.0.1:6379> SRANDMEMBER myset 
"hello"
127.0.0.1:6379> SRANDMEMBER myset 
"study"
127.0.0.1:6379> SRANDMEMBER myset 2  #随机选择2个元素
1) "one day"
2) "study"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "hello"
2) "study"
********************************************************************************
spop key count #随机删除key的count个元素
127.0.0.1:6379> spop myset #随机删除元素
"study"
********************************************************************************
smove key destination member #从当前集合取一个元素移动到另一个集合中
127.0.0.1:6379> sadd myset2 "set2" #创建集合
(integer) 1
127.0.0.1:6379> smove myset myset2 2   #移动元素2 从myset集合到myset2
(integer) 1
127.0.0.1:6379> SMEMBERS myset2   #查看集合myset2可以看到已经移动过去了(原集合中的2元素已经没了)
1) "set2"
2) "2"
********************************************************************************
#集  sdiff key1 key2 需要注意key的前后顺序,谁在前就拿谁进行参考
127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 c d e f
(integer) 4
127.0.0.1:6379> SDIFF key1 key2  #查看key1和key2集合内不同的,(key1有的key2没有)
1) "a"					
2) "b"
127.0.0.1:6379> SDIFF key2 key1   #查看key2和key1集合内不同的,(key2有的key1没有)
1) "e"
2) "f"
127.0.0.1:6379> SINTER key1 key2  #查看两集合的共同的
1) "d"
2) "c"
127.0.0.1:6379> SUNION key1 key2  #查看两集合加一起的(去除重复的)
1) "c"
2) "a"
3) "b"
4) "d"
5) "f"
6) "e"

Hash

Map集合,key-map 值是一个map集合,本质没有太大区别,还是一个简单的key-value

hset key filed value #设置集合
hmset key filed value [filed value] #一次设置多个字段
127.0.0.1:6379> HSET myhash filed xqj  #设置一个hash集合
(integer) 1
127.0.0.1:6379> hget myhash filed  #获取集合里的字段
"xqj"
127.0.0.1:6379> hmset myhash name xqj age 18 #一次设置多个值
OK
127.0.0.1:6379> hmget myhash name age  #获取多个值
1) "xqj"
2) "18"
127.0.0.1:6379> hgetall myhash  #获取hash集合里的所有值
1) "filed"
2) "xqj"
3) "name"
4) "xqj"
5) "age"
6) "18"
127.0.0.1:6379> hdel myhash filed  #删除字段
(integer) 1
127.0.0.1:6379> hgetall myhash #查看可以看到已经删除
1) "name"
2) "xqj"
3) "age"
4) "18"
********************************************************************************
127.0.0.1:6379> hlen myhash  #获取哈希长度
(integer) 2
127.0.0.1:6379> HEXISTS myhash name  #判断指定字段是否存在,存在返回1
(integer) 1
127.0.0.1:6379> HEXISTS myhash nam  #不存在返回0
(integer) 0
127.0.0.1:6379> hkeys myhash  #获取hash里的所有键
1) "name"
2) "age"
127.0.0.1:6379> HVALS myhash  #获取hash里所有value
1) "xqj"
2) "18"
********************************************************************************
127.0.0.1:6379> hincrby myhash age 1  #递增
(integer) 19
127.0.0.1:6379> hincrby myhash age 2
(integer) 21
127.0.0.1:6379> hincrby myhash age -1  #递减  负数相当于hdecrby
(integer) 20
127.0.0.1:6379> hsetnx myhash name a  #如果不存在就设置,成功返回1,失败返回0
(integer) 0

Zset(有序集合)

在set的基础上,增加了一个值,比set多了一个排序。例如可以存储班级成绩,工资等

127.0.0.1:6379> ZADD myzset 1 one #添加一个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two 3 three  #添加多个值
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
********************************************************************************
ZRANGEBYSCORE salary -inf +inf withscores limit 
127.0.0.1:6379> zadd salary 1000 zs 3000 ls 5000 xx  
(integer) 3
127.0.0.1:6379> ZRANGE salary 0 -1
1) "zs"
2) "ls"
3) "xx"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf  #从小到大培训(输出的是键名)
1) "zs"
2) "ls"
3) "xx"
127.0.0.1:6379> ZREVRANGE demo 0 -1 withscores #从大到小排序
1) "y"
2) "2000"
3) "z"
4) "1500"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores #排序输出时也加上对应的value
1) "zs"
2) "1000"
3) "ls"
4) "3000"
5) "xx"
6) "5000"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 3000 withscores  #给定一个范围输出(小于3000的)
1) "zs"
2) "1000"
3) "ls"
4) "3000"
********************************************************************************
127.0.0.1:6379> zrange demo 0 -1  
1) "x"
2) "z"
3) "y"
127.0.0.1:6379> zrem demo x  #删除指定元素
(integer) 1
127.0.0.1:6379> ZRANGE demo 0 -1  #显示看到已经删除
1) "z"
2) "y"
127.0.0.1:6379> ZCARD demo #获取有序集合的个数
(integer) 2
********************************************************************************
127.0.0.1:6379> zadd myset 1 hello 2 word 3 xxxx
(integer) 3 
127.0.0.1:6379> zcount myset 1 3  #获取指定区间的数量
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值