Redis学习笔记

Redis笔记
http://redis.cn/
==================================
大数据时代的3v: 主要是描述问题的
1.海量Volume 2.多样 Variety 3.实时Velocity
大数据时代的3高: 主要是对程序的要求
1.高并发 2.高可扩 3.高性能
===================================
redis是单线程的
Redis是很快的,官方表示,Redis是基于内存操作,CPU不是redis性能瓶颈个,
Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了。
Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差。
Redis为什么单线程还这么快?
1.误区一:高性能的服务器一定是多线程的?不一定
2.误区二:多线程(CPU上下文要上下文切换)一定比单线程效率高。
速度:CPU>内存>硬盘
核心: Redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,
多线程(CPU上下文会切换:耗时操作),对于内存系统来说,如果没有上下文切换效率就是最高的。
多次读写都是在一个CPU上的,在内存情况下这个就是最佳的方案。
===================================
基本命令
1.切换数据库(默认16个数据库)
select 0-15
select 15

2.查看数据库大小
dbsize

3.插入数据
set name wlq

4.取出数据
get name

5.查看所有的key
keys *

6.清空当前数据库
flushdb

7.清空所有数据库
flushall

8.判断键是否存在
exists name

9.把键值对移到其他数据库
move name 1

10.为键值对设置过期时间
expire name 10  (10秒后过期删除)
ttl name (查看剩余的时间)

11.查看类型
type name

===================================
五大数据类型
一、String(字符串)
1.追加字符串
append name wlq  # 追加字符串,如果当前的key不存在,就相当于set key

2.获取字符串的长度
strlen name

3.数量加减
set views 0
incr views # 自增1
decr views # 自减1
incrby views 10 # 加10
decrby views 5 # 减5

4. 字符串范围 getrange
getrange name 0 2
getrange name 0 -1  (获取全部字符串)

5.替换字符串 setrange 替换指定位置的字符串
# name "wlqwlqzhc123"
setrange name 1 oo  # "woowlqzhc123"

6.设置过期时间
setex (set with expire) # 设置过期时间
setnx (set if not exist) # 不存在再设置(在分布式锁中会常常使用)

setex key 30 hello # 设置key3的值为hello,30秒后过期
ttl key
setnx mykey wlq # 如果mykey不存在,创建mykey
setnx mykey zhc # 如果mykey存在,创建失败

7.设置多个值 (mset)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "mykey"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> mset k1 v1 k4 v4
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
4) "k4"
5) "mykey"
127.0.0.1:6379> msetnx k1 v1 k5 v5
(integer) 0
127.0.0.1:6379> get key5
(nil)
127.0.0.1:6379>

8.对象
set user:1{name:wql, age:21} # 设置一个user:1对象,值为json字符来保存一个对象

# user:{id}:{filed}

127.0.0.1:6379> mset user:2:name wlq user:2:age 22
OK
127.0.0.1:6379> mget user:2:name user:2:age
1) "wlq"
2) "22"

9.组合命令 getset
127.0.0.1:6379> getset db redis  # 如果不存在,则返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb  # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379>

================
二、List
所有的List命令都是用l开头的
1.lpush   rpush   lrange
127.0.0.1:6379> lpush list one  # 将一个值或者多个值,插入到列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1  # 获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right  将一个值或者多个值,插入到列表的头部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
============
2.lpop  rpop
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list  # 移除list的第一个元素
"three"
127.0.0.1:6379> rpop list  # 移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
============
3.lindex
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
127.0.0.1:6379> lindex list 0  # 通过下标获取list中的某一个值
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379>
============
4.Llen(返回列表的长度)
127.0.0.1:6379> Llen list
(integer) 2
============
5.lrem  移除指定数量的value

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
============
6.ltrim  截取指定范围

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> ltrim list 0 1
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>

============
7.rpoplpush  # 移除列表的最后一个元素,将他移动到新的列表中

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
127.0.0.1:6379> rpoplpush list list2
"two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
127.0.0.1:6379> lrange list2 0 -1
1) "two"
127.0.0.1:6379>

================================================
8.lset 将列表中指定下标的值替换为另一个值,更新操作

127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lset list2 0 item  # 如果不存在列表我们去更新就会报错
(error) ERR no such key
127.0.0.1:6379> lset list 0 item  # 如果存在,更新当前下标的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
2) "v2"
3) "v1"
127.0.0.1:6379> lset list 4 v4  # 如果不存在,则会报错
(error) ERR index out of range
127.0.0.1:6379>

================================================
9.linsert # 将某个具体的value插入到列表中某个元素的前面或者后面


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值