redis常用操作和操作键值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis常用操作和操作键值相关的知识,希望对你有一定的参考价值。

string、list常用操作

string数据创建、覆盖及设置过期时间

127.0.0.1:6379> get key1 ? ? ? ?  查看原来的key1的值
"b"
127.0.0.1:6379> set key1 123 ? ?  覆盖创建一个新的key1的string的值
OK
127.0.0.1:6379> get key1 ? ? ? ?  查看
"123"
127.0.0.1:6379> setnx key1 456 ? ? 使用setnx来覆盖key1元素,会返回0的结果,不会覆盖key1原有的元素
(integer) 0
127.0.0.1:6379> get key1 ? ? ? ? ? 显示key1的元素,没有变化,如果使用set则会覆盖key1原来的元素
"123"
127.0.0.1:6379> setnx key2 123 ? ? 可以使用setnx来直接创建一个新的str元素,返回结果是1
(integer) 1
127.0.0.1:6379> get key2 ? ? ? ? ?  查看
"123"
127.0.0.1:6379> setex key3 10 abcd  使用setex创建key3元素,过期时间为10秒,值为abcd
OK
127.0.0.1:6379> get key3 ? ? ? ? ? ?10秒内还存在
"abcd" 
127.0.0.1:6379> get key3 ? ? ? ? ? ?10秒后查询数据则过期了

list数据类型常用操作
查询后list中会将被查询过的元素取出不再保存,所以查询后的元素就会"消失"。如从一个list取值:

127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa"
2) "aaa"
127.0.0.1:6379> LPOP list1
"aaa"
127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa"
127.0.0.1:6379> LPOP list1
"aaa"
127.0.0.1:6379> LRANGE list1 0 -1
(empty list or set)

在list的排序内插入一个元素。格式: linsert list表名 AFTER old new

127.0.0.1:6379> LPUSH list1 aaa
(integer) 1
127.0.0.1:6379> LPUSH list1 bbb
(integer) 2
127.0.0.1:6379> LPUSH list1 ccc
(integer) 3
127.0.0.1:6379> LRANGE list1 0 -1 ? ? ? ? ? ? ? 创建三个元素并查看
1) "bbb"
2) "ccc"
3) "aaa"
127.0.0.1:6379> linsert list1 AFTER bbb eee ? ?  在bbb元素前面插入一条eee的新元素并查看结果
(integer) 4
127.0.0.1:6379> LRANGE list1 0 -1
1) "bbb"
2) "eee"
3) "ccc"
4) "aaa"

在一个list中插入一个元素到第几位,格式如:lset list表名 2 abcd ? ? //在第三位的地方插入元素abcd。例如:

127.0.0.1:6379> lset list1 2 abcd 
OK
127.0.0.1:6379> LRANGE list1 0 -1
1) "bbb"
2) "eee"
3) "abcd"
4) "aaa"

查看某个元素,格式:lindex list表名 2 ? ? ?//查看第三个元素,查看后元素还存在表中。如:

127.0.0.1:6379> lindex list1 2
"abcd"
127.0.0.1:6379> LRANGE list1 0 -1
1) "bbb"
2) "eee"
3) "abcd"
4) "aaa"

查看表中有几个元素,格式:llen list表名

127.0.0.1:6379> llen list1
(integer) 4

set集合常用操作
在一个集合中插入元素,并使用SMEMBERS查看集合中的所有元素

127.0.0.1:6379> sadd set1 aaa
(integer) 1
127.0.0.1:6379> sadd set1 bbb
(integer) 1
127.0.0.1:6379> sadd set1 ccc
(integer) 1
127.0.0.1:6379> SMEMBERS set1 ? ? ?  查看集合set1中所有的元素
1) "ccc"
2) "bbb"
3) "aaa"
4) "2"
5) "3"
6) "4"
7) "a"

删除一个指定元素或随机取出一个元素并将这个元素从集合里永久删除

