Redis快速入门

redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。既然用redis读取效率那么高,最后内容也会添加到磁盘那么我们就当然要使用它了。

下载地址:
https://redis.io/

下载安装Redis
打开Redis服务配置文件。注意:不要找错了,通常为redis.windows-service.conf,而不是redis.windows.conf。
找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示

image

确定服务启动
image

下载安装redis桌面管理工具
redis-desktop-manager
启动后新建连接
image

基本操作
image

若启动命令行测试
image

1.Redis基本操作
redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和hash(哈希类型)五种数据类型,存储形式均为字符串。
①String类型
存储:set key value
取值:get key
删除:del key
查看所有键:keys *

127.0.0.1:6379> set key1 "nihao"
OK
127.0.0.1:6379> set key2 "haha"
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"

②Hash类型
相当于一个key对于一个map,map中还有key-value
存储:hset key field value
取值:hget key field

127.0.0.1:6379> hset zhangsan age 33
(integer) 1
127.0.0.1:6379> hset zhangsan weight 66
(integer) 1
127.0.0.1:6379> hget zhangsan age
"33"
127.0.0.1:6379> hget zhangsan weight
"66"
image

查看某个键对应的map里面的所有key:hkeys key
查看某个键对应的map里面的所有的value:hvals key
查看某个键的map:hgetall key

java5:0>hkeys zhangsan
 1)  "age"
 2)  "weight"
java5:0>hvals zhangsan
 1)  "33"
 2)  "66"
java5:0>hgetall zhangsan
 1)  "age"
 2)  "33"
 3)  "weight"
 4)  "66"

③List类型
存储:push,分为lpush list v1 v2 v3 v4 …(左边添加),rpush list v1 v2 v3 v4 …(右边添加)

java5:0>lpush list1 1 2 3 4
"4"
image

取值:pop,分为lpop lpop list(左边取,移除list最左边的值) ,rpop rpop list(右边取,移除list最右边的值)

java5:0>lpop list1
"4"
image

查看list:lrange key 0 2

lrange key 0 -1表示查看全部

java5:0>lrange list2 0 2
 1)  "wangwu"
 2)  "lisi"
 3)  "zhangsan"

存储,取值操作跟栈的存储,取值方法是一样的,而不是add,get,存储的值有序可以重复。用pop取值取完后该值就从list中移除了。

④Set类型
Set中的元素是无序不重复的,出现重复会覆盖
存储:sadd key v1 v2 v3 …

java5:0>sadd set1 hello world 123
"3"
``
移除:srem key v
```redis
java5:0>srem set1 123
"1"

查看set集合: smembers key

java5:0>smembers set1
 1)  "world"
 2)  "hello"

另外还提供了差集,交集,并集操作
差集:sdiff seta setb(seta中有setb中没有的元素)

redis:0>sadd set1 hello world nihao haha
"4"
redis:0>sadd set2 hello2 world2 nihao haha
"4"
redis:0>sdiff set1 set2
 1)  "hello"
 2)  "world"

交集:sinter seta setb

redis:0>sinter set1 set2
 1)  "haha"
 2)  "nihao"

并集:sunion seta setb

redis:0>sunion set1 set2
 1)  "hello2"
 2)  "haha"
 3)  "world"
 4)  "hello"
 5)  "world2"

⑤SortedSet,有序Set
存储:存储的时候要求对set进行排序,需要对存储的每个value值进行打分,默认排序是分数由低到高。zadd key 分数1 v1 分数2 v2 分数3 v3…

redis:0>zadd zset1 1 a 3 b 2 c 6 d 5 e 4 fredis:0> 
"6"
redis:0>zrange zset1 0 -1
 1)  "a"
 2)  "c"
 3)  "b"
 4)  "f"
 5)  "e"
 6)  "d"

取值:取指定的值 zrem key value(取出后,Set当中对应少一个)

redis:0>zrem zset1 b
"1"
redis:0>zrem zset1 a
"1"
redis:0>zrem zset1 c
"1"
image

取(遍历)所有的值(不包括分数):zrange key 0 -1,降序取值用zrevrange key 0 -1

redis:0>zrange zset1 0 -1
 1)  "f"
 2)  "e"
 3)  "d"

redis:0>zrevrange zset1 0 -1
 1)  "d"
 2)  "e"
 3)  "f"

取所有的值(带分数):zrange(zrevrange) key 0 -1 withscores

redis:0>zrange zset1 0 -1 withscores
 1)  "f"
 2)  "4"
 3)  "e"
 4)  "5"
 5)  "d"
 6)  "6"

⑥key命令
由于redis是内存存储数据,所以不能够存储过大的数据量,所以存储在redis中的数据,在不再需要的时候应该清除掉。比如,用户买完东西下订单,生成的订单信息存储了在redis中,但是用户一直没支付那么存储在redis中的订单信息就应该清除掉,这个时候就可以通过设置redis的过期时间来完成,一旦达到了过期时间就清除该信息。
设置key的过期时间:expired key 过期时间(秒)
查看key的有效剩余时间:ttl key

redis:0>expire zone 60 // 以秒为单位
"0"

redis:0>ttl zone
"-2"

redis:0>expire zset1 30
"1"

redis:0>ttl zset1
"23"

redis:0>ttl zset1
"6"

redis:0>ttl zset1
"-2"

清除key的过期时间,持久化该key:persist key

-1:表示持久化
-2:表示该key不存在

redis:0>expire set1 200
"1"

redis:0>ttl set1
"194"

redis:0>ttl set1
"172"

redis:0>persist set1
"1"

redis:0>ttl set1
"-1"

对于上面的基本操作,一般而言,至少得要掌握String类型,Hash类型以及key命令。


项目中使用redis

引入依赖

 
      redis.clients
      jedis
      2.9.0
    
    
    
      org.springframework.data
      spring-data-redis
      1.8.4.RELEASE
    
    
      org.springframework.data
      spring-data-commons
      1.8.4.RELEASE
    

db.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

redis.maxIdle=300
redis.maxWaitMillis=1000
redis.maxTotal=600
redis.testOnBorrow=true
redis.testOnReturn=true

配置文件application-redis.xml



    
    
        
        
        
        
        
    

    
    
        ${redis.host}
        ${redis.port}
        ${redis.password}
        
        100000
    

    
    
        
    


@Service
public class UserinfoServiceImpl implements UserinfoService {
    @Autowired
    UserinfoMapper userinfoMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    @Transactional
    public int add(Userinfo userinfo) {
        Object user = redisTemplate.opsForValue().get("user");
        int num = 0;
        if(user == null){
            num = userinfoMapper.add(userinfo);
            redisTemplate.opsForValue().set("user",String.valueOf(num));
        }
        return num;
    }
}

你可能感兴趣的:(Redis快速入门)