redis的简单介绍(一)

redis的简单介绍


redis支持的常用数据结构
  • 字符串(String)
127.0.0.1:6379> SET name "toegg"
OK
127.0.0.1:6379> GET name
"toegg"
  • 散列(Hash)
127.0.0.1:6379> HSET user name "toegg1"
(integer) 1
127.0.0.1:6379> HSET user age 18
(integer) 1
127.0.0.1:6379> HSET user sex 1
(integer) 1
127.0.0.1:6379> HKEYS user  #获取所有key
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS user  #获取所有val
1) "toegg1"
2) "18"
3) "1"
127.0.0.1:6379> HGETALL user  #获取所有 key=>val
1) "name"
2) "toegg1"
3) "age"
4) "18"
5) "sex"
6) "1"
127.0.0.1:6379> HGET user name
"toegg1"
  • 列表(List)
127.0.0.1:6379> lpush list 1
(integer) 1
127.0.0.1:6379> lpush list 2
(integer) 2
127.0.0.1:6379> lpush list 3
(integer) 3
127.0.0.1:6379> lrange list 0 -1  #获取列表所有元素
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lpop list
"3"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "1"
  • 集合(Set)
127.0.0.1:6379> sadd set 1
(integer) 1
127.0.0.1:6379> sadd set 2
(integer) 1
127.0.0.1:6379> smembers set  #获取集合所有元素
1) "1"
2) "2"
127.0.0.1:6379> sadd set1 1
(integer) 1
127.0.0.1:6379> sadd set1 3
(integer) 1
127.0.0.1:6379> sadd set1 4
(integer) 1
127.0.0.1:6379> sinter set set1  #取两个集合的交集
1) "1"
127.0.0.1:6379> sunion set set1  #取两个集合的并集
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sdiff set set1  #取两个集合的差集
1) "2"
  • 有序集合(Sorted Set | ZSet)
127.0.0.1:6379> zadd sets 1 key1
(integer) 1
127.0.0.1:6379> zadd sets 2 key2
(integer) 1
127.0.0.1:6379> zadd sets 3 key3
(integer) 1
127.0.0.1:6379> zrange sets 0 -1  #获取所有元素
1) "key1"
2) "key2"
3) "key3"
127.0.0.1:6379> zrangebyscore sets 2 3 WITHSCORES  #返回score为2-3的元素,withscore保留score
1) "key2"
2) "2"
3) "key3"
4) "3"
127.0.0.1:6379> zrangebyscore sets 2 3  #返回score为2-3的元素
1) "key2"
2) "key3"

redis为什么这么快
  1. 完全基于内存,通过 key => val 键值对的形式来存储数据的nosql数据库,类似一个大hashMap,查找和操作复杂度为O(1)
  2. 单线程,避免了上下文的切换,多进程或者多线程切换导致的cpu消耗,不用考虑各种锁问题
  3. 使用IO多路复用epoll(采用事件驱动,读,写事件处理器)同时监听多个socket上的事件,根据事件到对应处理器处理,复杂度O(1)。不是poll和select(采用无差别轮询),复杂度 O(n)

redis和memcache的比较
  1. redis支持更复杂的数据结构,支持丰富的数据操作,需要缓存能够支持更复杂的结构和操作,redis是不错选择
  2. redis3.0后支持cluster集群模式,高可用,避免全盘奔溃,而memcache则不支持集群模式
  3. 性能对比:由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis

可使用Lazy懒加载redis**

​ 缓存基于内存的操作虽然很快,但是也不是所有东西都丢到内存,毕竟内存大小也有限,成本也很高。再者可采用需要时才加载到内存,不用则不加载,则是懒加载方式

​ 其中,读和更新,大概如下流程。更新时候不是更新缓存,而是直接删除缓存,就是为了懒加载。有可能频繁在更新,频繁在改缓存,但是实际没访问打到该key,实际就浪费了,所以可用到才加载

Read: 读缓存 -> 没有就去读db ->再写缓存
Update: 更新数据 ->更新db -> 删除缓存

​ 当然,具体情况还得视项目和业务而定,比如一些商品定点抢购,有些设计是事先需要缓存商品存货数量到内存,访问打到的时候做相应的限流拦截。需要先把数据放到缓存。不是所有都采用Lazy方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值