My Redis Note

参考资料:http://www.runoob.com/redis/redis-tutorial.html
javaee 互联网轻量级框架整合开发

之前项目需要学了一下mongodb,小结一下就是mongo有许多集合(理解为表),文档(理解为行),适合存储大量数据。基本语法也差不多,确实存储大量数据时很棒。顺便学一下redis,越来越爆款的一款nosql开源数据库,主要开发中当作缓存使用,提高性能,解决并发等问题。有五种数据类型:string(set,get),Hash(HMSET,HGETALL),list(Lpush,Lrange),set(sadd,smembers),sorted set(zset,zrangebycore)

一.redis连接服务:

redis-cli.exe -h 127.0.0.1 -p 6379

连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING

PONG

or  AUTH "password"

二.5种数据类型:

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

String(字符串):
redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"

Hash(哈希表):(username , password , points )
127.0.0.1:6379> HMSET user:1 username runoob password runoob points 200
OK
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "runoob"
3) "password"
4) "runoob"
5) "points"
6) "200"

List(列表):
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"

Set(集合):
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "rabitmq"
2) "mongodb"
3) "redis"

zset(sorted set:有序集合):
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"

三.reids命令

1.键命令管理键:del,set… 详情参考官方文档:https://redis.io/commands

2.字符串命令:set get…

详情参考官方文档:https://redis.io/commands

3.新增HyperLogLog结构

redis 127.0.0.1:6379> PFADD runoobkey "redis"

1) (integer) 1

redis 127.0.0.1:6379> PFADD runoobkey "mongodb"

1) (integer) 1

redis 127.0.0.1:6379> PFADD runoobkey "mysql"

1) (integer) 1

redis 127.0.0.1:6379> PFCOUNT runoobkey

(integer) 3
方法:
1   PFADD key element [element ...] 
添加指定元素到 HyperLogLog 中。
2   PFCOUNT key [key ...] 
返回给定 HyperLogLog 的基数估算值。
3   PFMERGE destkey sourcekey [sourcekey ...] 
将多个 HyperLogLog 合并为一个 HyperLogLog

4.redis发布订阅:

客户端1创建订阅频道: redisChat:
redis 127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages… (press Ctrl-C to quit)
1) “subscribe”
2) “redisChat”
3) (integer) 1
客户端2发布:
redis 127.0.0.1:6379> PUBLISH redisChat “Redis is a great caching technique”
(integer) 1

5redis事务: MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务
注意redis事务与数据库事务很不一样,放队列时检测命令,命令错误则回滚。命令正确则入队,如操作数据类型错误,则该条命令失效其他数据类型正确操作无误的命令不回滚。可以用watch命令监听某些键。
流水线:希望入队无条件(set get),不依次等待。
cas存在的ABA问题可以用对象+version解决。

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

6管理服务器信息 :info …
7超时命令
设置键超时,超时的键有两种办法:
定时回收:缺点停顿
惰性回收:get时回收

四.redis高级

1数据库备份:save 将在 redis 安装目录中创建dump.rdb文件
可配置快照/只追加文件
主从同步:
写:主服务器写,发同步给从服务器
读:读任何一台从机

主从模式+哨兵
2设置密码:CONFIG set requirepass “root”
验证:AUTH password
3客户端连接

最大连接数
config get maxclients
1) "maxclients"
2) "10000"
redis-server --maxclients 100000

五.java 连接redis

1.下载jar包
import redis.clients.jedis.Jedis;
public class RedisJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        jedis.auth("123abc");
        System.out.println("连接成功");
        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());

       //设置 redis 字符串数据
        jedis.set("walle", "fucking handsome man");
        System.out.println("redis 存储的字符串为: "+ jedis.get("walle"));
        //存储数据到列表中
        jedis.lpush("site-list", "Runoob");
        jedis.lpush("site-list", "Google");
        jedis.lpush("site-list", "Taobao");
        List<String> list = jedis.lrange("site-list", 0 ,2);
        for(int i=0; i<list.size(); i++) {
            System.out.println("列表项为: "+list.get(i));
        }
      // 获取数据并输出
        Set<String> keys = jedis.keys("*"); 
        Iterator<String> it=keys.iterator() ;   
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(key);   
        }

    }
}

六.redis与数据库数据一致性问题

不重要的可以考虑读取redis的,重要的要读数据库的
读:尝试读取redis的,有就最好,没就从数据库里取,再放redis
写:直接操作数据库,然后更新到redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值