redis

链接: redis中文网

redis是一个基于内存的key-value的结构数据库

特点

基于内存存储,读写性能高
适合存储热点数据(热点商品,资讯,新闻。。。)
主要应用于数据缓存,任务队列,消息队列,分布式锁等

redis的常用基本配置


配置项			示例					说明
daemonize		daemonize yes		是否启用后台运行,默认no
port			port 6379			设置默认端口号,默认6379
logfile			logfile 日志文件		设置日志文件
databases		databases 255		设置redis数据库总量
dir  			dir数据文件目录		设置数据文件存储目录
requirepass		requirepass 12345		设置使用密码

redis通用命令

命令				示例					说明
select			select 0		选择0号数据库					
set				set name lily	设置key=name,value=lily
get				get hello		获得key=hello结果
keys			keys he*		根据patten表达式查询符合条件的key
dbsize			dbsize			返回key的总数
exists			exists a		检查key=a是否存在
del				del a			删除key=a的数据
expire			expire hello 20		设置key=hello 20秒后过期
ttl				ttl 		    查看key=a的过期剩余时间

redis数据类型

String				字符串类型
Hash				Hash类型
List				列表类型
Set					集合类型
Zset				有序集合类型 

字符串命令

get				get hello						获得key=hello结果
set				set hello world					设置key=hello,value=hello
mset			mset hello world java best		一次性设置多个值
mget			mget hello hava					一次性获取多个值
del				del hello						删除key=hello
incr/decr		incr count/decr count		    key值自增1/自减1
incrby/decrvy	incrby count 99/decrvy count 99		Key值自增99/自减99
setex           setex <key> <second> <value>    设置定时的值
setnx			setnx <key> <value> 			当key不存在时,设置value

Hash命令

hget			hget emp  age					获取hash中key=age的值
hset			hset emp  age 23				设置hash中age=23
hmset			hmset emp  age 30 name kaka		同时设置多个hash值
hmget			hmget emp age name				同时设置多个hash值
hgetall			hgetall emp						获取hash所有值
hdel			hdel emp age 					删除emp的age
hexists			hexists emp name				检查是否存在				
hlen			hlen emp						获取指定长度

list命令

rpush listkey c b a			右侧插入元素
lpush listkey  f e d		左侧插入元素
rpop  listkey 				右侧删除元素
lpop  listkey				左侧删除元素
lrange listkey  0 -1		查询列表中第一个至最后一个元素		

set与zset命令

set元素唯一且无序集合
sadd  set   a				为集合添加元素
smembers   set				查看集合元素
sinter  set1  set2         	查看两个集合的相交结果
sunion  set1 set2 			查看两个集合的合并结果
sdiff set1  set2			查看set1中有set2中没有的结果


zset元素唯一按序号排序的有序集合
zadd  zset   100  a			为集合添加元素
zrange						按序号进行排列输出

使用jedis操作redis数据库代码

jedis的使用方法基本等同于redis命令

package cn.itcast.jedis.test;

import cn.itcast.jedis.util.JedisPoolUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * jedis的测试类
 */
public class JedisTest {


    /**
     * 快速入门
     */
    @Test
    public void test1(){
        //1. 获取连接
        Jedis jedis = new Jedis("localhost",6379);
        
        //2. 操作
        jedis.set("username","zhangsan");
        
        //3. 关闭连接
        jedis.close();
    }


    /**
     * string 数据结构操作
     */
    @Test
    public void test2(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        
        //2. 操作
        //存储
        jedis.set("username","zhangsan");
        //获取
        String username = jedis.get("username");
        System.out.println(username);
        //可以使用setex()方法存储可以指定过期时间的 key value
        jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
        
        //3. 关闭连接
        jedis.close();
    }

    /**
     * hash 数据结构操作
     */
    @Test
    public void test3(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        
        //2. 操作
        // 存储hash
        jedis.hset("user","name","lisi");
        jedis.hset("user","age","23");
        jedis.hset("user","gender","female");

        // 获取hash
        String name = jedis.hget("user", "name");
        System.out.println(name);

        // 获取hash的所有map中的数据
        Map<String, String> user = jedis.hgetAll("user");

        // keyset
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
            //获取value
            String value = user.get(key);
            System.out.println(key + ":" + value);
        }

        //3. 关闭连接
        jedis.close();
    }


    /**
     * list 数据结构操作
     */
    @Test
    public void test4(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // list 存储
        jedis.lpush("mylist","a","b","c");//从左边存
        jedis.rpush("mylist","a","b","c");//从右边存

        // list 范围获取
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);
        
        // list 弹出
        String element1 = jedis.lpop("mylist");//c
        System.out.println(element1);

        String element2 = jedis.rpop("mylist");//c
        System.out.println(element2);

        // list 范围获取
        List<String> mylist2 = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist2);

        //3. 关闭连接
        jedis.close();
    }



    /**
     * set 数据结构操作
     */
    @Test
    public void test5(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // set 存储
        jedis.sadd("myset","java","php","c++");

        // set 获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

        //3. 关闭连接
        jedis.close();
    }

    /**
     * sortedset 数据结构操作
     */
    @Test
    public void test6(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // sortedset 存储
        jedis.zadd("mysortedset",3,"亚瑟");
        jedis.zadd("mysortedset",30,"后裔");
        jedis.zadd("mysortedset",55,"孙悟空");

        // sortedset 获取
        Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
        System.out.println(mysortedset);

        //3. 关闭连接
        jedis.close();
    }

    /**
     * jedis连接池使用
     */
    @Test
    public void test7(){

        //0.创建一个配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);

        //1.创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

        //2.获取连接
        Jedis jedis = jedisPool.getResource();
        
        //3. 使用
        jedis.set("hehe","heihei");


        //4. 关闭 归还到连接池中
        jedis.close();;

    }

    /**
     * jedis连接池工具类使用
     */
    @Test
    public void test8(){
        
        //通过连接池工具类获取
        Jedis jedis = JedisPoolUtils.getJedis();

        //3. 使用
        jedis.set("hello","world");

        //4. 关闭 归还到连接池中
        jedis.close();;

    }
}

spring-boot整合redis

spring data redis 提供了一个高度封装的类 : RedisTemplate ,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口:
ValueOperations: 简单的k-V操作
SetOperations:set类型操作
ZSetOperations:
HashOperations:
ListOperations:

pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

简单的配置application.yml

spring:
  redis:
    host: localhost
    port: 6379
    #password: 密码
    database: 0 #操作0号数据库
    jedis:
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #最大阻塞的等待时间
        max-idle: 4 #连接池中的最大空闲连接数
        min-idle: 0 #连接池中的最小空闲连接数

设置key序列化器

@Configuration
public class Redisconfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();

        //修改redis的key的序列化器,默认的key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;

    }
}

使用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值