Redis是一个由C语言编写、基于key-value存储结构的开源NoSQL数据库,其读写速度为10万次/秒,这个速度已经远远大于传统的关系型数据库。
在高并发的情况下,可将Redis作为应用程序与关系数据库之间的缓存。
读操作:直接从Redis中高速读取数据;
写操作:写操作有两种方式;
A. 先将数据写入MySQL 数据库,用于持久化,然后再将写入的数据同步至Redis中,方便后面访问量上来后高速读取;
B. 在高并发访问的情况下,可以先将读写操作都在Redis中执行,然后再将Redis中的数据写入消息队列MQ中,然后从MQ中将数据写入MySQL中。
Redis自身就是一个高性能的NoSQL数据库,因此Redis可以单独作为数据库。
访问Redis官网,根据自己需求选择版本号进行下载。
这里您可以根据您的操作系统选择对应的版本,我这里选择win版本;
Linux版本,解压命令tar -zxvf redis-4.0.11.tar.gz
,如有其它问题可以私信交流!
下载完成后解压;
进入redis安装目录,找到redis-server.exe
,以管理员权限运行,服务端运行如下图所示;
以管理员权限运行redis-cli.exe
,客户端运行如下图所示;
在开始讲解常见操作时,我们先来看看在操作Redis时我们需要注意的点
1.Redis对关键字或者变量不区分大小写,但对数据区分大小写。
2.在Redis中,K和KB含义不同,1K=1000 bytes,1KB =1024 bytes;同理,M和MB,G和GB也是一样的。
给hello 赋值:set hello world
获取hello的值 :get hello
获取hello的长度 :strlen hello
截取hello的值(从0位到2位):getrange hello 0 2
批量给k1、k2、k3赋值:mset k1 v1 k2 v2 k3 v3
批量获取k1,k2,k3的值:mget k1 k2 k3
给k4赋值,并且指定该变量的声明周期为10秒:setex k4 10 v4
查看k4剩余的过期时间:ttl k4
v4这个值已经过期了2秒了。
如果不存在k5,给k5赋值;如果已存在,则赋值失败:setnx k5 v5
赋值一个内容为数字形式的字符串:set num 100
num 自增1:incr num
num 自减1:decr num
综合来看,SET key value
EX 指生命周期为:秒
PX 指生命周期为:毫秒
NX 指当key不存在时,才能执行
XX指当key存在时,才能执行
给mylist中增加多个元素:lpush mylist a1 a2 a3 a4 a5
或rpush mylist a1 a2 a3 a4 a5
查看mylist中的前3个元素:lrange mylist 0 3
查看mylist中所有的元素:lrange mylist 0 -1
只保留mylist中第0个到第2个元素:ltrim mylist 0 2
将mylist的最后一个元素,移动到mylist2的第一个元素:rpoplpush mylist mylist2
将mylist的第二个元素值设置为x:lset mylist 2 x
在mylist的a3元素前后,插入linsert mylist bdfore/after a3 y
list中的元素可以重复,而set 中的元素不能重复(重复的元素会被忽略)
给myset中增加多个元素:sadd set a1 a2 a3
查看myset中的全部元素:smembers set
判断myset中是否包含a2 元素:sismember set a2
删除myset中的阿a2元素:srem set a2
随机获取(不会删除)myset中的两个元素:srandmember set 2
随机获取(并删除)myset中的一个元素:spop myset
将myset中的a2移动到myset2中的一个元素:smove set a2 myset2
Set不允许重复值,但是它是无序的,也不能根据下标获取元素。但是SortedSet能解决这个问题,SortedSet可以根据score值的大小,将集合中的元素排序,进而实现有序。
给student中增加多个元素(zs,ls,ww),并设置score值:zadd students 8 zs 9 ls 10 ww
根据score值排序,查询0-2个元素:zrange students 0 2
根据score值排序,查询第0-2个元素,并显示每个元素的score:zrange students 0 2 withscores
根据score值从小到大的顺序,查询students中第0个至第2个元素(逆序):zrevrange students 0 2
查询student中,score值>=8,且<10的元素:zrangebyscore students 8 10
删除students中zs和ww:zrem names zs ww
统计students中,score值介于8和10之间的元素个数:zcount students 8 10
查找students中ww元素的的下标:zrank students ww
获取students中,ww的score的值:zscore students ww
获取students中,ww的score值逆序:zrevrank students ww
在Java中我们需要给一个student对象赋值,需要使用student.setName(“zs”);在Redis里面就比较简单且明了,可以使用:hset student name zs
同时给多个属性赋值:hmset person name zs age 23 sex male
同时获取person多个属性:hmget person name age sex
获取student的name属性值:hget student name
获取student全部属性名:hkeys student
获取student的全部属性值:hvals student
获取student的全部属性值和属性名:hgetall student
删除student的name和age:hdel student age 3
给已存在的key 设置生命周期:expire k1 10
(秒) 、pexpire k1 10
(毫秒)
查看当前数据库中的全部key:key *
根据占位符?对key进行模糊查询:keys k?
判断是否存在某一个key: exists k1
查看某个key-value的数据类型:type k1
查看当前数据库有多少条数据:dbsize
将当前数据库中的某条数据,移动到其它数据库:move key 数据库编号
清空当前数据库中的全部数据:flushdb
清空全部数据库中的数据(谨慎使用哈):flushall
在学习概念和基础的时候,往往是最枯燥乏味的时候,但是越枯燥乏味的知识,在实际开发工作中用的时候越是重要。
在下一篇文章中,我们会一起学习如何配置Redis并且如何在Java工程中如何引入并使用Redis。