我们使用wget安装,使用wget前,要先安装wget
yum -y install wget
在usr/local/java中创建redis包
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
tar -zxvf redis-5.0.14.tar.gz
make && make install
make && make install" 命令可以一次性完成软件的编译和安装过程。
进入到 usr/local/bin
./redis-server
如出现以下,则为成功
将配置文件cp到启动文件下面
修改daemonize 改成 yes 进行后台启动
把bind注释了,可以允许其他用户连接
./redis-cli -a zyf
服务启动的时候 daemonize 改为 no
在/lib/systemd/system 目录下创建一个脚本文件 redis.service,里面的内容如下:
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/redis/bin/redis-server /usr/redis/bin/redis.conf
ExecStop=/usr/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a yyl shutdown
[Install]
WantedBy=multi-user.target
刚刚配置的服务需要让 systemctl 能识别,就必须刷新配置
systemctl daemon-reload 刷新配置
systemctl enable redis 开机自启
systemctl status redis redis 状态
systemctl start redis 开启 redis
systemctl stop redis 关闭 redis
systemctl disable redis 禁止开机自启
默认 16 个数据库,类似数组下标从 0 开始,初始默认使用 0 号库
修改的话到配置文件下修改
dbsize 查看当前数据库的 key 的数量
flushdb 清空当前库
flushall 通杀全部库(一般情况下不要使用)
keys * 获取当前库中的所有key
select 0 选择第一个库
move key 1 将当前的数据库 key 移动到某个数据库,目标库有,则不能移动
randomkey 从当前数据库中随机返回
type key 类型
del key 删除 key
exists key 判断是否存在 key 存在返回1 不存在返回0
expire key 10 为给定的key设置过期时间 单位是秒
pexpire key 1000 给定的key设置过期时间 单位:毫秒
persist key 删除key的过期时间
ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
set
*NX:当数据库中key不存在时,可以将key-value添加数据库,也可以试用setnx
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数,setex
*PX:key的超时毫秒数
get
示例:get name
getset
示例: getset name new_cxx #给 name 的 value 设置新值,返回旧值
mset
msetnx一个失败全都失败
mget key1 key2 批量获取
incr
示例:incr age
decr
示例:decr age #递减
incrby / decrby
示例: incrby age 10 递增
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间(2倍),如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
lpush/rpush
lpop/rpop
rpoplpush
linsert
在
lrange
示例: lrange mylist 0 -1 0左边第一个,-1右边第一个,(0 -1表示获取有)
lindex
llen
lrem
从左边删除n个对应的value值(从左到右)
lset
List的数据结构为快速链表quickList。
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。
(它将所有的元素紧挨着一起存储,分配的是一块连续的内存)。
当数据量比较多的时候才会改成quicklist。
因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。