Redis之五大基本的数据类型:字符串String 散列hashes 列表 lists 集合sets 有序集合sorted sets 基础命令讲解
一:字符串
对字符串的操作
创建字符串,获取键值并判断字符串是否存在,查询键的长度,往指定字符串添加数据
127.0.0.1:6379> set name buxiangshuixiangdemeng //创建一个键,并赋值
OK
127.0.0.1:6379> get name //获取键值
"buxiangshuixiangdemeng"
127.0.0.1:6379> exists name /判断name这个键是否存在,1:存在 0不存在
(integer) 1
127.0.0.1:6379> strlen name //查询键的长度
(integer) 22
127.0.0.1:6379> APPEND name 'csdn' //往指定键添加字符串
(integer) 26
127.0.0.1:6379> get name
"buxiangshuixiangdemengcsdn"
127.0.0.1:6379> STRLEN name
(integer) 26
127.0.0.1:6379>
模拟浏览量的增加和减少
模拟浏览量的增加和减少:实现i++ 或者是i--以及 i++n与i--n
127.0.0.1:6379> set view 0 //设置默认的基础值
OK
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incr view //默认每次加一
(integer) 1
127.0.0.1:6379> get view
"1"
127.0.0.1:6379> decr view //默认每次减一
(integer) 0
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incrby view 10 //指定数目进行增加
(integer) 10
127.0.0.1:6379> decr view
(integer) 9
127.0.0.1:6379> decrby view 5 //指定数目进行减少
(integer) 4
127.0.0.1:6379>
获取字符串的指定数据
获取字符串的指定数据
127.0.0.1:6379> set key1 buxiangshuixingdemeng
OK
127.0.0.1:6379> get key1
"buxiangshuixingdemeng"
127.0.0.1:6379> GETRANGE key1 0 2 //获取字符串的0到2的数据
"bux"
127.0.0.1:6379> GETRANGE key1 0 -1 //获取全部的字符串数据
"buxiangshuixingdemeng"
替换字符串的数据
替换字符串的数据
127.0.0.1:6379> set key2 'abcdefg'
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> SETRANGE key2 1 xxx 设置从1开始设置xxx
(integer) 7
127.0.0.1:6379> get key2
"axxxefg"
时间锁,到时间创建的键自动注销
时间锁,到时间创建的键自动注销
setex:设置过期时间
setnx:不存在过于时间的设置
127.0.0.1:6379> setex key3 30 'deno1' //设置key3这个键30秒自动注销
OK
127.0.0.1:6379> get key3
"deno1"
127.0.0.1:6379> ttl key3 //查询键离注销还剩下多少时间
(integer) 14
127.0.0.1:6379> ttl key3
(integer) 7
127.0.0.1:6379> SETNX key3 'redis' //时间设置,如果键不存在则进行创建,键值为redis
(integer) 1
127.0.0.1:6379> get key3
"redis"
127.0.0.1:6379> SETNX key3 'mysql' //已经存在的键,在设置重名的键,原本的键并不会被覆盖掉
(integer) 0
127.0.0.1:6379> get key3 //还是原本的数据
"redis"
127.0.0.1:6379>
批量添加
批量添加
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k1为键 v1为键值 依次创建
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 k1 vv k4 v4 如果新创建的key在原本的数据中已存在,则创建失败返回值为0:具有原子性,要么一起成功,要么都不成功
(integer) 0
127.0.0.1:6379>
创建一个对象:设置新属性
创建一个对象:设置新属性
127.0.0.1:6379> MSET user:1:name ma user:1:age 22
OK
127.0.0.1:6379> MGET user:1:name user:1:age 获取数据值
1) "ma"
2) "22"
127.0.0.1:6379>
组合命令getset先执行get方法,然后在执行set方法
组合命令getset先执行get方法,然后在执行set方法
127.0.0.1:6379> FLUSHDB
OK127.0.0.1:6379> getset key1 demo 没有该键则返回nil,并通过set方法进行创建
(nil)
127.0.0.1:6379> get key1
"demo"
127.0.0.1:6379> getset key1 dddd 先获取原始数据,然后在进行set方法
"demo"
127.0.0.1:6379> get key1
"dddd"
二:LIst数组
L默认的情况是左 R默认的情况则是右
Lpush 则是左添加,Rpush则是右添加
L默认的情况是左 R默认的情况则是右
Lpush 则是左添加,Rpush则是右添加
127.0.0.1:6379> FLUSHALL 清空
OK
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) "three"
2) "two"
127.0.0.1:6379>127.0.0.1:6379> RPUSH list four 右添加数据
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1 four添加到列表的右面
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379>
列表移除数据
列表移除数据
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> keys *
1) "list"
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> LPOP list 移除左面第一个数据
"three"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "four"
127.0.0.1:6379> RPOP list
"four"
127.0.0.1:6379> LRANGE list 0 -1 移除右面第一个数据
1) "two"
2) "one"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>
移除列表中的指定数据
移除列表中的指定数据
127.0.0.1:6379> FLUSHALL
OK
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> LPUSH list three
(integer) 4
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 移除一个数据,值为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 移除两个数据,值为three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
127.0.0.1:6379>
截取列表中的数据
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> RPUSH list demo1
(integer) 1
127.0.0.1:6379> RPUSH list demo2
(integer) 2
127.0.0.1:6379> RPUSH list demo3
(integer) 3
127.0.0.1:6379> RPUSH list demo4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "demo1"
2) "demo2"
3) "demo3"
4) "demo4"
127.0.0.1:6379> LTRIM list 1 2 截取列表中下标为1到2的数据
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "demo2"
2) "demo3"
127.0.0.1:6379>
组合命令rpoplpush:将列表中的一个数据弹出,并将弹出的这个数据值添加到另外的一个列表中
127.0.0.1:6379> LRANGE list 0 -1
1) "demo1"
2) "demo2"
3) "demo3"
127.0.0.1:6379> RPOPLPUSH list otherlist 将list中最右面的数据弹出,并将该数据添加到otherlist这个列表中
"demo3"
127.0.0.1:6379> LRANGE list 0 -1
1) "demo1"
2) "demo2"
127.0.0.1:6379> LRANGE otherlist 0 -1
1) "demo3"
127.0.0.1:6379>
将列表中的值进行覆盖
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> EXISTS list 判断列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 value1 因为值不存在,所以并不能进行覆盖覆盖只能覆盖已经存在的数据
(error) ERR no such key
127.0.0.1:6379> LPUSH list one
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 value1 覆盖成功
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "value1"127.0.0.1:6379> lset list 1 value2 列表中只有一个数据,下标为0 则这里设置下标为1的 的数据则报错,超出原本的范围
(error) ERR index out of range
127.0.0.1:6379>
插入数据
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> RPUSH list oh
(integer) 1
127.0.0.1:6379> RPUSH list god
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "god"
127.0.0.1:6379> LINSERT list before god my 在list列表中在god之前插入一个my
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "my"
3) "god"
127.0.0.1:6379> LINSERT list after god ! 在list列表中在god之后插入一个!
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "my"
3) "god"
4) "!"
127.0.0.1:6379>
set集合
注意:set集合中的值是不能重复的
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> sadd setlist bu 往set集合添加元素
(integer) 1
127.0.0.1:6379> sadd setlist xiang
(integer) 1
127.0.0.1:6379> sadd setlist sui
(integer) 1
127.0.0.1:6379> SMEMBERS setlist 查看set集合中的元素
1) "sui"
2) "xiang"
3) "bu"
127.0.0.1:6379> SISMEMBER setlist sui 判断set集合中是否存在某个元素
(integer) 1 存在则返回1,不存在则返回0
127.0.0.1:6379> SISMEMBER setlist xing
(integer) 0
127.0.0.1:6379> SCARD setlist 获取set集合中的元素个数
(integer) 3
在set集合中随机抽选集合中的一个元素
在set集合中随机抽选集合中的一个元素
127.0.0.1:6379> SRANDMEMBER setlist
"bu"
127.0.0.1:6379> SRANDMEMBER setlist
"xiang"127.0.0.1:6379> SRANDMEMBER setlist 2 集合后面可以跟系数,表示随机抽出系数个参数
1) "sui"
2) "bu"
随机弹出集合中某一个元素
127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "xiang"
3) "bu"
127.0.0.1:6379> SPOP setlist pop弹出,随机
"xiang"
127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "bu"
127.0.0.1:6379>
将集合中某一个指定的元素,移动到另外的一个集合中
127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "bu"
127.0.0.1:6379> sadd setlist2 xing
(integer) 1
127.0.0.1:6379> SMEMBERS setlist2
1) "xing"
127.0.0.1:6379> SMOVE setlist setlist2 sui 移动setlist中sui元素到setlist2这个集合中
(integer) 1
127.0.0.1:6379> SMEMBERS setlist
1) "bu"
127.0.0.1:6379> SMEMBERS setlist2
1) "sui"
2) "xing"
127.0.0.1:6379>
求两个set集合中交集与并集:可以实现功能共同关注等等,将偶像的粉丝放在一个set集合中,把另外的一个偶像放在一个集合中,通过set集合中的方法可以实现共同关注这个功能
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sadd set2 e 创建两个set集合,用这两个集合进行比较
(integer) 1
127.0.0.1:6379> SDIFF set1 set2 两个集合比较,以第一个集合为参照物,看第与二集合的区别
1) "a"
2) "b"
127.0.0.1:6379> SINTER set1 set2 求两个集合中的交集
1) "c"
127.0.0.1:6379> SUNION set1 set2 求两个集合的并集
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379>
Hash(哈希)
可以把hash看成一个map集合,属性值为key- value
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> HSET hash field1 ma 创建一个hash集合
(integer) 1
127.0.0.1:6379> HSET hash field2 yy
(integer) 1
127.0.0.1:6379> hget hash field1 获取hash集合中的值
"ma"
127.0.0.1:6379> HGETALL hash 获取hash为所有的数据
1) "field1"
2) "ma"
3) "field2"
4) "yy"
127.0.0.1:6379> HMSET hash2 field1 bu field2 xiang field3 sui 批量增加数据
OK
127.0.0.1:6379> HGETALL hash2 数据格式:key - value
1) "field1"
2) "bu"
3) "field2"
4) "xiang"
5) "field3"
6) "sui"127.0.0.1:6379> HDEL hash2 field1 删除指定数据
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HLEN hash2 //获取hash表中的长度
(integer) 2
127.0.0.1:6379>
判断数据是否存在
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HEXISTS hash2 field2 判断数据在表中是否存在,存在返回值为1不存在返回值为0
(integer) 1
127.0.0.1:6379> HEXISTS hash2 field1
(integer) 0
127.0.0.1:6379>
只获取hash表中的key值,或者是values值
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HKEYS hash2 获取表中所有的keys值
1) "field2"
2) "field3"
127.0.0.1:6379> HVALS hash2 获取表中所有的values值
1) "xiang"
2) "sui"
127.0.0.1:6379>
自动加一,自动减一
127.0.0.1:6379> HSET hash2 field1 4
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
5) "field1"
6) "4"
127.0.0.1:6379> HINCRBY hash2 field1 1 自动加一
(integer) 5
127.0.0.1:6379> HINCRBY hash2 field1 -1 自动加-1
(integer) 4
127.0.0.1:6379>
对象存储
127.0.0.1:6379> HSET user:1 name buxiang
(integer) 1
127.0.0.1:6379> HGET user:1 name
"buxiang"
127.0.0.1:6379>
zset:有序集合
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd list1 1 one 添加一个数据
(integer) 1
127.0.0.1:6379> zadd list1 2 two 3 three 添加多个数据
(integer) 2
127.0.0.1:6379> ZRANGE list1 0 -1 获取全部数据,0到 -1表示全部
1) "one"
2) "two"
3) "three"
127.0.0.1:6379>
添加顺序进行排序
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd salary 2000 ma 添加用户数据
(integer) 1
127.0.0.1:6379> zadd salary 5000 wang
(integer) 1
127.0.0.1:6379> zadd salary 500 li
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1 查看salary中的数据
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZRANGE salary 0 -1 withscores
1) "li"
2) "500"
3) "ma"
4) "2000"
5) "wang"
6) "5000" 从小到大排序
127.0.0.1:6379> ZRANGEbyScore salary -inf +inf 排序顺序从负无穷到正无穷进行排序
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZRANGEbyScore salary -inf +inf withscores 排序并显示score数据
1) "li"
2) "500"
3) "ma"
4) "2000"
5) "wang"
6) "5000"
127.0.0.1:6379> ZRANGEbyScore salary -inf 2500 withscores 排序从负无穷到2500之内的信息
1) "li"
2) "500"
3) "ma"
4) "2000"127.0.0.1:6379> ZREVRANGE salary 0 -1 从大到小排序
1) "wang"
2) "ma"
移除数据
127.0.0.1:6379> ZRANGE salary 0 -1
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZREM salary li 移除表中的数据
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "ma"
2) "wang"127.0.0.1:6379> ZCARD salary 获取集合中的元素个数
(integer) 2
获取指定区间中的数据
127.0.0.1:6379> zadd myset 1 bu 2 xiang 3 sui 4 xing 5 de 6 meng 添加数据到表中
(integer) 6
127.0.0.1:6379> ZRAnge myset 0 -1 查看表中的数据
1) "bu"
2) "xiang"
3) "sui"
4) "xing"
5) "de"
6) "meng"
127.0.0.1:6379> ZRAnge myset 0 -1 withscores 将附带信息一起查看出来
1) "bu"
2) "1"
3) "xiang"
4) "2"
5) "sui"
6) "3"
7) "xing"
8) "4"
9) "de"
10) "5"
11) "meng"
12) "6"
127.0.0.1:6379> ZCOUNT myset 1 4 获取1到4之间的数据个数
(integer) 4
127.0.0.1:6379>
除了上面的命令之外,redis还拥有很多的命令,如果遇到不懂的,或者是想学习更多的知识可以到官方文档去学习
Commands | Redis