Redis

Redis

一,第三方客户端介绍

​ 如果是Linux下,在使用之前需要放行6379端口

  • 编辑iptables文件

    vi /etc/sysconfig/iptables
  • 放行6379

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
  • 保存后,重启防火墙

    service iptables reload 或者
    service iptables restart

二,在java中使用redis(重要)

1.Jedis介绍

​ redis不仅可以通过命令行来操作,现在主流的语言(Java,C#…)基本都有客户端的支持.所以我们要通过java来操作Redis.

企业里用的最多的是Jedis.

​ Jedis:只是java操作Redis的客户端,相当于jdbc

2.Jedis使用步骤

​ 如果连接的是Lixus上的,要放行6379端口,否则连接不上; windows版本(在本机上)的Redis不需要

  1. 导入jar包

    导入jar包

  2. 创建jedis对象

    new Jedis("192.168.17.136", 6379)
  3. 操作redis数据库 set,get,del

  4. 释放资源 close

    • Example:
    @Test
    public void fun01(){
        String host = "localhost";
        int port = 6379;
        //创建jedis对象
        Jedis jedis = new Jedis(host, port);
        //set key value
        jedis.set("akey", "aaa");
    
        String value = jedis.get("akey");
        System.out.println("value="+value);
        jedis.del("akey");
        System.out.println(jedis.get("akey"));
        //释放资源
        jedis.close();
    }
    
    
    @Test
    public void fun02(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();
    
        poolConfig.setMaxTotal(10);
    
        String host = "localhost";
        int port = 6379;
        JedisPool jedisPool = new JedisPool(poolConfig, host,port);
    
        Jedis jedis = JedisUtils.getJedis();
        //set key value
        jedis.set("akey", "aaa");
    
        String value = jedis.get("akey");
        System.out.println("value="+value);
        jedis.del("akey");
        System.out.println(jedis.get("akey"));
        //释放资源
        jedis.close();
    }
3.Jedis工具类的抽取(使用连接池)
public class JedisUtils {

    //配置
    static JedisPoolConfig config;
    //连接池
    static JedisPool pool;

    static{
        config = new JedisPoolConfig();
        //设置最大连接数
        config.setMaxTotal(10);

        config.setMaxIdle(5);

        pool = new JedisPool(config, "192.168.147.128", 6379);

    }
    //获得jedis
    public static Jedis getJedis(){
        Jedis jedis = pool.getResource();
        return jedis;
    }

}

三,redis中数据结构

  • redis中存储的数据是以key-value的形式存在的.其中value支持5种数据类型

    ​ 字符串(String)

    ​ 哈希(hash)

    ​ 字符串列表(list)

    ​ 字符串集合(set)

    ​ 有序的字符串集合(sorted-set或者叫zset)

  • key不要太长(不能>1024个字节),

  • 也不要太短 .

  • key在项目里面最好统一写法, key的常用的写法:

    项目名子模块key名称;    crm_order_username  

四,存储字符串(掌握)

1.概述

​ string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的 。一个键最大能存储512MB。

2.常见命令
命令描述
set key value设置指定 key 的值
get key获取指定 key 的值
incr key将 key 中储存的数字值增一
decr key将 key 中储存的数字值减一
getset key value先获取,再设置
incrby key count将key 中储存的数字值增加指定数量
decrby key count将key 中储存的数字值减少指定数量
append key value如果 key 已经存在并且是一个字符串,将 value 追加到 key 原来的值的末尾;若无,则设置一个
del key删除key

+ 设置


set key value

  • 获取

    get key
  • 删除

    del key
  • 自增

    incr key
  • 自减

    decr key
  • 扩展命令

    • getset key value:先获取再设置

    • incrby key count:指定增加数量

    • decrby key count:指定减少数量

    • append key value:追加(若有指定的key 则追加,若无,则设置一个),相当于拼接字符串

五,存储hash(掌握)

1.概述

​ Redis中hash 是一个键值对集合。

​ Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象**

​ Redis存储hash可以看成是String key 和String value的map容器. 也就是说把值看成map集合.

  • Eg:

    KEY             Value
    user1       username    tom
                age         18
    user2       username    jack
                sex         man
2.常见命令
命令命令描述
hset key field value将哈希表 key 中的字段 field 的值设为 value
hmset key field1 value1[field2 value2]同时将多个 field-value (域-值)对设置到哈希表 key 中
hget key filed获取存储在哈希表中指定字段的值
hmget key filed1 filed2获取多个给定字段的值
hgetall key获取在哈希表中指定 key 的所有字段和值
hdel key filed1 [filed2]删除一个或多个哈希表字段
del key删除整个hash
hlen key获取哈希表中字段的数量
hincrby key filed increment为哈希表 key 中的指定字段的浮点数值(整数)加上增量 increment 。
hkeys key获取所有哈希表中的字段
hvals key获得所有的value
HEXISTS key field查看哈希表 key 中,指定的字段是否存在。

+ 设置


hset key field value :设置一个键值对
hmset key field1 value1 field2 value2 ... :设置多个键值对

  • 获取

    hget key filed:获取存储在哈希表中指定字段的值
    hmget key filed1 filed2...:获取多个给定字段的值
    hgetall key:获取在哈希表中指定 key 的所有字段和值(了解)
  • 删除

    hdel key filed1 filed2 ...: 删除指定的字段
    hdel key:删除整个hash
  • 扩展命令

    • hlen key 获取哈希表中字段的数量
    • hincrby key filed increment:给指定的子键增加指定的值
    • hkeys key:获取所有哈希表中的字段
    • hvals key:获得所有的value
    • HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。

六,存储list

1.概述

​ Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 特点:有序

  • ArrayList

内存是lian

  • 单向链表

    这里写图片描述

  • 双向链表

    这里写图片描述

2.常见命令
命令命令描述
lpush key value1 value2…将一个或多个值插入到列表头部(左边)
rpush key value1 value2…在列表中添加一个或多个值(右边)
lpop key左边弹出一个
rpop key右边弹出一个
lrange key startindex endindex获取列表指定范围内的元素eg:(0 -1:查看所有, 0 3查看前4个)
llen key返回指定key所对应的list中元素个数
lrem key count member在key中移除指定个数的成员count > 0:从左往右移除指定个数,count < 0:从右往左移除指定个数, count = 0:清空list中指定元素
lset key index value通过索引设置列表元素的值(0代表第一个元素, 1代表第二个,-1代表尾元素),
linsert key before|after pivot value在pivot元素前或者元素后插入一个值
rpoplpush resource destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回

rpoplpush的使用场景:

这里写图片描述

  • 两端的插入(没有的话,会创建一个)

    lpush key value1 value2...
    rpush key value1 value2...
  • 两端的移除

    lpop key :左边弹出一个
    rpop key :右边弹出一个
  • 查看

    lrange key startindex endindex;
    eg: lrange key 0 -1 查看所有的
    lrange key 0 3; 查看前4个(从左边开始...)
  • 获取列表的个数

    llen key: 返回指定key所对应的list中元素个数
  • 了解的命令

    lrem key count member:在key中移除指定个数的成员
        如果count > 0:从左往右移除指定个数
            count < 0:从右往左移除指定个数
            count = 0:清空list中指定元素
    
    lset key index value: 通过索引设置列表元素的值. 0代表第一个元素, -1代表尾元素
    linsert key before|after pivot value: 在pivot元素前或者元素后插入一个值
    rpoplpush resource destination: 移除列表的最后一个元素,并将该元素添加到另一个列表并返回

七,存储set

1.概述

​ Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

特点:无序,唯一

2.常见命令
命令命令描述
sadd key member1 [member2]向集合添加一个或多个成员
srem key member1 [member2]移除一个成员或者多个成员
smembers key返回集合中的所有成员,查看所有
sismember key member判断一个set中是否有指定的member
sdiff key1 key2返回给定集合的差集 (第一个减第2个)
sunion key1 key2返回给定集合的并集
sinter key1 key2返回给定集合的交集
scard key获得set中成员的数量
srandmember key随机返回set的一个成员
sdiffstore key1 key2 key3将差异的部分插入key1 (不是添加而是重新创建)

使用场景:

这里写图片描述

  • 添加

    sadd key member1 member2
  • 移除

    srem key member1 member2
  • 查看所有

    smembers key
  • 判断一个set中是否有指定的member

    sismember key member
  • 聚合运算

    • sdiff key1 key2: 差集. 我有你没有

    这里写图片描述

    • sinter key1 key2: 交集. 我有加你有

    这里写图片描述

    • sunion key1 key2: 并集. 我有你也有

    这里写图片描述

  • 扩展命令

    • scard key: 获得set中成员的数量
    • srandmember key: 随机返回set的一个成员
    • sdiffstore key1 key2 key3:将差异的部分插入key1

八,存储sortedset

1.概述

​ Redis 有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个!!(double)!!类型的分数。

​ redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

2.常见命令
命令命令描述
zadd key score1 member1[ score2 member2]添加一个或者多个 score1(分数) member(名字)
zcard key获得集合成员数量
zscore key member获取元素的得分
zrem key member1[member2]删除一个或者多个成员
zrange key startindex endindex [withscores]按照分数的从小到大的顺序展示所有的元素
zrevrange key start stop [withscores]按照分数的从大到小的顺序展示所有的元素

+ 添加


zadd key score1 member1 score2 member2...

  • 获得集合成员数量

    zcard key
  • 获取元素的得分

    zscore key member
  • 删除

    zrem key member1 member2...
  • 展示所有的元素

    zrange key startindex endindex [withscores]; 按照分数的从小到大的顺序展示所有的元素
    zrevrange key start stop [withscores]; 按照分数的从大到小的顺序展示所有的元素

九,通用的操作

  • keys *: 查询所有的key

  • exists key:判断是否有指定的key 若有返回1,否则返回0

  • expire key 秒数:设置这个key在缓存中的存活时间

  • ttl key:展示指定key的剩余时间

    ​ 若返回值为 -1:永不过期

    ​ 若返回值为 -2:已过期或者不存在

  • del key:删除指定key

  • rename key 新key:重命名

  • type key:判断一个key的类型

十,redis的特性

1.多数据库性

​ redis默认是16个数据库, 编号是从0~15.

  • select index:切换库
  • move key index: 把key移动到几号库(index是库的编号)
  • flushdb:清空当前数据库
  • flushall:清空当前实例下所有的数据库
2.服务器命令(自学)
  • ping :测试连接是否存活
  • echo str: 打印内容
  • quit: 退出连接
  • dbsize:返回当前数据库key的数目
  • info:获取服务器信息
3.订阅发布
  • subscribe channel: 订阅频道
  • psubscribe *: 批量订阅频道 eg: psubscribe a b c
  • publish channel content:在指定的频道发布内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值