一、redis简介
1.redes介绍:
Redis:Remote Dictionary Server( 远程字典服务器 ) 是完全开源免费的,用 C 语言编写的,遵守BSD 协议,是一个高性能的 (key/value) 分布式内存数据库,基于内存运行并支持持久化的NoSQL 数据库,是当前最热门的 NoSql 数据库之一 , 也被人们称为数据结构服务器
2、redis作用:
1. 内存存储和持久化:Redis 支持异步将内存中的数据写到硬盘上,同时不影响继续服务
2. 取最新 N 个数据的操作,如:可以将最新的 10 条评论的 ID 放在 Redis 的 List 集合里面
3. 模拟类似于 HttpSession 这种需要设定过期时间的功能
4. 发布. 订阅消息系统
5. 定时器. 计数器
3、特点:
1. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
2. Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset, hash 等数据结构的存储
3. Redis 支持数据的备份,即 master-slave 模式的数据备份
4. 如何获取 redis:http://redis.io/ | http://www.redis.cn/
二、redis安装
1.下载:wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2.移动:mv redis-5.0.5.tar.gz /opt/ 这是移动到opt下面的文件夹。
3.解压:先进入到opt文件夹下的install。tar -zxvf redis-5.0.5.tar.gz -C /install 这是解压到install目录内,install是自己创建的。
4.安装gcc:yum -y install gcc-c++ 。因为是c语言编写的所以需要c语言解释器。
5.编译:进入到redis文件夹下 然后执行make 进行编译 。
6.安装:make install PREFIX=usr/local/redis 就是把它安装到usr下面的local目录下的redis内,
目前redis 没有 会自动创建一个, 安装就是把redis的可执行命令放这里面。
7:配置一下环境变量,在任何地方都可以使用。
vim /etc/profile :进入配置页面配置redis的环境变量。
1 ####################################JAVA_HOME########
JAVA_HOME=/opt/install/jdk1.8.0_201 2 PATH=$PATH:$JAVA_HOME/bin 3 4 5 6 ###################################CATALINA_HOME###### 7 CATALINA_HOME=/opt/install/apache-tomcat-7.0.65 8 PATH=$PATH:$CATALINA_HOME/bin 9 10 11 #########################REDIS_HOME################## 12 REDIS_HOME=user/local/redis/ 13 PATH=$PATH:$REDIS_HOME/bin
注意:这三个环境变量分别是jdk,tomcat,redis的环境变量
8:source/etc/profile 刷新生效
命令解析:
redis-server:服务端
redis-cli:客户端
redis-check-aof:对aof文件进行修复的
redis-check-dump:对dump文件进行修复的
redis-benchmark:对redis进行测试的
redis-sentinel ->redis-server:相当于一个快捷方式
三、redis作为后端服务程序运行
就是redis启动之后一直占用前端窗口没法输出命令,想办法让redis作为后台服务启动。
1.将opt/install/redis目录下的redis.conf的daemonize 后面的no 改为yes。,
步骤:cd /opt/install/redis-5.0.7/ 先进入这个目录里面。
然后 ll 查看 发现redis.conf文件 然后输入:vi redis.conf 进去编辑
进去 /daemonize 是搜索这个内容 按n 进行下一个搜索,找到之后改了就行。
2.同时将redis.conf拷贝到usr/local/redis/bin目录下。
cp redis.conf /usr/local/redis/bin/ 拷贝到这里面一份。
3. cd /usr/local/redis/bin 进入redis的bin目录 然后就是启动
./redis-server redis.conf 在这个目录下 启动服务器 后面跟着redis.conf 就是让他作为后端服务器运行。
4,然后可以通过下面这条命令查看rdis 是否启动:
ps -ef | grep redis 或者这种通过端口号查看 netstat -an | grep 637
出现这样就证明服务器正在启动!!
然后直接执行当前目录下的客户端让客户端启动
./redis-cli
然后输入ping 测试
至此结束。这样就和windows一样 在后台启动 就不会占用一个窗口了
四、redis客户端
4.1.命令行
./redis-cli 就是在启动服务端的时候 然后启动客户端 。
exit ,quit 是对出客户端
shutdowm:是在客户端输出命令关闭服务端。
4.2.图形化界面
找到erdis-desktop-manager 直接安装就行 。
进去后连接redis服务器:然后名称随便起,地址就是服务器在的虚拟机的ip:192.168.248.99
如果连接不上 可能版本问题
然后按照下面的修改下
修改redis.conf文件
protected-mode后的 yes 改成no
Bind 127.0.0.1 给注释掉
然后重启redis.conf配置文件。 让他重新加载这个配置文件。
./redis-server redis.conf
五、string,hash,key,list,set,zset
5.1String:
string可以存储任意类型的数据
set key value:给指定的key设置对应的value值
SET key 名字 value 值 : 设置单一键值对 (key 值相同会覆盖原来的值 , 类似于 map 集合
get key: 根据给定的key获取指定的值
APPEND key 名字 新值:在原有的值的基础上添加新的值
STRLEN key 名字 : 获取字符串的长度(key 值必须是数字 )
mset key1 value1 key2 value2 key3 value3:同时设置多个键值对
mget key1 key2 key3:同时根据多个键获取键对应的值
getset key1 value2:表示先获取key1对应的值value1,然后把key1的值设置为value2
要求:value值是数字类型的字符串。
incr key :表示将该key对应的value值增加1
incrby key increment:表示将给key对应的value值增加指定的幅度
decr key:表示将该key对应的value值减去1
decrby key decrement:表示将给key对应的value值减去指定的幅度
append key2 aaa:给key2对应的value值后面拼接字符串
数值增加:
用途:1.网站访问量统计
2.生成表的id
5.2:key的使用:
keys * :指令 查看当前这个库中所有的 key 值
exists key 名字 : 判断某个 key 值是否存在 0 表示不存在 1 表示存在
move key 名字 数据库的索引下标 : 将某个值移除到指定的库中
expire key 名字 秒 :设定指定的 key 的存活时间
PERSIST key: 清除存活时间,让该key永不过期
PEXPIRE key milliseconds生存时间设置单位为:毫秒
rename key1 new_name:可以给某个key重命名
ttl key 名字 : 查看当前的 key 还有多少存活时间 -1 表示永不过期,-2 表示已经过期
type key 名字 : 查看当前 key 的类型(key String,Object)
select 下标 : Select 下标可以切换不同的数据库:
keys * :查看当前库中所有的key
flushdb:清空当前库中的所有键值对
flushall:清空所有库中的键值对
del key:删除指定的key-value键值对
dbsize:查看当前库中key的个数
INFO:查看当前redis服务器的信息
补充 : Redis 默认有 16 个库,我们可以通过修改 redis 配置文件 redis.conf 来改变库的量
5.3:Hash类型
Hash类型适合存储对象,格式如下
命令如下:
hset key field value:给某个key设置指定的field-value
Hmset key field1 value1 field2 value2 field3 value3:同时给key设置多个field-value
hget key field:根据field查看指定key的field值
hmget key field1 field2..:同时查看key对应的多个field值
HSETNX key field value:当key对应的某个field域不存在的时候,给该field赋值值!
hincrby zhangsan age -4:给指定的key的某个field增加对应的数值
hkeys key: 查看指定的key所有的field
hvals key:查看指定key的所有field的value值
Hgetall key:查看指定key的所有field-value
hdel key field:删除某个key对应的field-value
del key:删除某个key对应的所有field-value
HEXISTS key field:查看key的某个field是否存在,存在返回1,不存返回0
hlen key:查看某个key有多少个field-value
5.4: List类型【有序,可重复】
lpush key value1 value2 value3:从左边依次往list集合中存放数据
rpush key value1 value2 value3:从右边依次往list集合中存放数据
lpop key:默认将该key对应列表数据中最左边的那个元素弹出。
rpop key:默认将该key对应列表数据中最右边的那个元素弹出
llen key:查看某个key对应的列表中元素的个数
lrange key start stop:查看list集合中有哪些数据,指定查看起始位置和终止位置
5.5:Set类型:【无序,不可重复】
SET类型适合存储Java中的set集合数据
命令:
sadd key value1 value2 value3 value2: 往集合中添加了3个元素
srem key value2:删除key对应的集合中的value2元素
sismember key value2:查看指定的集合中是否含有某个元素,有返回1,没有返回0
smembers key:查看集合中所有的元素
集合可以和高中学过集合类似,可以参与交集、并集、差集的运算:
交集:sinter set01 set02:获取两个指定集合的交集
并集:sunion set01 set02:求两个集合的并集
差集:sdiff set01 set02:表示set01集合有而set02集合没有的元素
scard key:获取指定key的对应的集合元素的数量:
SRANDMEMBER key:随机读取指定集合中的一个元素。
5.6: zset[Sorted set]
有序集合: 数据本身不可重复,但是数据都有一个分数,分数是可以重复
zadd key 98 value1 98 value2 90 value3:给指定的集合中添加元素,并且每个元素前面都有分数
zscore zset01 value2:获取集合中某个元素的分数
zrem zset01 value1:删除某个key对应集合中的某个元素
zrevrange zset02 0 1 withscores:查看指定集合中有哪些元素,按着元素分数逆序排列
zrange zset01 0 -1 【withscores】:查看指定集合中有哪些元素,如果看分数则带withscores参数
可以实现游戏排名: