五大基本数据类型 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