redis基本操作
来源:互联网 发布:淘宝中文国际版app 编辑:程序博客网 时间:2024/06/11 19:54
1、redis基本数据类型
string
list
set
sort set
hash
2、数据类型的基本操作
(1)string
127.0.0.1:6379> set name "lck"
OK
127.0.0.1:6379> get name
"lck"
127.0.0.1:6379> append name "jaca"
(integer) 7
127.0.0.1:6379> get name
"lckjaca"
127.0.0.1:6379> set counter 1000
OK
127.0.0.1:6379> get counter
"1000"
127.0.0.1:6379> incr counter
(integer) 1001
127.0.0.1:6379> decr counter
(integer) 1000
(2)list
127.0.0.1:6379> lpush lists redis #左添加
(integer) 1
127.0.0.1:6379> lpush lists mongo #左添加
(integer) 2
127.0.0.1:6379> lrange lists 1:-1 #有错误
(error) ERR wrong number of arguments for \'lrange\' command
127.0.0.1:6379> lrange lists 1 -1 #获取1到最后所有数据
1) "redis"
127.0.0.1:6379> lrange lists 0 -1 #获取所有数据
1) "mongo"
2) "redis"
127.0.0.1:6379> rpush lists python #右添加数据
(integer) 3
127.0.0.1:6379> lrange lists 0 -1
1) "mongo"
2) "redis"
3) "python"
127.0.0.1:6379> lpop lists #左取数据,取出后数据就没有了
"mongo"
127.0.0.1:6379> lrange lists 0 -1
1) "redis"
2) "python"
127.0.0.1:6379> rpop lists #右边取数据
"python"
127.0.0.1:6379> lrange lists 0 -1
1) "redis"
127.0.0.1:6379> llen lists
(integer) 1
(3)set
127.0.0.1:6379> sadd sets a
(integer) 1
127.0.0.1:6379> sadd sets bb
(integer) 1
127.0.0.1:6379> sadd sets bb
(integer) 0
127.0.0.1:6379> sadd sets ccc
(integer) 1
127.0.0.1:6379> sadd sets ccc
(integer) 0
127.0.0.1:6379> sadd sets a bb dddd
(integer) 1
127.0.0.1:6379> scard sets
(integer) 4
127.0.0.1:6379> scan sets
(error) ERR invalid cursor
127.0.0.1:6379> smember sets
(error) ERR unknown command \'smember\'
127.0.0.1:6379> smembers sets
1) "ccc"
2) "a"
3) "bb"
4) "dddd"
127.0.0.1:6379> scard set
(integer) 0
127.0.0.1:6379> scard sets
(integer) 4
127.0.0.1:6379> srem sets "dddd"
(integer) 1
127.0.0.1:6379> smembers sets
1) "ccc"
2) "a"
3) "bb"
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
(4)sort set
127.0.0.1:6379> zadd sortset 1 redis 3 mysql 2 python
(integer) 3
127.0.0.1:6379> zmembers sortset
(error) ERR unknown command \'zmembers\'
127.0.0.1:6379> smembers sortset
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> zrange sortset 0 -1
1) "redis"
2) "python"
3) "mysql"
127.0.0.1:6379> zadd sortset 2 mongo
(integer) 1
127.0.0.1:6379> zrange sortset 0 -1
1) "redis"
2) "mongo"
3) "python"
4) "mysql"
127.0.0.1:6379> zrank sortset 2
(nil)
127.0.0.1:6379> zrank sortset mongo
(integer) 1
127.0.0.1:6379> zrank sortset python
(integer) 2
127.0.0.1:6379> zrevrank sortset mongo
(integer) 2
127.0.0.1:6379> zrangebysocre sortset 2 3 withscores
(error) ERR unknown command \'zrangebysocre\'
127.0.0.1:6379> zrangebyscore sortset 2 3 withscores
1) "mongo"
2) "2"
3) "python"
4) "2"
5) "mysql"
6) "3"
127.0.0.1:6379> zcount sortset 2 3
(integer) 3
127.0.0.1:6379> zcard sortset
(integer) 4
(5)hash
127.0.0.1:6379> hset hashset field1 hello
(integer) 1
127.0.0.1:6379> hsetnx hashset field "hello"
(integer) 1
127.0.0.1:6379> hsetnx hashset field "hello"
(integer) 0
127.0.0.1:6379> hsetnx hashset field1 "hello"
(integer) 0
127.0.0.1:6379> hmset hash set field1 "hello1" field2 "hello2"
(error) ERR wrong number of arguments for HMSET
127.0.0.1:6379> hmset hashset field1 "hello1" field2 "hello2"
OK
127.0.0.1:6379> hget hashset field1
"hello1"
127.0.0.1:6379> hget hashset field2
"hello2"
127.0.0.1:6379> hget hashset field
"hello"
127.0.0.1:6379> hget hashset field3
(nil)
127.0.0.1:6379> hmget hashset field field1
1) "hello"
2) "hello1"
127.0.0.1:6379> hexist hashset field
(error) ERR unknown command \'hexist\'
127.0.0.1:6379> hexists hashset field
(integer) 1
127.0.0.1:6379> hexists hashset field4
(integer) 0
127.0.0.1:6379> hlen hashset
(integer) 3
127.0.0.1:6379> hdel hashset field2
(integer) 1
127.0.0.1:6379> hkeys hashset
1) "field1"
2) "field"
127.0.0.1:6379> hvals hashset
1) "hello1"
2) "hello"
127.0.0.1:6379> hgetall hashset
1) "field1"
2) "hello1"
3) "field"
4) "hello"
3、常用命令
(1)键值相关命令
127.0.0.1:6379> keys *
1) "counter"
2) "setB"
3) "setA"
4) "name"
5) "lists"
6) "sets"
7) "hashset"
8) "sortset"
127.0.0.1:6379> keys list*
1) "lists"
(2)exists
127.0.0.1:6379> exists list*
(integer) 0
127.0.0.1:6379> exists lists
(integer) 1
(3)del
127.0.0.1:6379> del setA
(integer) 1
127.0.0.1:6379> keys set*
1) "setB"
2) "sets"
(4)expires
127.0.0.1:6379> expire setB 10
(integer) 1
127.0.0.1:6379> keys set*
1) "setB"
2) "sets"
127.0.0.1:6379> keys set*
1) "sets"
(5)select、move
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set age 27
OK
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get age
"27"
(6)rename
127.0.0.1:6379> rename lists list_new
OK
127.0.0.1:6379> keys *
1) "counter"
2) "name"
3) "sets"
4) "list_new"
5) "hashset"
6) "sortset"
(7)type
127.0.0.1:6379> type name
string
127.0.0.1:6379> type sets
set
127.0.0.1:6379> type hashset
hash
(8)dbsize
127.0.0.1:6379> dbsize
(integer) 6
(9)info
127.0.0.1:6379> info
# Server
redis_version:2.8.19
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d7de94bf5eadec7a
redis_mode:standalone
os:Darwin 15.2.0 x86_64
arch_bits:64
multiplexing_api:kqueue
gcc_version:4.2.1
process_id:2649
run_id:2435ddcac767793374bb57a965b468e5a9a36d9b
tcp_port:6379
uptime_in_seconds:8221
uptime_in_days:0
hz:10
lru_clock:14648576
config_file:/usr/local/etc/redis.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:1004400
used_memory_human:980.86K
used_memory_rss:1040384
used_memory_peak:1004512
used_memory_peak_human:980.97K
used_memory_lua:35840
mem_fragmentation_ratio:1.04
mem_allocator:libc
# Persistence
loading:0
rdb_changes_since_last_save:8
rdb_bgsave_in_progress:0
rdb_last_save_time:1474265548
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:1
total_commands_processed:89
instantaneous_ops_per_sec:0
total_net_input_bytes:3308
total_net_output_bytes:1469
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:1
evicted_keys:0
keyspace_hits:41
keyspace_misses:2
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:285
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:3.19
used_cpu_user:1.64
used_cpu_sys_children:0.01
used_cpu_user_children:0.00
# Keyspace
db0:keys=6,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
(10)
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/var/db/redis"
4、事务控制
redis对事务的支持还是比较简单,redis只能保证一个client发起事务的命令可以连续的执行,而中间不会插入其他的client命令,由于redis是单线程来处理所有client的请求容易做到。一般情况下redis在接受到一个client发来的命令后会立即处理并返回处理结果,但是当一个client在一个连接中发出multi命令,这个连接会进入一个事务上下文,连接后续命令不是立即执行,而是先放到一个队列中。当从此连接收到exec后,redis会顺序执行队列中所有命令,并将所有命令结果打包到一起返回给client,然后连接就结束事务上下文。
(1)一个简单事务过程
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set age 27
OK
127.0.0.1:6379> get age
"27"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 28
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> exec
1) OK
2) "28"
127.0.0.1:6379> get age
"28"
(2)取消一个事务(discard)
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 29
QUEUED
127.0.0.1:6379> set age 50
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get age
"28"
(3)乐观锁复杂事务控制
大多数是基于数据版本(version)的记录机制实现的。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个 “version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。 此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
![](file:///var/folders/0x/j19lgt4n7tx35p_k6d7_71tw0000gn/T/WizNote/e55fef4b-15f2-48f1-9b0f-4ad9cf5dbab2/index_files/53464421.png)
![](file:///var/folders/0x/j19lgt4n7tx35p_k6d7_71tw0000gn/T/WizNote/e55fef4b-15f2-48f1-9b0f-4ad9cf5dbab2/index_files/53533340.png)
(2)第二步 session 2 已经将age设置为30
(3)第三步 session 1希望将age设置为20,但是执行返回结果是nil,说明执行失败,之后再取age值是30,这是由于Session 1 对age加了乐观锁导致的。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> watch age
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get age
"30"
0 0
- redis的基本操作
- redis基本操作
- Redis基本操作
- Redis基本操作
- redis基本操作
- Redis基本操作
- redis基本操作命令
- redis基本操作
- php redis 基本操作
- Redis基本操作
- redis基本操作
- Redis 基本操作
- redis的基本操作
- redis基本操作
- memcached & redis基本操作
- Redis 基本操作一
- redis基本操作命令
- redis 的基本操作
- 手把手教你实现SVM算法(一)
- jsp基本语法
- 59888
- 记一次解决mysql进程数居高不下的问题
- http://www.52im.net/thread-258-1-1.html
- redis基本操作
- 《C++高效编程:内存与性能优化》第十二章:优化IO
- 使用java将搜狗词库.scel文件转化为.txt文件
- SSM_login
- 利用runtime实现UIAlertView的block回调
- WPF-Dispatcher
- USACO2012 March Gold Large Banner
- iOS- Xcode8更新后输出log日志关闭
- mxnet深度学习实战:跑自己的数据实验和一些问题总结