首页 > 数据库 >Redis

Redis

时间:2023-01-07 17:55:34浏览次数:55  
标签:myZset Redis System key println redisTemplate out

Redis

安装

1、Redis官网下载

2、tar zxvf redis目录 -C /usr/local

3、安装gcc
yum install gcc-c++

4、编译 (在/usr/local/redis目录)
make

5、执行(进入 src目录)
make install

6、编辑 redis.conf
1、后台运行 (deamonize yes)
image-20230106152158063

2、设置密码 (requirepass 210611)
		![image-20230106152338226](https://images.cnblogs.com/cnblogs_com/blogs/731984/galleries/2102057/o_230107094920_image-20230106152338226.png) 	

​ 3、设置远程连接 (#bind 127.0.0.1 注释掉)
image-20230106152445851

7、运行服务端
./src/redis-server ./redis.conf

8、远程连接
redis.cli.exe -h 192.168.159.131 -p 6379 -a 210611

学习

image-20230106154828326

1、字符串 (更多命令 : https://www.redis.net.cn/)

1. `SET key value` : 设置指定key的值
2. `GET key` :获取指定key的值
3. `SETEX key seconds value`:设置指定key的值,并将key的过期时间设为seconds秒
4. `SETNX key value`:只有key不存在时设置key的值

2、哈希hash

  1. HSET key field value:将哈希表key中的字段field的值设为value
  2. HGET key field : 获取存储在哈希表中指定字段的值
  3. HDEL key field:删除存储在哈希表中指点的字段
  4. HKEYS key:获取哈希表中所有字段
  5. HVALS key:获取哈希表中所有值
  6. HGETALL key: 获取在哈希表中指定key的所有字段和值

3、列表list

  1. LPUSH key value1 [value2]:将一个或多个值插入到列表头部
  2. LRANGE key start stop:获取列表指定范围内的元素
  3. RPOP key:移除并获取列表最后一个元素
  4. LLEN key:获取列表长度
  5. BRPOP key1 [key2] timeout:移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

4、集合set

  1. SADD key member1 [member2]:向集合添加一个或多个元素

  2. SMEMBERS keys:返回集合中的所有成员

  3. SCARD key:获取集合的成员数

  4. SINTER key1 [key2]:返回给定所有集合的交集

  5. SUNION key1 [key2]:返回所有给定集合的并集

  6. SDIFF key1 [key2]:返回给定所有集合的差集

  7. SREM key member1 [member2]:移除集合中一个或多个成员


  8. ZADD key score1 member1 [score2 member2]:向有序集合添加一个或多个成员,或者更新已存在成员的分数

  9. ZRANGE key star stop [WITHSCORES]:通过索引区间返回有序集合中指定区间内的成员

  10. ZREM key member [member...]:移除有序集合中的一个或多个成员

  11. ZINCRBY key increment member:有序集合中对指定成员的分数加上增量increment

5、通用命令

  1. keys pattern : 查找所有符合给定模式(pattern)的key
  2. exists key:检查给定key是否存在
  3. type key:返回key所存储的值的类型
  4. ttl key:返回给定key的剩余生存时间,以秒为单位
  5. del key:用于在key存在是删除key

在Java中操作redis

spring 操作本质上封装了 jedis 的api,并提供redisTemplate的各种方法来使用

1、导入坐标

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

2、配置文件

spring:
  application:
    name: springdataredis_demo
  # Redis相关配置
  redis:
    host: 192.168.159.131 # 这个是虚拟机内centos7的ip,通常都是localhost或127.0.0.1
    port: 6379
    password: 210611
    database: 0 # 操作的是0号数据库,默认有16个数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 # 最大连接数
        max-wait: 1ms # 连接池最大阻塞等待时间
        max-idle: 4 # 连接池中的最大空闲连接
        min-idle: 0 # 连接池中的最小空闲连接

3、修改key的序列化器

/**
 * Redis配置类
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

4、测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city123","beijing");

        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

    /**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

    /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }

    /**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

    }

    /**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }

    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }
}

标签:myZset,Redis,System,key,println,redisTemplate,out
From: https://www.cnblogs.com/freshman-me/p/17033119.html

相关文章