redis
redis
redis-server.exe redis.windows.conf
redis-cli.exe -h 127.0.0.1 -p 6379
set myKey abc
get myKey
redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库
redis是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库,并提供多种语言的API.
BSD是Berkeley Software Distribution 伯克利软件发行版
nosql数据库在以下的这几种情况下比较适用
1.数据模型比较简单
2.需要灵活性更强的IT系统
3.对数据库性能要求较高
4.不需要高度的数据一致性
5.对于给定key,比较容易映射复杂值的环境
redis与其他key-value缓存产品有以下三个特点
1.redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
2.redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.redis支持数据的备份,集群等高可用功能。
make MALLOC=libc
make PREFIX=/usr/local/redis install
cp redis.conf /usr/redis
less -mN redis.conf
redis默认不是以守护进程启动
daemonize yes
bind 127.0.0.1
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir ./
masterauth master-password
requirepass foobared
maxclients 128
maxmemory
redis内存溢出处理方案
1.为数据设置超时时间
2.lru算法将不用的数据删除
./bin/redis-server ./redis.conf
ps -ef | grep -i redis
redis-cli -h host -p port -a password
./bin/redis-cli shutdown 正常关闭 会进行持久化
kill -9 pid
del ccc
dump ccc
expire ccc 10
ttl ccc
pttl ccc
pexpire ccc 10
//将快要过期的key设置为永久有效
persist bbb
set users:1 a
set users:2 b
set users:3 c
keys users:?
select 0
select 1
rename aaa aaaa
//将ccc移动到数据库1中
move ccc 1
type ccc
redis支持5种数据类型
string hash list set zset
//给不存在的key赋值,解决分布式锁方案之一
setnx ccc 1111111
getrange ccc 0 2
//getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil
getset
//返回key所存储的字符串值的长度
strlen key
incr topic:num
decr topic:num
incrby topic:num 10
decrby topic:num 10
hset h1 name zhangsan
hget h1 name
hmset users:1 id 1 name zhangsan age 22
hmget users:1 id name age
hgetall users:1
hkeys users:1
hlen users:1
hdel users:1 age
hmset users:2 id 1 name zhangsan age 22
hincrby users:2 age 10
//age字段是否存在
hexists users:2 age
//查看已经开放的端口
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
package cn.tedu;
public class RedisDemo {
public static void main(String[] args){
//连接池 redis 基本配置信息
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(5);//最大连接数
poolConfig.setMaxIdle(1);//最大空闲数
String host = "192.168.21.129";
int port = 6379;
JedisPool pool = new JedisPool(poolConfig, host, port);
Jedis jedis = pool.getResource();
jedis.auth("123456");
System.out.println(jedis.ping());
}
/**
* 测试字符串string
* Redis中有哪些命令,Jedis中就有哪些方法
*/
@Test
public void t1(){
Jedis jedis = new Jedis("192.168.21.130",6379);
jedis.auth("123456");
jedis.set("strName", "字符串的名称");
String strName =jedis.get("strName");
System.out.println(strName);
jedis.close();
}
public void t2(){
Jedis jedis = new Jedis("192.168.21.130",6379);
jedis.auth("123456");
String key = "applicationName";
if(jedis.exists(key)){
String result =jedis.get(key);
System.out.