Redis使用入门,redis入门
Redis使用入门
文章目录- 1. Redis Introduction
- 2. Redis Install
- 3. Redis keys
- 4. Redis Strings
- 5. Redis 定时器
- 6. Redis Lists
- 7. Redis Sets
- 8. Redis Sorted Sets
- 9. Redis Hashes
- 10. Reference
本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.
Redis Introduction
Redis是一个用C语言实现的key-value store. 除了最基础的基于字符串的键值对,Redis可以是更加复杂的数据结构,所以redis也常被称为是一个data structure server(数据结构服务器)
Redis支持的数据结构列表:
- String(字符串)
- List(列表, 基本的
链表) - Set(元素唯一的, 无序的集合)
- Sorted Set(类似于Set, 但是每个字符串元素关联一个浮点数score, 用于排序)
- Hash(哈希)
- Bitmap
- HyperLogLogs
本篇没有涵盖Bitmap和HyperLogLogs的使用
Redis Install
在Redis下载页面下载需要版本的redis
| 123456789101112 | # 解压源文件$ tar xzf redis-3.0.2.tar.gz# 进入redis文件夹$ cd redis-3.0.2# 编译源文件$ make# 测试$ make test# 提示以下信息表示安装成功\o/ All tests passed without errors!Cleanup: may take some time... OK |
运行Redis的服务器端
| 1 | $ /src/redis-server |
运行Redis的交互式客户端
用过python应该都理解交互式的意义吧
| 1 | $ /src/redis-cli |
在.zshrc设置快捷启动
| 123456789101112131415 | $ vim ~/.zshrc# 在最后一行添加# Redis shortcuralias reds="/Users/andrew_liu/Development/redis-3.0.2/src/redis-server"alias redc="/Users/andrew_liu/Development/redis-3.0.2/src/redis-cli"# 保存后, 运行(Esc, :wq把保存并退出)$ source ~/.zshrc# 启动Redis服务器$ reds# 启动Redis交互式客户端$ redc |
Redis keys
Redis keys是二进制安全的, 可以使用任何二进制序列作为key, 空的字符串也是有效地key
Redis Strings
使用字符串作为value时, 我们在string key和string value之间建立了映射关系
- value不能大小不能操作
512MB SET命令设置键值对, 重复设置key的value, 会覆盖原来的valueGET命令通过key检索valueINRC命令将给定key的value看做整型, 实现加一操作, 这个命令是原子性的(原子性中是事务ACID特性之一)GETSET命令通过新的value设置key, 并返回旧的valueMSET和MGET命令分别用于同时设置或检索多个keyEXISTS命令, 如果给定的key存在返回1, 否则返回0DEL命令删除key-value对
| 123456789101112131415161718192021222324 | 127.0.0.1:6379> set mykey helloOK127.0.0.1:6379> get mykey"hello"127.0.0.1:6379> get mykey"1"127.0.0.1:6379> incr mykey(integer) 2127.0.0.1:6379> getset mykey how"2"127.0.0.1:6379> get mykey"how"127.0.0.1:6379> mset a 10 b 20 c 30OK127.0.0.1:6379> mget a b c1) "10"2) "20"3) "30"127.0.0.1:6379> exists a(integer) 1127.0.0.1:6379> del a(integer) 1127.0.0.1:6379> exists a(integer) 0 |
Redis 定时器
EXPIRE命令提供定时器功能, 设置key只能存在固定时间, 时间到key会被删除(以秒为单位)TTL用于查询key还有多长时间被删除.
TTL返回-2表示key已经被删除, TTL返回-1表示key不会expire
| 1234567891011 | 127.0.0.1:6379> set key valueOK127.0.0.1:6379> get key"value"127.0.0.1:6379> expire key 1000(integer) 1127.0.0.1:6379> ttl key(integer) 995# 1000秒后, 被删除127.0.0.1:6379> get key(nil) |
Redis Lists
Redis通过链表来实现List
链表的实现优点是快速的插入和删除, 缺点是检索相对数组实现List慢
LPUSH命令从List的头部插入一个或多个value, 返回插入后的list长度RPUSH命令从List的尾部插入一个或多个value, 返回插入后的list长度LLEN命令返回List的长度LRANGE命令从List取出固定一段子List(类似于python中的切片操作), 有两个索引参数, 都可以为负数LPOP命令从尾部删除valueRPOP命令从头部删除value, 没有value可删时返回nil
| 123456789101112131415161718 | 127.0.0.1:6379> rpush list A(integer) 1127.0.0.1:6379> rpush list B(integer) 2127.0.0.1:6379> lpush list C(integer) 3127.0.0.1:6379> llen list(integer) 3127.0.0.1:6379> lrange list 0 -11) "C"2) "A"3) "B"127.0.0.1:6379> rpush list a b c(integer) 6127.0.0.1:6379> rpop list"c"127.0.0.1:6379> lpop list"C" |
Redis Sets
value为Set, 表示无需的字符串集合
SADD命令向set中增加元素, 如果元素已存在则返回0, 否则返回1SMEMERS命令返回set集合, 返回的集合与插入时的顺序无关SISMEMBER命令测试元素是否在set中, 在返回1, 不在返回0SREM移除set中的元素SUNION命令链接多个set集合
| 12345678910111213 | 127.0.0.1:6379> sadd mset 1(integer) 1127.0.0.1:6379> sadd mset 1(integer) 0127.0.0.1:6379> sadd mset 2(integer) 1127.0.0.1:6379> smembers mset1) "1"2) "2"127.0.0.1:6379> sismember mset 1(integer) 1127.0.0.1:6379> sismember mset 3(integer) 0 |
Redis Sorted Sets
Sorted Set类似于Set和Hash的混合, Sorted Set中的元素也是唯一不重复的字符窜元素,
Set中的元素无需, Sorted Set中通过浮点数score排序, Sorted Set通过跳表和哈希表实现, 增加一个元素的复杂度O(log(N))
排序原则:
- score不同时, A.score > B.score => A > B
- score相同时, A.score = B.score => A和B通过比较字符串的
字典序进行排序 ZADD命令增加带score的元素, 可以传入多个score-value对ZRANGE命令类似于LRANGE操作,ZREVRANGE命令反序输出Sorted set元素片段
| 123456789101112131415161718192021222324 | 127.0.0.1:6379> zadd sset 1991"liu"(integer) 1127.0.0.1:6379> zadd sset 1991"andrew"(integer) 1127.0.0.1:6379> zadd sset 1992"dinosaur"(integer) 1127.0.0.1:6379> zadd sset 1993"bingo"(integer) 1127.0.0.1:6379> zadd sset 1994"hello"1995"world"(integer) 2127.0.0.1:6379> zrange sset 0 -11) "andrew"2) "liu"3) "dinosaur"4) "bingo"5) "hello"6) "world"127.0.0.1:6379> zrevrange sset 0 -11) "world"2) "hello"3) "bingo"4) "dinosaur"5) "liu"6) "andrew" |
Redis Hashes
HSET命令设置key中field和field应对的valueHMSET命令用于设置哈希中的多个fieldHGET命令用于检索单个fieldHMGET命令用于检索多个filedHGETALL命令获得key的所有的field和field对应的value
| 1234567891011121314151617181920212223 | 127.0.0.1:6379> hset user:1001 name "jane"(integer) 1127.0.0.1:6379> hset user:1001 email "jane@gamil.com"(integer) 1127.0.0.1:6379> hgetall user:10011) "name"2) "jane"3) "email"4) "jane@gamil.com"127.0.0.1:6379> hmset user:1000 username andrewliu birthday 2015 verfield 1OK127.0.0.1:6379> hget user:1000 username"andrewliu"127.0.0.1:6379> hgetall user:10001) "username"2) "andrewliu"3) "birthday"4) "2015"5) "verfield"6) "1"127.0.0.1:6379> hmget user:1000 username birthday1) "andrewliu"2) "2015" |
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。