Redis官网地址
Redis中文官网地址
Redis的版本号第二位为奇数,表示非稳定版本。偶数为稳定版本。
安装步骤特别简单,只需要下载压缩包(可以直接在官网下载或者通过wget下载)
依次执行下面命令即可
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar xzf redis-6.2.6.tar.gz
$ cd redis-6.2.6
$ make
$ make install
redis默认安装路径 use/local/bin,主要有以下几个可执行文件。
redis-server
Redis服务器启动命令redis-cli
客户端,操作入口去redis官网下载redis安装包:https://redis.io/
redis大多数情况下是在linux系统上使用,下载的压缩包也是linux系统的压缩包。我们可以使用WinSCP工具将下载的压缩包放到服务器或者虚拟机上。
安装gcc。centos的系统使用yum install gcc,安装过程中有提示就全选y。安装完成后,输入gcc --version,显示以下内容即安装完成。
解压redis压缩包,tar -zxvf xxxx.tar.gz。解压完成后,会在当前目录中生成一个redis目录,进入该目录,输入make,没有报错即编译完成。
在当前目录输入make install进行安装
安装完成后,会自动在/usr/local/bin目录下生成6个文件
以上便完成了redis的安装,启动redis有两种方式:
1、前台启动,
在命令行输入redis-server即可启动,关闭时输入exit或者ctrl + c。这种启动方式的缺点是当你终端关闭时,redis也会关闭。
2、后台启动。
(1)首先进入刚开始解压缩生成的redis-xxx目录中,在该目录中有一个redis.conf文件。
(2)输入cp redis.conf /etc/redis.conf,将文件复制到etc目录下。
(3)使用vim修改etc下的redis.conf文件,找到daemonize修改其为yes,然后保存退出。
(4)最后进入/usr/local/bin目录,输入redis-server /etc/redis.conf,后台启动完成。
3、输入redis-cli命令即可连接redis服务,要想关闭redis后台服务,可以在redis-cli中输入shutdown关闭后台服务,想退出redis-cli,可以使用exit退出。
前台启动
直接在相应目录下执行redis-serve
命令
后台启动
① 拷贝一份redis.conf到其他目录
② 修改redis.conf中的daemonize no(128行)改为yes
③ redis-server /路径/redis.conf
服务关闭
① redis-cli -p 端口号 shutdown
② ps -ef | grep redis
kill -9 进程号
① redis的默认端口号是6379。
② redis默认有16个数据库,从0-15。
③ redis采用单线程+多路IO复用
select 2
切换数据库flushdb
清空当前库flushall
清空全部库dbsize
查看当前库有多少keykeys *
查看当前库所有key,支持模糊查询,例如key *ool,可以查到所有ool结尾的keytype key1
查看key1的数据类型exists key1
判断key1是否存在expire key1 10
为key1设置10s过期时间ttl key1
查看key1还有多少秒过期,-1表示永不过期,-2表示已过期del key
删除指定key unlink key
非阻塞删除keyinfo clients
查看redis当前连接数config get maxclients
查看redis最大连接数String类型是二进制安全的,意味着Redis的string可以包含任何数据,比如图片等。一个Redis中字符串value最多可以是512M。
set
添加键值对get
通过key获取valueappend
将给定的value追加到原值的末尾,如果没有就新建strlen
获取对应value的长度setnx
当key不存在时,添加键值对incr
将key中存储的数值加1.如果为空,则新增值为1decr
减一,如果为空,则新增值为-1incrby/decrby <步长>
将key中的数字值增减步长mset/msetnx
同时多个key,value。mset任意一个存在则失败。setex <过期时间>
set的同时设置过期时间getset
获取旧值,同时用新值覆盖String字符串小于1M时,扩容都是加倍现有空间。如果超过1M,扩容时一次只会多扩1M空间。字符串最大长度为512M
redis的列表是简单的字符串列表,可以添加一个元素到头部或尾部。底层是双向链表,对两端的操作性很高,通过索引下标操作中间节点性能较差。
① lpush/rpush
从左边/右边插入一个或多个值。例如从左边放入v1,v2,v3。存放的顺序是v3,v2,v1
② lpop/rpop
从左边/右边吐出一个值
③ rpoplpush
从key1列表右边吐出一个值,插到key2列表左边。
④ lrange
按照索引下标获得元素(从左往右)
⑤ lindex
按照索引下标获得元素(从左往右)
⑥ llen
获取列表长度
⑦ linsert
在value的后面插入newvalue
⑧ lrem
从左边删除n个value(从左往右)
⑨ lset
将列表key下标为index的值替换成value
list的数据结构为快速链表quickList。
在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。
当数据量较多时会将多个ziplist改成quicklist。
因为普通链表需要附加的指针空间太大,redis将链表和ziplist结合起来组成quicklist。这样既满足了快速插入删除,又不会出现太大的空间冗余。
Redis的Set是string类型的无序不重复集合,底层是一个value为null的hash表。
常用
① sadd
将一个或多个member元素加入到结合key中,已经存在的元素被忽略。
② smembers
取出该集合所有值
③ sismember
判断集合key种是否含有该value值,有为1没有为0
④ scard
返回该集合中元素的个数
⑤ srem
删除集合中某几个元素
不常用
⑥ spop
随机从该集合中吐出一个值,集合中删除该元素。
⑦ srandmember
随机从该集合中取出n个值,不会从集合中删除
⑧ smove
把集合中一个值从一个集合source移动到另一个集合destination。
⑨ sinter
返回两个集合的交集元素
sunion
返回两个集合的并集元素
sdiff
返回两个集合中的差集元素,key1中有的但是key2中没有的。
Set底层是通过HashMap实现的。HashMap的key是非重复而且随机的。将HashMap所有的value都指向同一对象。他的添加删除查找复杂度都是o(1),也就是说对着数据的增加,查找数据的时间不变。
相当于一个key,可以存一个hashmap
hset
给key中的field键赋值valuehmset ....
批量设置hash的值,4.0后hset也能实现此功能hget
从key1中取出field的valuehgetall
获取该key下所有的键值hexists
查看哈希表key中,给定阈field是否存在。hkeys
列出该hash集合所有的fieldhvals
列出该hash集合所有的valuehincrby
为哈希表key中所有的field的值增减incrementhsetnx
将哈希表key中field键值设为value,仅仅当field不存在时成功当field-value长度较短且个数较少时,使用压缩列表,否则使用hashtable。
Redis有序集合zset是一个没有重复元素的字符串集合。它的每个成员关联了一个评分(score),这个评分被用来按照从最低分到最高分排列集合中的成功。评分可以重复。
zadd
将一个或多个元素和评分加入到集合中zrange [WITHSCORES]
返回有序集合中,下标(按照分数从小到大排序,第一个元素为0,第二个元素为1…)在start-stop之间的元素。带WITHSCORES可以让分数和值一起返回zrangebyscore [WITHSCORES] [limit offset count]
返回有序集合key中,所有score值介于min和max之间(包括等于)的成员,成员按score值从小到大次序排列zrevrangebyscore key [WITHSCORES] [limit offset count]
从大到小排列zincrby
为元素的score加上增量zrem
删除该集合下,指定值的元素zcount
统计该分数区间内的元素个数zrank
返回该值在集合中的排名,从0开始SortedSet(zset)是redis提供的一个特别的数据结构,一方面等价于java的数据结构Map
zset底层使用两个数据结构:
hash,hash的作用就是关联value和权重score,保障value的唯一性。可以通过元素value 找到对应的score值。
跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。