String字符串
追加字符串
在原有的字符串上追加字符串内容
append key String
测试:
通过append命令,在原本的字符串后追加字符串
127.0.0.1:6379> APPEND name 666
(integer) 11
127.0.0.1:6379> get name
"zhangsan666"
注意:如果当前的key不存在,就相当于set一个key
获取字符串长度
strlen key #返回一个Integer类型的数字
测试:
127.0.0.1:6379> STRLEN name
(integer) 11
截取和替换字符串
一、截取字符串
相当于普通字符串中的subString方法
1、命令
getrange key start end
2、测试
截取字符串前4位
127.0.0.1:6379> set key1 helloworld
OK
127.0.0.1:6379> getrange key1 0 3 #相当于[0,3],两边都能取到
"hell"
3、拓展,查看所有的字符串
getrange key 0 -1 #相当于直接get key
二、替换字符串
1、命令
setrange key 替换位数 替换内容
2、测试
127.0.0.1:6379> set key1 asdfgh
OK
127.0.0.1:6379> get key1
"asdfgh"
127.0.0.1:6379> setrange key1 1 XXXX
(integer) 6
127.0.0.1:6379> get key1
"aXXXXh"
127.0.0.1:6379>
实现自增和自减操作(常用在浏览量)
一、自增
1、命令
incr key
2、测试
设置字段views是浏览量的key,我希望每一次用户访问,key自动加一
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"
二、自减
1、命令
decr key
2、测试
让views这个key实现自减
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> get views
"0"
三、实现自增个性化设置步长
1、命令
incrby key 自增步长
2、测试
让views每次自增10
127.0.0.1:6379> INCRBY views 10
(integer) 10
127.0.0.1:6379> INCRBY views 10
(integer) 20
127.0.0.1:6379> get views
"20"
四、自减,并设置步长
1、命令
decrby key 自减步长
2、测试
让views实现自减10
127.0.0.1:6379> DECRBY views 10
(integer) 10
127.0.0.1:6379> DECRBY views 10
(integer) 0
127.0.0.1:6379> get views
"0"
setex和setnx
一、创建key并设置过期时间
1、命令
setex key 过期时间 value
2、测试,设置一个key,30秒钟过期
127.0.0.1:6379> setex key2 30 hello
OK
127.0.0.1:6379> get key2
"hello"
127.0.0.1:6379> ttl key2
(integer) 19
二、如果某个key不存在,则创建
1、命令
setnx key value
2、测试
如果该key不存在,则成功创建,返回1,如果库中该Key已经存在,那么返回0,创建失败
127.0.0.1:6379> setnx key3 aaa
(integer) 1
127.0.0.1:6379> keys *
1) "key3"
2) "key1"
127.0.0.1:6379> setnx key3 aaa
(integer) 0
127.0.0.1:6379> keys *
1) "key3"
2) "key1"
批量设置和获取值
一、批量设置数据
1、命令
mset k1 v1 k2 v2 k3 v3 ......
2、测试
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"
3、也可以实现如果某个key不存在,才能创建
这条命令是原子性的,即倘若有一个key数据库中是存在的,则都创建失败
msetnx k1 v1 k2 v2
二、批量获取数据
1、命令
mget k1 k2 k3 ......
2、测试
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
存储对象
1、命令
mset 对象名:id:k1 v1 对象名:id:k2 v2 #设置对象
mget 对象名:id:k1 对象名:id:k2 #获取对象
2、测试
我这是用的mset和mget,可以批量设置对象
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
getset组合命令
1、命令
getset key value
2、测试
127.0.0.1:6379> getset k1 redis
(nil) #库中没有这个数据,则返回空
127.0.0.1:6379> get k1
"redis" #将新的value设置到key中
127.0.0.1:6379> getset k1 mysql
"redis" #如果库中该key存在value,那么返回本身的value
127.0.0.1:6379> get k1
"mysql" #然后将新的数据更新
List列表
存值和取值(含list列表命令的规则)
首先需要了解,在Redis中操作list,命令都是L开头的
一、存值
1、将数据插入到列表的头部(左边)命令
该命令的返回值是list的长度
lpush list v1
测试
127.0.0.1:6379> lpush list A
(integer) 1
127.0.0.1:6379> lpush list B
(integer) 2
2、将数据插入到尾部(右边)命令
rpush list v
测试
127.0.0.1:6379> rpush list z
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "A"
4) "z"
二、取值
1、获取全部列表的值的命令
lrange list 0 -1
测试
127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"
2、获取区间列表数据,需要注意,我存数据的顺序的A B C,但是取值的时候是从列表左至右,类似于Java中的栈,后进先出(联想压子弹)
127.0.0.1:6379> lrange list 0 1
1) "C"
2) "B"
移除数据
一、左边移除第一个数据
1、命令
返回移除的数据
lpop list
2、测试
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "A"
4) "z"
127.0.0.1:6379> lpop list
"C"
二、从右边移除第一个数据
1、命令
返回移除的数据
rpop list
2、测试
127.0.0.1:6379> rpop list
"z"
127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"
三、移除指定的值
1、命令
lrem list count(移除几个数据) 元素
2、测试
移除list列表中的1个A元素
127.0.0.1:6379> lrem list 1 A
(integer) 1
3、拓展,移除多个相同的元素,只修改count即可
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "B"
4) "B"
127.0.0.1:6379> lrem list 2 B
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
通过下标获取列表数据
1、命令
lindex list index
2、测试
127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"
127.0.0.1:6379> lindex list 0
"B"
获取列表的长度
1、命令
llen list
2、测试
127.0.0.1:6379> llen list
(integer) 2
截取指定下标的列表
1、命令
ltrim list start stop
2、测试
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> ltrim mylist 1 3
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "d"
移除列表的最后的元素添加到B的列表中
1、命令
rpoplpush list newlist
2、测试
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> rpoplpush mylist newlist
"d"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lrange newlist 0 -1 #查看新的列表
1) "d"
更新列表指定下标的元素
1、命令
这个命令会先判断库中是否存在该列表,如果不存在列表,更新就会报错;
如果存在列表,则就能更新数据;
如果列表中某个下标的元素不存在,更新也会报错
lset list index newElement
2、测试
把列表中的b更新成zhangsan
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "b"
3) "c"
127.0.0.1:6379> lset mylist 1 zhangsan
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "zhangsan"
3) "c"
往列表中插入元素
1、命令
linsert list before||after 列表参照元素 newElement
2、测试
往b的前边插入666
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "b"
3) "c"
127.0.0.1:6379> linsert mylist before b 666
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "666"
3) "b"
4) "c"
Set集合
存值和取值(含set集合命令的规则)
所有操作set的命令,前面都是以s开头
set和list的区别:set中的元素都是无序且不能重复的!!!!!!
一、存值
1、命令
sadd set element
2、测试
存值成功,返回1,失败则返回0
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset b
(integer) 1
二、取值
1、查看所有的集合中的所有数据命令
smembers set
2、测试
127.0.0.1:6379> smembers myset
1) "a"
2) "b"
3) "c"
4) "d"
获取集合中元素的个数
1、命令
scard set
2、测试
127.0.0.1:6379> scard myset
(integer) 4
判断元素是否在set集合中
1、命令
sismember set element
2、测试
如果set集合中存在,则返回1,如果不存在,则返回0
127.0.0.1:6379> sismember myset a
(integer) 1
移除集合中指定的元素
1、命令
srem set element(集合中的元素)
2、测试
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "c"
3) "d"
随机移除集合中的元素
1、命令
spop set
2、测试
127.0.0.1:6379> spop myset
"b"
127.0.0.1:6379> spop myset
"c"
127.0.0.1:6379> SMEMBERS myset
1) "d"
获取集合中指定个数的随机元素
因为set集合中的元素是无序的且不重复的,所以可以根据它无序的特点,获取随机的元素
1.命令
srandmember set 随机元素个数
2、测试
127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "d"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "d"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "c"
将指定的元素,移动到另外的集合中
1、命令
smove set1 set2 element(被移动的元素)
2、测试
127.0.0.1:6379> SMEMBERS myset # 查看集合1中的元素
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> SMEMBERS myset1 # 查看集合2中的元素
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> smove myset myset1 a #将集合1中数据移动到集合2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> SMEMBERS myset1
1) "a"
2) "zhangsan"
3) "lisi"
查看两个集合的差集、交集和并集
一、差集
1、命令
该命令的含义是set1集合参照set2集合,有哪几个元素和set2是不同的
sdiff set1 set2
2、测试
127.0.0.1:6379> SMEMBERS myset
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> SMEMBERS myset1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> sadd myset1 a
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "a"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> sdiff myset myset1
1) "b"
2) "c"
3) "d"
二、交集
1、命令
查看两个集合共有的元素,将来可以用来编写共同关注等实际业务
sinter set1 set2
2、测试
127.0.0.1:6379> sinter myset myset1
1) "a"
三、并集
1、命令
两个集合中一共有多少元素
sunion set1 set2
2、测试
127.0.0.1:6379> sunion myset myset1
1) "c"
2) "d"
3) "b"
4) "lisi"
5) "a"
6) "zhangsan"
Hash哈希
存值和取值(含Hash命令的规则)
所有和Hash相关的命令都是以h开头的
理解Hash在Redis中的存储规则:
常规的是key-value
而Hash的规则是key(变量)-(key-value)
一、存一个值
1、命令
hset hash field(字段名) value(字段数据)
2、测试
存储成功返回1
127.0.0.1:6379> hset myhash field1 a
(integer) 1
127.0.0.1:6379> hset myhash field2 b
(integer) 1
二、取一个值
1、命令
通过字段,获取到value
hget hash filed(字段)
2、测试
127.0.0.1:6379> hget myhash field1
"a"
三、批量存值
1、命令
hmset hash field1(字段名) value2(字段数据) field2 value2
2、测试
存储成功返回OK,如果原来hash中存在相同的字段,那么这个字段中的数据将会被覆盖
127.0.0.1:6379> hmset myhash field1 666 field2 777 field3 888
OK
四、批量取值
1、命令
hmget hash field1(字段名) field2
2、测试
127.0.0.1:6379> hmget myhash field1 field2
1) "666"
2) "777"
五、获取hash中所有的键和值,展示方式是一个键一个值
1、命令
hgetall hash
2、测试
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "666"
3) "field2"
4) "777"
5) "field3"
6) "888"
删除哈希中指定key
1、命令
hdel hash field(字段名)
2、测试
删除成功返回1,key被删除,对应的value也就不存在了
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "666"
3) "field2"
4) "777"
5) "field3"
6) "888"
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
获取hash中的key字段个数
1、命令
hlen hash
2、测试
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
127.0.0.1:6379> hlen myhash
(integer) 2
判断hash中的key字段是否存在
1、命令
hexists hash(哈希表) field(字段)
2、测试
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
127.0.0.1:6379> hexists myhash field1 #field1是不存在的,则返回0
(integer) 0
127.0.0.1:6379> hexists myhash field2 #存在则返回1
(integer) 1
只获取hash中的field字段或者value
1、命令
hkeys hash #获取所有的field字段
hvals hash #获取所有的字段对应的value
2、测试
127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field3"
127.0.0.1:6379> hvals myhash
1) "777"
2) "888"
实现自增或自减
1、命令
hincrby hash field(字段名) 自增步长
2、测试
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
5) "field4"
6) "2"
127.0.0.1:6379> hincrby myhash field4 1
(integer) 3
127.0.0.1:6379> hincrby myhash field4 -1 #步长设置成-1,就相当于自减1
(integer) 2
判断字段是否存在,如果存在,则创建失败
1、命令
hsetnx hash field(字段名) value(设置的值)
2、测试
如果表中,没有这个字段,则创建成功,返回1;
如果表中存在这个字段,则返回0,创建失败
127.0.0.1:6379> hsetnx myhash field5 hello
(integer) 1
127.0.0.1:6379> hsetnx myhash field5 world
(integer) 0
存储对象
1、命令
hset 对象名:id key value
2、测试
127.0.0.1:6379> hset user:1 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:1 age 12
(integer) 1
127.0.0.1:6379> hget user:1 name
"zhangsan"
127.0.0.1:6379> hget user:1 age
"12"
Zset有序集合
存值和取值(含Zset集合命令的规则)
Zset有序集合的命令,都是以z开头的
Zset和set的区别就是在他的基础上,增加了一个标识,可以用来排序。存值和获取值
1、命令
zadd zset 标识位 value # 存值,标识位可以按需求设置
zrange zset 0 -1 #查看zset集合中的所有数据
2、测试
127.0.0.1:6379> zadd myzset 1 one #添加1个值
(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"
给数据排序
一、升序
1、命令
zrangebyscore zset -inf +inf #-inf +inf相当于负无穷到正无穷,当然了,后面的范围我们可以自定义!
zrangebyscore zset -inf +inf withscores #带上标志位的升序排序
2、测试
127.0.0.1:6379> zadd salary 1000 zhangsan #添加3个用户,模拟薪水问题,标志位模拟薪水
(integer) 1
127.0.0.1:6379> zadd salary 5000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 30 wangwu
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf #不带标志位,从小到大排序
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores #带上标志位的排序
1) "wangwu"
2) "30"
3) "zhangsan"
4) "1000"
5) "lisi"
6) "5000"
二、降序
1、命令
zrevrange zset 0 -1
2、测试
127.0.0.1:6379> zrevrange salary 0 -1
1) "lisi"
2) "zhangsan"
移除集合中的元素
1、命令
zrem zset element(集合中的元素)
2、测试
127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary wangwu
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
查看有序集合中的元素个数
1、命令
zcard zset
2、测试
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> zcard salary
(integer) 2
至此,关于Redis操作五大数据类型的命令全部总结完毕!命令比较复杂,笔者一次性将其归并到一篇文章里面,希望能够对大家掌握Redis的使用有帮助。建议收藏,反复浏览消化!
后续还会持续更新关于Redis等技术栈分享,敬请期待!