127.0.0.1:6379> srem set1 aaa ? ? ?  删除集合里指定的aaa元素
(integer) 1
127.0.0.1:6379> spop set1 ? ? ? ? ?  删除集合里随机的一个元素
"bbb" 
127.0.0.1:6379> SMEMBERS set1 ? ? ?  查看集合里剩下的元素
1) "ccc"
2) "2"
3) "3"
4) "4"
5) "a"

求多个集合之间的不同的元素,以第一个集合为标准,列出第二个集合没有的元素。并将两个集合之间的差集存储到一个新的集合当中。如

127.0.0.1:6379> SMEMBERS set1 ? ? ? ? ? ? ? ? ? ? 首先查看两个集合中的元素
1) "ccc"
2) "2"
3) "3"
4) "4"
5) "a"
127.0.0.1:6379> SMEMBERS set2
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SDIFF set1 set2 ? ? ? ? ? ? ? ? ? 对比两个集合中的元素,以第一个集合为标准,列出第二集合没有的元素
1) "4"
2) "ccc"
3) "a"
127.0.0.1:6379> SDIFFSTORE set3 set1 set2 ? ? ? ? 将两个集合中的差集结果得出并存储到一个新的集合当中
(integer) 3
127.0.0.1:6379> SMEMBERS set3
1) "4"
2) "ccc"
3) "a"

两个集合间求交集结果并将其存储在一个新的集合当中?

127.0.0.1:6379> SMEMBERS set1 ? ? 
1) "ccc"
2) "2"
3) "3"
4) "4"
5) "a" 
127.0.0.1:6379> SMEMBERS set2 ? ? ? ? ? ? ? ?  查看两个集合的所有元素
1) "1" 
2) "2"
3) "3"
127.0.0.1:6379> SINTER set1 set2 ? ? ? ? ? ? ? 对比两个集合之间相同的元素,两个集合中都有2、3两个元素
1) "2"
2) "3"
127.0.0.1:6379> SINTERSTORE set4 set1 set2 ? ? 求交集并将结果存储到一个新的集合set4当中
(integer) 2
127.0.0.1:6379> SDIFF set4
1) "2"
2) "3"

求出两个集合的并集,将两个集合中的元素合并在一起,重复的元素会去重显示,并保存到一个新的集合当中,如:

127.0.0.1:6379> SUNION set1 set2 ? ? ? ? ? ? ? ? 将两个集合合并显示
1) "ccc"
2) "2"
3) "3"
4) "4"
5) "1"
6) "a"
127.0.0.1:6379> SUNIONSTORE set5 set1 set2 ? ? ? 将两个集合合并存储到一个新的集合当中,并将重复的元素去重处理来存储
(integer) 6
127.0.0.1:6379> SDIFF set5 ? ? ? ? ? ? ? ? ? ? ? 查看并集处理后创建的新存储的集合当中的元素
1) "ccc"
2) "2"
3) "3"
4) "4"
5) "a"
6) "1"

判断一个元素是否属于(存在)一个集合中,比如这样:

127.0.0.1:6379> SISMEMBER set1 ccc ? ? ? ? ? ?  查看ccc元素是否属于set1集合
(integer) 1
127.0.0.1:6379> SDIFF set1 ? ? ? ? ? ? ? ? ? ?  查看集合所有元素来验证ccc是否存在于set1集合
1) "4"
2) "3"
3) "2"
4) "ccc"
5) "a"

随机取出一个元素,但并不会删除该元素。比如取出一个随机元素,并查看集合中这个随机元素是否还存在

127.0.0.1:6379> SRANDMEMBER set1 ? ? ? ? ? ? ? ?  随机取出集合中的元素"3"
"3"
127.0.0.1:6379> SRANDMEMBER set1 ? ? ? ? ? ? ? ?  随机取出集合中的元素"a"
"a"
127.0.0.1:6379> SDIFF set1 ? ? ? ? ? ? ? ? ? ? ?  查看这些元素还存在于set1这个集合当中
1) "4"
2) "3"
3) "2"
4) "ccc"
5) "a"

