Redis的基本使用
在windows下使用
- 需要在终端切换到redis文件中:D:\redis\Redis-x64-5.0.10
- 使用 redis-server.exe redis.windows.conf 命令开启redis服务器
- 打开我们的客户端即可使用了
命令
redis是采用key-value存储的,所以我们可以通过key获取到我们的值
String字符串类型
字符串类型不需要添加双引号,redis会自动识别数据类型
- set key value : set name jiangt
设置键值对 - get key ; get name
返回:jiangt;通过key拿到我们的value - append key value:append name 123
在key为name的value中拼接字符串,这样name的value为:jiangt123 - type key:type name
返回:String
判断当前key的数据类型 - exists key :exists name
是否存在当前key,返回: 1(存在) , 0(不存在) - keys *
返回本数据库的所有key, - select 7
redis默认有16个数据库,通过此命令切换数据库,下标从0开始,所以当前切换的是6号数据库 - flushdb 7
清空当前数据库的数据 - flushall
清空所有数据库的数据,16个数据库的数据全部清除
List列表类型
在redis中,我们可以将list完成栈、队列、阻塞队列
所有的list命令都是用 l 开头的
取出是从队头开始算下标取出,添加两边都可以添加
- lpush :从队头开始添加元素,随着元素的增多,前元素会往队尾靠近
- 从对头开始添加元素,随着元素增对,所以第一个元素就会往队尾靠近,所以当前list中的第一个元素为3
- rpush:从队尾开始添加元素,随着元素的增多,前元素会往队头靠近
从队尾开始添加元素,随着元素的增多,第一个元素1就会往队头靠近,所以当前list中的第一个元素为1
插入
- LPUSH list one
将一个值或者多个值,插入到list头部 - LRANGE list 0 -1
取出全部的值 LRANGE:取值 0 -1:全部的值 - RPUSH list ranght
将一个值或者多个值,插入到list尾部
在上图可以看出,我们在list中先存入的是 one two 按道理取0 1 应该是这两个值
但是却是 three two
这是因为当前list是先进后出的单链表,当然也可以想象成栈
移除
在当前list中,因为是先进后出,所以第一个元素是three移除指定的值
这里是根据value来移除指定的值
当list中两个相同的value时
执行lem list 1 three :删除一个指定value时,当时当前list中有两个value,目前猜想是在根据list头部删除第一个value为three的值下标取值
在当前list中,因为是先进后出,所以下标0是two LINDEX:通过下标获得list中的某个值获取长度
Llen list :获取当前list长度
截取list
ltrim mylist 1 2:截取当前list中下标为1 2 的值,同时也只保存截取的值,其它值都被移除了
注:这里用的Rpush 从尾部开始插入,所以此时list的排序应该是:
hello
hello1
hello2
hello3
将集合队尾的第一个元素移除到另一个对头的第一个元素
rpoplpush:将集合队尾的第一个元素移除到另一个对头的第一个元素
rpoplpush list mylist: list:操作源 mylist:目的源
注:如果当前数据库中没有mylist这个目的源时,redis会自动创建一个名为mylist的目的源替换指定下标的值
lset mylist 2 test 0 -1 :mylist(操作源) 2:操作员中的下标 test:所要替换的值
注:如没有当前的mylist,执行lset操作会报错,如果存在则会更新当前下标值插入值
linsert mylist before “test” world
- linsert :插入指令
- mylist:操作源
- before ”test“ :在test字符前插入
- world:要插入的值
当list中有两个test字符时,再执行插入语句
linsert mylist after “test” mytest
redis会在第一个test后面插入,因为redis中的出口只有一个,所以在找到第一个test后就会执行语句
Set(无序集合)
set中的值不能重复
添加及查询所有值
Sadd myset hello:
- Sadd:添加指令
- myset:集合名 数据库没有时,会自动创建
- hello:要添加的值
Smembers myset:查询set集合中的所有值
- Smembers : 查询所有指令
- myset:要查询的集合名
包含
Sismember myset hello:myset集合是否包含此元素
- Sismember:包含指令 返回值 1:包含 0:不包含
- myset:操作源
- hello:具体元素
获取set集合中的元素的个数
移除元素
Srem myset hello:移除元素
- Srem:移除指令
- myset:操作源
- hello:要移除的元素
随机取元素
srandmember myset 2:随机抽取集合元素
- Srandmember:随机抽取元素指令
- myset:操作源
- 2:要抽取的元素的个数,不写则默认抽取1个元素
随机移除元素
Spop myset:随机移除元素
- Spop:随机移除指令
- myset:操作源
将指定的值,移动到另一个set集合中
Smove myset myset1 2:将指定的值,移动到另一个set集合中
- Smove:指令
- myset:操作源
- myset1:目的源 当目的源没有时,redis会自动创建
- 2:要操作的元素
差集
差集:两个集合不相同的部分
Sdiff key1 key2:差集
注:返回的值以第一个集合的为准,即返回第一个集合的元素,而这些元素是与第二个集合的元素不同的交集
交集:两个集合相同的部分
Sinter key1 key2:交集
返回值为两个集合相同的元素并集
Sunion key1 key2:并集
返回值为两个集合的和,但是当两个集合的元素相同,就只返回一个元素,不会都返回
Zset(有序集合)
之前的set集合都是集合名加具体的值,如
而Zset是在集合中的value前的加个Integer的值,redis会根据这个值进行排序,如
按scopre排序
在redis中,Zset会默认升序排序,当我们只需要区间时,可以这样做
Zrangebyscore myzst 1 2:
1 2 :会根据myzst的score值进行筛选
+inf:正无穷
-inf:负无穷
其他操作与set集合无异
Hash(哈希)
这一块可以比较难理解
可以想象成map集合,之前存储都是key-value,现在是key-map
而map集合里又有key-value
添加值与取出值
hset myhash key1 test1:添加值
- hset:添加指令
- myhash:相当于 key-map中的key
- key1 test1:相当于 key-map中的map,是一条数据
- key1:相当于 key-map中的 map的key
- test1:相当于 key-map中的map的value
hgetall myhash:根据key-map中的key取出map
- myhash:相当于 key-map中的key
- 返回的是整个map集合,会将整个map的key-value都返回
注:当key-map中的key-value中的key重复时,后面写的会覆盖掉前面写的
上图可以看出,在当前hash中的map的key1的值为test1,但是当我们插入重复的key时,后面的覆盖掉了前面的值
hget myhash key1:获取当前key-map中map的key的值
- hget:获取指令
- myhash :key-map中的key
- key1:相当于 key-map中的 map的key
- 返回的是当前的map中的key所对应的value值
获取key-map中的多个key的值
hmget myhash key1 key2:
- hmget:获取多个map中的key的值
- myhash :key-map中的key
- key1:相当于 key-map中的 map的key
- key2:相当于 key-map中的 map的key
- 返回的是多个map中的key的值
目前hmset已被官方弃用,建议使用hset
删除hash中map的指定key
hdel myhash key1:删除hash中map的指定key
- hdel :删除hash中map的指定key指令
- myhash :key-map中的key
- key1:相当于 key-map中的 map的key
获取hash中map的数据
hlen myhash
- hlen:获取hash中map的数据指令
- myhash :key-map中的key
- 返回的是map中的key-value的个数
判断hash中map的key是否存在
hexists myhash key1只获得所有map中的key
hkeys myhash:
- hkeys :只获得所有map中的key指令
- myhash :key-map中的key
只获得所有map中value
- hvals :只获得所有map中value指令
- myhash :key-map中的key
指定增量
我们在之前设定了一个key1,value为Integer类型的2,使用指令后边让它相加了
hincrby myhash key1 1:指定增量
- hincrby :指定增量指令
- myhash :key-map中的key
- key1:相当于 key-map中的 map的key
- 1:当为正数时则相加 为负数时则相减
注:只有当map中的value为Integer类型时,才会进行增量或者减量,否则会报错