Redis的介绍与部署
其他nosql数据库对比
Ehcache
优点
基于java开发、基于JVM缓存、简单、方便、轻巧
缺点
不支持集群、分布式不支持、缓存的恢复
Memcache
优点
简单的key-value存储、内存使用率比较高、多核处理、多线程
缺点
无法容灾、不能持久化
redis
优点
丰富的数据结构、持久化、主从同步、故障转移、内存数据库
缺点
单线程、单核
安装redis
下载redis:https://redis.io/
发送到linux
安装环境依赖
yum install gcc-c++
注意
如果使用的是centOS7直接安装会报错不要慌是7默认安装的gcc-c++默认安装版本为4.8.5
我们可以先检查版本
gcc -v
升级到9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
//需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
//如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
//这样退出shell重新打开就是新版的gcc了
我们关闭当前再次检查一下版本没有什么问题后开始安装redis
make
make install
执行完毕后安装成功
配置
配置redis为开机自启动
在utils下,拷贝redis_init_script到/etc/init.d目录,目的要把redis作为开机自启动
创建 /usr/local/redis,用于存放配置文件
midir /usr/local/redis
拷贝redis配置文件:
cp redis.conf /usr/local/redis
修改拷贝后的redis.conf这个核心配置文件
daemonize no --->daemonize yes
修改redis的工作目录:
建议修改为: /usr/local/redis/working,working可以随意
绑定IP ,代表可以让远程连接,不收ip限制
bind 127.0.0.1 ---->0.0.0.0
最关键的是密码,默认是没有的
Requirepass 密码
修改redis_init_script
conf修改为/usr/local/redis这个文件夹后面{}.conf是运行时进程名字也可以修改
设置redis开机自启动,修改 redis_init_script,添加如下内容
#chkconfig: 22345 10 90
#description: Start and Stop redis
数据库数据类型
string 字符串
string: 最简单的字符串类型键值对缓存,也是最基本的
key相关
keys *:查看所有的key (不建议在生产上使用,有性能影响)
type key:key的类型
string类型
get/set/del:查询/设置/删除
set rekey data:设置已经存在的key,会覆盖
setnx rekey data:设置已经存在的key,不会覆盖
set key value ex time:设置带过期时间的数据
expire key:设置过期时间
ttl:查看剩余时间,-1永不过期,-2过期
append key:合并字符串
strlen key:字符串长度
incr key:累加1
decr key:类减1
incrby key num:累加给定数值
decrby key num:累减给定数值
getrange key start end:截取数据,end=-1 代表到最后
setrange key start newdata:从start位置开始替换数据
mset:连续设值
mget:连续取值
msetnx:连续设置,如果存在则不设置
其他
select index:切换数据库,总共默认16个
Redis的数据类型 - hash
hash
hash:类似map,存储结构化数据结构,比如存储一个对象(不能有嵌套对象)
使用
hset key property value:-> hset user name imooc-> 创建一个user对象,这个对象中包含name属性,name值为imooc
hget user name:获得用户对象中name的值
hmset:设置对象中的多个键值对 hset user age 18 phone 139123123
hmsetnx:设置对象中的多个键值对,存在则不添加-> hset user age 18 phone 139123123
hmget:获得对象中的多个属性-> hmget user age phone
hgetall user:获得整个对象的内容
hincrby user age 2:累加属性
hincrbyfloat user age 2.2:累加属性
hlen user:有多少个属性
hexists user age:判断属性是否存在
hkeys user:获得所有属性
hvals user:获得所有值
hdel user:删除对象
Redis的数据类型 - list
list
list:列表,[a, b, c, d, …]
使用
lpush userList 1 2 3 4 5:构建一个list,从左边开始存入数据
rpush userList 1 2 3 4 5:构建一个list,从右边开始存入数据
lrange list start end:获得数据
lpop:从左侧开始拿出一个数据
rpop:从右侧开始拿出一个数据
pig cow sheep chicken duck
llen list:list长度
lindex list index:获取list下标的值
lset list index value:把某个下标的值替换
linsert list before/after value:插入一个新的值
lrem list num value:删除几个相同数据
ltrim list start end:截取值,替换原来的list
Redis的数据类型 - set
和上面那个差不多就不写了只是不能重复
Redis的数据类型 - zset
sorted set:
sorted set:排序的set,可以去重可以排序,比如可以根据用户积分做排名,积分作为set的一个数值,根据数值可以做排序。set中的每一个memeber都带有一个分数
使用
zadd zset 10 value1 20 value2 30 value3:设置member和对应的分数
zrange zset 0 -1:查看所有zset中的内容
zrange zset 0 -1 withscores:带有分数
zrank zset value:获得对应的下标
zscore zset value:获得对应的分数
zcard zset:统计个数
zcount zset 分数1 分数2:统计个数
zrangebyscore zset 分数1 分数2:查询分数之间的member(包含分数1 分数2)
zrangebyscore zset (分数1 (分数2:查询分数之间的member(不包含分数1 和 分数2)
zrangebyscore zset 分数1 分数2 limit start end:查询分数之间的member(包含分数1 分数2),获得的结果集再次根据下标区间做查询
zrem zset value:删除member