set有序集合操作
创建一个有序集合并向集合中写入元素

127.0.0.1:6379> zadd zseta 16 24 ? ? ?  创建集合元素,zadd后分别是集合名称、分值和元素三项参数
(integer) 1
127.0.0.1:6379> zadd zseta 18 224
(integer) 1
127.0.0.1:6379> zadd zseta 180 124
(integer) 1
127.0.0.1:6379> zadd zseta 300 624
(integer) 1
127.0.0.1:6379> zrange zseta 0 -1 ? ? ? zrange查看zseta集合中所有的元素,0 -1表示列出从0到-1所有的元素范围
1) "123"
2) "234"
3) "24"
4) "224"
5) "124"
6) "624"

查看集合的元素并带上元素分值

127.0.0.1:6379> zrange zseta 0 -1 withscores ?  withscores是在查看集合时同时列出元素的分值范围/大小
 1) "123" 元素
 2) "1" ? 分值
 3) "234" 元素
 4) "2" ? 分值
 5) "24"  元素
 6) "6" ? 分值
 7) "224" 元素
 8) "18"  分值
 9) "124" 元素
10) "180" 分值
11) "624" 元素
12) "300" 分值

在集合中删除一个指定的元素,可以准确的删除集合中的这个元素,需要在操作之前必须知道要删除的元素值。操作如:

127.0.0.1:6379> zrem zseta 24
(integer) 1
127.0.0.1:6379> zrange zseta 0 -1
1) "123"
2) "234"
3) "224"
4) "124"
5) "624"

查询元素的索引值,索引值从0开始,按照score正向排序。查询元素的引索值如下面的操作:

127.0.0.1:6379> zrange zseta 0 -1 ? ? ? 查看所有元素,可以得知一共有五个元素
1) "123"
2) "234"
3) "224"
4) "124"
5) "624"
127.0.0.1:6379> zrank zseta 624 ? ? ? ? 这里按照从下往上的方式查询元素引索值,引索值从0开始,所以引索值会比元素个数-1
(integer) 4
127.0.0.1:6379> zrank zseta 124
(integer) 3
127.0.0.1:6379> zrank zseta 224
(integer) 2
127.0.0.1:6379> zrank zseta 234
(integer) 1
127.0.0.1:6379> zrank zseta 123
(integer) 0

倒叙显示集合中所有元素,统计集合中元素个数,统计集合中一个分值范围内的元素个数并查询返回一个分值范围内的元素,操作如:

127.0.0.1:6379> zrevrange zseta 0 -1 ? ? ?  倒叙显示集合中元素
1) "624"
2) "124"
3) "224"
4) "234"
5) "123"
127.0.0.1:6379> zcard zseta ? ? ? ? ? ? ? ? 统计集合中元素个数
(integer) 5
127.0.0.1:6379> zcount zseta 1 10 ? ? ? ? ? 查询返回一个分值范围内的元素个数
(integer) 2
127.0.0.1:6379> zrangebyscore zseta 1 10 ?  查询返回一个分值范围内的元素
1) "123"
2) "234"

使用引索指定范围来删除多个范围内的元素,删除分值范围内的元素

127.0.0.1:6379> zremrangebyrank zseta 0 2 ? ? ? 删除引索0到2范围内的元素,删除了0、1、2三个
(integer) 3
127.0.0.1:6379> zrangebyscore zseta 1 10 ? ? ?  由于这里10引索内只有0、1、2三个元素,所以在删除后10引索内再没有其他元素存在了
(empty list or set)

127.0.0.1:6379> zrange zseta 0 -1 ? ? ? ? ? ? ? 使用分值删除一个范围内的元素前先查看下现存在的元素
1) "124"
2) "624"
127.0.0.1:6379> zremrangebyscore zseta 100 130  删除100到130分值范围的元素,删除了123和624元素
(integer) 2
127.0.0.1:6379> zrange zseta 0 -1 ? ? ? ? ? ? ?  查询;因为删除了最后两个有序集合元素,所以最后有序集合显示为没有元素
(empty list or set)

Redis常用键值和服务操作

keys* ? ? ? ? ? ?  //取出所有key
127.0.0.1:6379> keys *
 1) "key1"
 2) "set5"
 3) "set2"
 4) "hash1"
 5) "k3"
 6) "hash2"
 7) "seta"
 8) "set"
 9) "k2"
10) "key2"
11) "hash"
12) "list1"
13) "set3"
14) "k1"
15) "set4"
16) "set1"
--------------------------------------------------------------------------
keys k* ? ? ? ? ? //模糊匹配
127.0.0.1:6379> keys k*
1) "key1"
2) "k3"
3) "k2"
4) "key2"
5) "k1"
--------------------------------------------------------------------------
exists name ? ? ?  //有name键返回1,否则返回0;
127.0.0.1:6379> exists key1 ? ? ? ? 查询一个存在的key
(integer) 1
--------------------------------------------------------------------------
del key1 ? ? ? ? ? //删除一 个key //成功返回1 ,否则返回0;
127.0.0.1:6379> del key11 ? 删除一个不存在的key
(integer) 0

--------------------------------------------------------------------------
EXPIRE key1 100 ?  //设置key1100s后过期

--------------------------------------------------------------------------
ttl key ? ? ? ? ?  //查看键还有多长时间过期,单位是s,当key不存在时,返回-2。当key存在但没有设置剩余生存时间时,返回-1。否则, 返回key的剩余生存时间。

--------------------------------------------------------------------------
select 0 ? ? ? ? ? ? ? ? ? //代表选择当前数据库,默认进入0数据库

--------------------------------------------------------------------------
move age 1 ? ? ? ? ? ? ? ? //把age移动到1数据库,age属于key名称,成功返回1,失败返回0

--------------------------------------------------------------------------
persist key1 ? ? ? ? ? ? ? //取消名字为key1键值的过期时间 

--------------------------------------------------------------------------
randomkey ? ? ? ? ? ? ? ?  //随机返回一个key

--------------------------------------------------------------------------
rename oldname newname ? ? //重命名key

--------------------------------------------------------------------------
type key1 ? ? ? ? ? ? ? ?  //返回键的类型
127.0.0.1:6379> type set4 ? ? ? ? 普通set集合类型
set
127.0.0.1:6379> type seta ? ? ? ? 有序set集合的类型
zset
--------------------------------------------------------------------------

redis服务操作
Redis常用操作(服务)

dbsize ? ? ? ?  //返回当前数据库中key的数目info //返回redis数据库状态信息

--------------------------------------------------------------------------
flushdb ? ? ? ? //清空当前数据库中所有的键

--------------------------------------------------------------------------
flushall ? ? ?  //清空所有数据库中的所有的key. 

--------------------------------------------------------------------------
bgsave ? ? ? ?  //保存数据到rdb文件中,在后台运行

--------------------------------------------------------------------------
save ? ? ? ? ?  //作用同上,但是在前台运行

--------------------------------------------------------------------------
config get * ?  //获取所有配置参数

--------------------------------------------------------------------------
config get dir  //获取配置参数

--------------------------------------------------------------------------
config set dir  //更改配置参数

--------------------------------------------------------------------------
数据恢复:  首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服 务即可恢复数据

笔记记录不周,请多多指教

以上是关于redis常用操作和操作键值的主要内容,如果未能解决你的问题,请参考以下文章

21.13-21.17 redis常用操作,数据类型,操作键值,安全设置

5种redis常用操作(数据类型+键值+服务+安全)

21.13/21.14/21.15 redis常用操作 21.16 redis操作键值 21.17

Redis之学习-键值操作

redis 哈希 hash 常用操作

7-2redis hash类型及其他常用操作